Regen all docs. (#700)

* Stop recursing if discovery == {}

* Generate docs with 'make docs'.
diff --git a/docs/dyn/pubsub_v1.projects.topics.html b/docs/dyn/pubsub_v1.projects.topics.html
index 9006a79..56f0dbf 100644
--- a/docs/dyn/pubsub_v1.projects.topics.html
+++ b/docs/dyn/pubsub_v1.projects.topics.html
@@ -72,16 +72,21 @@
 
 </style>
 
-<h1><a href="pubsub_v1.html">Google Cloud Pub/Sub API</a> . <a href="pubsub_v1.projects.html">projects</a> . <a href="pubsub_v1.projects.topics.html">topics</a></h1>
+<h1><a href="pubsub_v1.html">Cloud Pub/Sub API</a> . <a href="pubsub_v1.projects.html">projects</a> . <a href="pubsub_v1.projects.topics.html">topics</a></h1>
 <h2>Instance Methods</h2>
 <p class="toc_element">
+  <code><a href="pubsub_v1.projects.topics.snapshots.html">snapshots()</a></code>
+</p>
+<p class="firstline">Returns the snapshots Resource.</p>
+
+<p class="toc_element">
   <code><a href="pubsub_v1.projects.topics.subscriptions.html">subscriptions()</a></code>
 </p>
 <p class="firstline">Returns the subscriptions Resource.</p>
 
 <p class="toc_element">
   <code><a href="#create">create(name, body, x__xgafv=None)</a></code></p>
-<p class="firstline">Creates the given topic with the given name.</p>
+<p class="firstline">Creates the given topic with the given name. See the</p>
 <p class="toc_element">
   <code><a href="#delete">delete(topic, x__xgafv=None)</a></code></p>
 <p class="firstline">Deletes the topic with the given name. Returns `NOT_FOUND` if the topic</p>
@@ -98,6 +103,9 @@
   <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
 <p class="firstline">Retrieves the next page of results.</p>
 <p class="toc_element">
+  <code><a href="#patch">patch(name, body, x__xgafv=None)</a></code></p>
+<p class="firstline">Updates an existing topic. Note that certain properties of a</p>
+<p class="toc_element">
   <code><a href="#publish">publish(topic, body, x__xgafv=None)</a></code></p>
 <p class="firstline">Adds one or more messages to the topic. Returns `NOT_FOUND` if the topic</p>
 <p class="toc_element">
@@ -109,7 +117,9 @@
 <h3>Method Details</h3>
 <div class="method">
     <code class="details" id="create">create(name, body, x__xgafv=None)</code>
-  <pre>Creates the given topic with the given name.
+  <pre>Creates the given topic with the given name. See the
+<a href="https://cloud.google.com/pubsub/docs/admin#resource_names">
+resource name rules</a>.
 
 Args:
   name: string, The name of the topic. It must have the format
@@ -122,12 +132,35 @@
     The object takes the form of:
 
 { # A topic resource.
+  "labels": { # See <a href="https://cloud.google.com/pubsub/docs/labels"> Creating and
+      # managing labels</a>.
+    "a_key": "A String",
+  },
   "name": "A String", # The name of the topic. It must have the format
       # `"projects/{project}/topics/{topic}"`. `{topic}` must start with a letter,
       # and contain only letters (`[A-Za-z]`), numbers (`[0-9]`), dashes (`-`),
       # underscores (`_`), periods (`.`), tildes (`~`), plus (`+`) or percent
       # signs (`%`). It must be between 3 and 255 characters in length, and it
       # must not start with `"goog"`.
+  "messageStoragePolicy": { # Policy constraining how messages published to the topic may be stored. It
+      # is determined when the topic is created based on the policy configured at
+      # the project level. It must not be set by the caller in the request to
+      # CreateTopic or to UpdateTopic. This field will be populated in the
+      # responses for GetTopic, CreateTopic, and UpdateTopic: if not present in the
+      # response, then no constraints are in effect.
+    "allowedPersistenceRegions": [ # The list of GCP region IDs where messages that are published to the topic
+        # may be persisted in storage. Messages published by publishers running in
+        # non-allowed GCP regions (or running outside of GCP altogether) will be
+        # routed for storage in one of the allowed regions. An empty list indicates a
+        # misconfiguration at the project or organization level, which will result in
+        # all Publish operations failing.
+      "A String",
+    ],
+  },
+  "kmsKeyName": "A String", # The resource name of the Cloud KMS CryptoKey to be used to protect access
+      # to messages published on this topic.
+      # 
+      # The expected format is `projects/*/locations/*/keyRings/*/cryptoKeys/*`.
 }
 
   x__xgafv: string, V1 error format.
@@ -139,12 +172,35 @@
   An object of the form:
 
     { # A topic resource.
+    "labels": { # See <a href="https://cloud.google.com/pubsub/docs/labels"> Creating and
+        # managing labels</a>.
+      "a_key": "A String",
+    },
     "name": "A String", # The name of the topic. It must have the format
         # `"projects/{project}/topics/{topic}"`. `{topic}` must start with a letter,
         # and contain only letters (`[A-Za-z]`), numbers (`[0-9]`), dashes (`-`),
         # underscores (`_`), periods (`.`), tildes (`~`), plus (`+`) or percent
         # signs (`%`). It must be between 3 and 255 characters in length, and it
         # must not start with `"goog"`.
+    "messageStoragePolicy": { # Policy constraining how messages published to the topic may be stored. It
+        # is determined when the topic is created based on the policy configured at
+        # the project level. It must not be set by the caller in the request to
+        # CreateTopic or to UpdateTopic. This field will be populated in the
+        # responses for GetTopic, CreateTopic, and UpdateTopic: if not present in the
+        # response, then no constraints are in effect.
+      "allowedPersistenceRegions": [ # The list of GCP region IDs where messages that are published to the topic
+          # may be persisted in storage. Messages published by publishers running in
+          # non-allowed GCP regions (or running outside of GCP altogether) will be
+          # routed for storage in one of the allowed regions. An empty list indicates a
+          # misconfiguration at the project or organization level, which will result in
+          # all Publish operations failing.
+        "A String",
+      ],
+    },
+    "kmsKeyName": "A String", # The resource name of the Cloud KMS CryptoKey to be used to protect access
+        # to messages published on this topic.
+        #
+        # The expected format is `projects/*/locations/*/keyRings/*/cryptoKeys/*`.
   }</pre>
 </div>
 
@@ -195,12 +251,35 @@
   An object of the form:
 
     { # A topic resource.
+    "labels": { # See <a href="https://cloud.google.com/pubsub/docs/labels"> Creating and
+        # managing labels</a>.
+      "a_key": "A String",
+    },
     "name": "A String", # The name of the topic. It must have the format
         # `"projects/{project}/topics/{topic}"`. `{topic}` must start with a letter,
         # and contain only letters (`[A-Za-z]`), numbers (`[0-9]`), dashes (`-`),
         # underscores (`_`), periods (`.`), tildes (`~`), plus (`+`) or percent
         # signs (`%`). It must be between 3 and 255 characters in length, and it
         # must not start with `"goog"`.
+    "messageStoragePolicy": { # Policy constraining how messages published to the topic may be stored. It
+        # is determined when the topic is created based on the policy configured at
+        # the project level. It must not be set by the caller in the request to
+        # CreateTopic or to UpdateTopic. This field will be populated in the
+        # responses for GetTopic, CreateTopic, and UpdateTopic: if not present in the
+        # response, then no constraints are in effect.
+      "allowedPersistenceRegions": [ # The list of GCP region IDs where messages that are published to the topic
+          # may be persisted in storage. Messages published by publishers running in
+          # non-allowed GCP regions (or running outside of GCP altogether) will be
+          # routed for storage in one of the allowed regions. An empty list indicates a
+          # misconfiguration at the project or organization level, which will result in
+          # all Publish operations failing.
+        "A String",
+      ],
+    },
+    "kmsKeyName": "A String", # The resource name of the Cloud KMS CryptoKey to be used to protect access
+        # to messages published on this topic.
+        #
+        # The expected format is `projects/*/locations/*/keyRings/*/cryptoKeys/*`.
   }</pre>
 </div>
 
@@ -225,12 +304,12 @@
       # specify access control policies for Cloud Platform resources.
       #
       #
-      # A `Policy` consists of a list of `bindings`. A `Binding` binds a list of
+      # A `Policy` consists of a list of `bindings`. A `binding` binds a list of
       # `members` to a `role`, where the members can be user accounts, Google groups,
       # Google domains, and service accounts. A `role` is a named list of permissions
       # defined by IAM.
       #
-      # **Example**
+      # **JSON Example**
       #
       #     {
       #       "bindings": [
@@ -240,7 +319,7 @@
       #             "user:mike@example.com",
       #             "group:admins@example.com",
       #             "domain:google.com",
-      #             "serviceAccount:my-other-app@appspot.gserviceaccount.com",
+      #             "serviceAccount:my-other-app@appspot.gserviceaccount.com"
       #           ]
       #         },
       #         {
@@ -250,15 +329,27 @@
       #       ]
       #     }
       #
+      # **YAML Example**
+      #
+      #     bindings:
+      #     - members:
+      #       - user:mike@example.com
+      #       - group:admins@example.com
+      #       - domain:google.com
+      #       - serviceAccount:my-other-app@appspot.gserviceaccount.com
+      #       role: roles/owner
+      #     - members:
+      #       - user:sean@example.com
+      #       role: roles/viewer
+      #
+      #
       # For a description of IAM and its features, see the
-      # [IAM developer's guide](https://cloud.google.com/iam).
+      # [IAM developer's guide](https://cloud.google.com/iam/docs).
     "bindings": [ # Associates a list of `members` to a `role`.
-        # Multiple `bindings` must not be specified for the same `role`.
         # `bindings` with no members will result in an error.
       { # Associates `members` with a `role`.
         "role": "A String", # Role that is assigned to `members`.
             # For example, `roles/viewer`, `roles/editor`, or `roles/owner`.
-            # Required
         "members": [ # Specifies the identities requesting access for a Cloud Platform resource.
             # `members` can have the following values:
             #
@@ -269,7 +360,7 @@
             #    who is authenticated with a Google account or a service account.
             #
             # * `user:{emailid}`: An email address that represents a specific Google
-            #    account. For example, `alice@gmail.com` or `joe@example.com`.
+            #    account. For example, `alice@gmail.com` .
             #
             #
             # * `serviceAccount:{emailid}`: An email address that represents a service
@@ -278,13 +369,36 @@
             # * `group:{emailid}`: An email address that represents a Google group.
             #    For example, `admins@example.com`.
             #
-            # * `domain:{domain}`: A Google Apps domain name that represents all the
+            #
+            # * `domain:{domain}`: The G Suite domain (primary) that represents all the
             #    users of that domain. For example, `google.com` or `example.com`.
             #
           "A String",
         ],
+        "condition": { # Represents an expression text. Example: # The condition that is associated with this binding.
+            # NOTE: An unsatisfied condition will not allow user access via current
+            # binding. Different bindings, including their conditions, are examined
+            # independently.
+            #
+            #     title: "User account presence"
+            #     description: "Determines whether the request has a user account"
+            #     expression: "size(request.user) > 0"
+          "location": "A String", # An optional string indicating the location of the expression for error
+              # reporting, e.g. a file name and a position in the file.
+          "expression": "A String", # Textual representation of an expression in
+              # Common Expression Language syntax.
+              #
+              # The application context of the containing message determines which
+              # well-known feature set of CEL is supported.
+          "description": "A String", # An optional description of the expression. This is a longer text which
+              # describes the expression, e.g. when hovered over it in a UI.
+          "title": "A String", # An optional title for the expression, i.e. a short string describing
+              # its purpose. This can be used e.g. in UIs which allow to enter the
+              # expression.
+        },
       },
     ],
+    "version": 42, # Deprecated.
     "etag": "A String", # `etag` is used for optimistic concurrency control as a way to help
         # prevent simultaneous updates of a policy from overwriting each other.
         # It is strongly suggested that systems make use of the `etag` in the
@@ -295,7 +409,6 @@
         #
         # If no `etag` is provided in the call to `setIamPolicy`, then the existing
         # policy is overwritten blindly.
-    "version": 42, # Version of the `Policy`. The default version is 0.
   }</pre>
 </div>
 
@@ -304,8 +417,8 @@
   <pre>Lists matching topics.
 
 Args:
-  project: string, The name of the cloud project that topics belong to.
-Format is `projects/{project}`. (required)
+  project: string, The name of the project in which to list topics.
+Format is `projects/{project-id}`. (required)
   pageSize: integer, Maximum number of topics to return.
   pageToken: string, The value returned by the last `ListTopicsResponse`; indicates that this is
 a continuation of a prior `ListTopics` call, and that the system should
@@ -323,12 +436,35 @@
         # request; this value should be passed in a new `ListTopicsRequest`.
     "topics": [ # The resulting topics.
       { # A topic resource.
+        "labels": { # See <a href="https://cloud.google.com/pubsub/docs/labels"> Creating and
+            # managing labels</a>.
+          "a_key": "A String",
+        },
         "name": "A String", # The name of the topic. It must have the format
             # `"projects/{project}/topics/{topic}"`. `{topic}` must start with a letter,
             # and contain only letters (`[A-Za-z]`), numbers (`[0-9]`), dashes (`-`),
             # underscores (`_`), periods (`.`), tildes (`~`), plus (`+`) or percent
             # signs (`%`). It must be between 3 and 255 characters in length, and it
             # must not start with `"goog"`.
+        "messageStoragePolicy": { # Policy constraining how messages published to the topic may be stored. It
+            # is determined when the topic is created based on the policy configured at
+            # the project level. It must not be set by the caller in the request to
+            # CreateTopic or to UpdateTopic. This field will be populated in the
+            # responses for GetTopic, CreateTopic, and UpdateTopic: if not present in the
+            # response, then no constraints are in effect.
+          "allowedPersistenceRegions": [ # The list of GCP region IDs where messages that are published to the topic
+              # may be persisted in storage. Messages published by publishers running in
+              # non-allowed GCP regions (or running outside of GCP altogether) will be
+              # routed for storage in one of the allowed regions. An empty list indicates a
+              # misconfiguration at the project or organization level, which will result in
+              # all Publish operations failing.
+            "A String",
+          ],
+        },
+        "kmsKeyName": "A String", # The resource name of the Cloud KMS CryptoKey to be used to protect access
+            # to messages published on this topic.
+            #
+            # The expected format is `projects/*/locations/*/keyRings/*/cryptoKeys/*`.
       },
     ],
   }</pre>
@@ -349,10 +485,104 @@
 </div>
 
 <div class="method">
+    <code class="details" id="patch">patch(name, body, x__xgafv=None)</code>
+  <pre>Updates an existing topic. Note that certain properties of a
+topic are not modifiable.
+
+Args:
+  name: string, The name of the topic. It must have the format
+`"projects/{project}/topics/{topic}"`. `{topic}` must start with a letter,
+and contain only letters (`[A-Za-z]`), numbers (`[0-9]`), dashes (`-`),
+underscores (`_`), periods (`.`), tildes (`~`), plus (`+`) or percent
+signs (`%`). It must be between 3 and 255 characters in length, and it
+must not start with `"goog"`. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Request for the UpdateTopic method.
+    "topic": { # A topic resource. # The updated topic object.
+      "labels": { # See <a href="https://cloud.google.com/pubsub/docs/labels"> Creating and
+          # managing labels</a>.
+        "a_key": "A String",
+      },
+      "name": "A String", # The name of the topic. It must have the format
+          # `"projects/{project}/topics/{topic}"`. `{topic}` must start with a letter,
+          # and contain only letters (`[A-Za-z]`), numbers (`[0-9]`), dashes (`-`),
+          # underscores (`_`), periods (`.`), tildes (`~`), plus (`+`) or percent
+          # signs (`%`). It must be between 3 and 255 characters in length, and it
+          # must not start with `"goog"`.
+      "messageStoragePolicy": { # Policy constraining how messages published to the topic may be stored. It
+          # is determined when the topic is created based on the policy configured at
+          # the project level. It must not be set by the caller in the request to
+          # CreateTopic or to UpdateTopic. This field will be populated in the
+          # responses for GetTopic, CreateTopic, and UpdateTopic: if not present in the
+          # response, then no constraints are in effect.
+        "allowedPersistenceRegions": [ # The list of GCP region IDs where messages that are published to the topic
+            # may be persisted in storage. Messages published by publishers running in
+            # non-allowed GCP regions (or running outside of GCP altogether) will be
+            # routed for storage in one of the allowed regions. An empty list indicates a
+            # misconfiguration at the project or organization level, which will result in
+            # all Publish operations failing.
+          "A String",
+        ],
+      },
+      "kmsKeyName": "A String", # The resource name of the Cloud KMS CryptoKey to be used to protect access
+          # to messages published on this topic.
+          #
+          # The expected format is `projects/*/locations/*/keyRings/*/cryptoKeys/*`.
+    },
+    "updateMask": "A String", # Indicates which fields in the provided topic to update. Must be specified
+        # and non-empty. Note that if `update_mask` contains
+        # "message_storage_policy" then the new value will be determined based on the
+        # policy configured at the project or organization level. The
+        # `message_storage_policy` must not be set in the `topic` provided above.
+  }
+
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # A topic resource.
+    "labels": { # See <a href="https://cloud.google.com/pubsub/docs/labels"> Creating and
+        # managing labels</a>.
+      "a_key": "A String",
+    },
+    "name": "A String", # The name of the topic. It must have the format
+        # `"projects/{project}/topics/{topic}"`. `{topic}` must start with a letter,
+        # and contain only letters (`[A-Za-z]`), numbers (`[0-9]`), dashes (`-`),
+        # underscores (`_`), periods (`.`), tildes (`~`), plus (`+`) or percent
+        # signs (`%`). It must be between 3 and 255 characters in length, and it
+        # must not start with `"goog"`.
+    "messageStoragePolicy": { # Policy constraining how messages published to the topic may be stored. It
+        # is determined when the topic is created based on the policy configured at
+        # the project level. It must not be set by the caller in the request to
+        # CreateTopic or to UpdateTopic. This field will be populated in the
+        # responses for GetTopic, CreateTopic, and UpdateTopic: if not present in the
+        # response, then no constraints are in effect.
+      "allowedPersistenceRegions": [ # The list of GCP region IDs where messages that are published to the topic
+          # may be persisted in storage. Messages published by publishers running in
+          # non-allowed GCP regions (or running outside of GCP altogether) will be
+          # routed for storage in one of the allowed regions. An empty list indicates a
+          # misconfiguration at the project or organization level, which will result in
+          # all Publish operations failing.
+        "A String",
+      ],
+    },
+    "kmsKeyName": "A String", # The resource name of the Cloud KMS CryptoKey to be used to protect access
+        # to messages published on this topic.
+        #
+        # The expected format is `projects/*/locations/*/keyRings/*/cryptoKeys/*`.
+  }</pre>
+</div>
+
+<div class="method">
     <code class="details" id="publish">publish(topic, body, x__xgafv=None)</code>
   <pre>Adds one or more messages to the topic. Returns `NOT_FOUND` if the topic
-does not exist. The message payload must not be empty; it must contain
- either a non-empty data field, or at least one attribute.
+does not exist.
 
 Args:
   topic: string, The messages in the request will be published on this topic.
@@ -362,12 +592,19 @@
 
 { # Request for the Publish method.
     "messages": [ # The messages to publish.
-      { # A message data and its attributes. The message payload must not be empty;
-          # it must contain either a non-empty data field, or at least one attribute.
+      { # A message that is published by publishers and consumed by subscribers. The
+          # message must contain either a non-empty data field or at least one attribute.
+          # Note that client libraries represent this object differently
+          # depending on the language. See the corresponding
+          # <a href="https://cloud.google.com/pubsub/docs/reference/libraries">client
+          # library documentation</a> for more information. See
+          # <a href="https://cloud.google.com/pubsub/quotas">Quotas and limits</a>
+          # for more information about message limits.
         "attributes": { # Optional attributes for this message.
           "a_key": "A String",
         },
-        "data": "A String", # The message payload.
+        "data": "A String", # The message data field. If this field is empty, the message must contain
+            # at least one attribute.
         "publishTime": "A String", # The time at which the message was published, populated by the server when
             # it receives the `Publish` call. It must not be populated by the
             # publisher in a `Publish` call.
@@ -415,12 +652,12 @@
         # specify access control policies for Cloud Platform resources.
         #
         #
-        # A `Policy` consists of a list of `bindings`. A `Binding` binds a list of
+        # A `Policy` consists of a list of `bindings`. A `binding` binds a list of
         # `members` to a `role`, where the members can be user accounts, Google groups,
         # Google domains, and service accounts. A `role` is a named list of permissions
         # defined by IAM.
         #
-        # **Example**
+        # **JSON Example**
         #
         #     {
         #       "bindings": [
@@ -430,7 +667,7 @@
         #             "user:mike@example.com",
         #             "group:admins@example.com",
         #             "domain:google.com",
-        #             "serviceAccount:my-other-app@appspot.gserviceaccount.com",
+        #             "serviceAccount:my-other-app@appspot.gserviceaccount.com"
         #           ]
         #         },
         #         {
@@ -440,15 +677,27 @@
         #       ]
         #     }
         #
+        # **YAML Example**
+        #
+        #     bindings:
+        #     - members:
+        #       - user:mike@example.com
+        #       - group:admins@example.com
+        #       - domain:google.com
+        #       - serviceAccount:my-other-app@appspot.gserviceaccount.com
+        #       role: roles/owner
+        #     - members:
+        #       - user:sean@example.com
+        #       role: roles/viewer
+        #
+        #
         # For a description of IAM and its features, see the
-        # [IAM developer's guide](https://cloud.google.com/iam).
+        # [IAM developer's guide](https://cloud.google.com/iam/docs).
       "bindings": [ # Associates a list of `members` to a `role`.
-          # Multiple `bindings` must not be specified for the same `role`.
           # `bindings` with no members will result in an error.
         { # Associates `members` with a `role`.
           "role": "A String", # Role that is assigned to `members`.
               # For example, `roles/viewer`, `roles/editor`, or `roles/owner`.
-              # Required
           "members": [ # Specifies the identities requesting access for a Cloud Platform resource.
               # `members` can have the following values:
               #
@@ -459,7 +708,7 @@
               #    who is authenticated with a Google account or a service account.
               #
               # * `user:{emailid}`: An email address that represents a specific Google
-              #    account. For example, `alice@gmail.com` or `joe@example.com`.
+              #    account. For example, `alice@gmail.com` .
               #
               #
               # * `serviceAccount:{emailid}`: An email address that represents a service
@@ -468,13 +717,36 @@
               # * `group:{emailid}`: An email address that represents a Google group.
               #    For example, `admins@example.com`.
               #
-              # * `domain:{domain}`: A Google Apps domain name that represents all the
+              #
+              # * `domain:{domain}`: The G Suite domain (primary) that represents all the
               #    users of that domain. For example, `google.com` or `example.com`.
               #
             "A String",
           ],
+          "condition": { # Represents an expression text. Example: # The condition that is associated with this binding.
+              # NOTE: An unsatisfied condition will not allow user access via current
+              # binding. Different bindings, including their conditions, are examined
+              # independently.
+              #
+              #     title: "User account presence"
+              #     description: "Determines whether the request has a user account"
+              #     expression: "size(request.user) > 0"
+            "location": "A String", # An optional string indicating the location of the expression for error
+                # reporting, e.g. a file name and a position in the file.
+            "expression": "A String", # Textual representation of an expression in
+                # Common Expression Language syntax.
+                #
+                # The application context of the containing message determines which
+                # well-known feature set of CEL is supported.
+            "description": "A String", # An optional description of the expression. This is a longer text which
+                # describes the expression, e.g. when hovered over it in a UI.
+            "title": "A String", # An optional title for the expression, i.e. a short string describing
+                # its purpose. This can be used e.g. in UIs which allow to enter the
+                # expression.
+          },
         },
       ],
+      "version": 42, # Deprecated.
       "etag": "A String", # `etag` is used for optimistic concurrency control as a way to help
           # prevent simultaneous updates of a policy from overwriting each other.
           # It is strongly suggested that systems make use of the `etag` in the
@@ -485,7 +757,6 @@
           #
           # If no `etag` is provided in the call to `setIamPolicy`, then the existing
           # policy is overwritten blindly.
-      "version": 42, # Version of the `Policy`. The default version is 0.
     },
   }
 
@@ -501,12 +772,12 @@
       # specify access control policies for Cloud Platform resources.
       #
       #
-      # A `Policy` consists of a list of `bindings`. A `Binding` binds a list of
+      # A `Policy` consists of a list of `bindings`. A `binding` binds a list of
       # `members` to a `role`, where the members can be user accounts, Google groups,
       # Google domains, and service accounts. A `role` is a named list of permissions
       # defined by IAM.
       #
-      # **Example**
+      # **JSON Example**
       #
       #     {
       #       "bindings": [
@@ -516,7 +787,7 @@
       #             "user:mike@example.com",
       #             "group:admins@example.com",
       #             "domain:google.com",
-      #             "serviceAccount:my-other-app@appspot.gserviceaccount.com",
+      #             "serviceAccount:my-other-app@appspot.gserviceaccount.com"
       #           ]
       #         },
       #         {
@@ -526,15 +797,27 @@
       #       ]
       #     }
       #
+      # **YAML Example**
+      #
+      #     bindings:
+      #     - members:
+      #       - user:mike@example.com
+      #       - group:admins@example.com
+      #       - domain:google.com
+      #       - serviceAccount:my-other-app@appspot.gserviceaccount.com
+      #       role: roles/owner
+      #     - members:
+      #       - user:sean@example.com
+      #       role: roles/viewer
+      #
+      #
       # For a description of IAM and its features, see the
-      # [IAM developer's guide](https://cloud.google.com/iam).
+      # [IAM developer's guide](https://cloud.google.com/iam/docs).
     "bindings": [ # Associates a list of `members` to a `role`.
-        # Multiple `bindings` must not be specified for the same `role`.
         # `bindings` with no members will result in an error.
       { # Associates `members` with a `role`.
         "role": "A String", # Role that is assigned to `members`.
             # For example, `roles/viewer`, `roles/editor`, or `roles/owner`.
-            # Required
         "members": [ # Specifies the identities requesting access for a Cloud Platform resource.
             # `members` can have the following values:
             #
@@ -545,7 +828,7 @@
             #    who is authenticated with a Google account or a service account.
             #
             # * `user:{emailid}`: An email address that represents a specific Google
-            #    account. For example, `alice@gmail.com` or `joe@example.com`.
+            #    account. For example, `alice@gmail.com` .
             #
             #
             # * `serviceAccount:{emailid}`: An email address that represents a service
@@ -554,13 +837,36 @@
             # * `group:{emailid}`: An email address that represents a Google group.
             #    For example, `admins@example.com`.
             #
-            # * `domain:{domain}`: A Google Apps domain name that represents all the
+            #
+            # * `domain:{domain}`: The G Suite domain (primary) that represents all the
             #    users of that domain. For example, `google.com` or `example.com`.
             #
           "A String",
         ],
+        "condition": { # Represents an expression text. Example: # The condition that is associated with this binding.
+            # NOTE: An unsatisfied condition will not allow user access via current
+            # binding. Different bindings, including their conditions, are examined
+            # independently.
+            #
+            #     title: "User account presence"
+            #     description: "Determines whether the request has a user account"
+            #     expression: "size(request.user) > 0"
+          "location": "A String", # An optional string indicating the location of the expression for error
+              # reporting, e.g. a file name and a position in the file.
+          "expression": "A String", # Textual representation of an expression in
+              # Common Expression Language syntax.
+              #
+              # The application context of the containing message determines which
+              # well-known feature set of CEL is supported.
+          "description": "A String", # An optional description of the expression. This is a longer text which
+              # describes the expression, e.g. when hovered over it in a UI.
+          "title": "A String", # An optional title for the expression, i.e. a short string describing
+              # its purpose. This can be used e.g. in UIs which allow to enter the
+              # expression.
+        },
       },
     ],
+    "version": 42, # Deprecated.
     "etag": "A String", # `etag` is used for optimistic concurrency control as a way to help
         # prevent simultaneous updates of a policy from overwriting each other.
         # It is strongly suggested that systems make use of the `etag` in the
@@ -571,7 +877,6 @@
         #
         # If no `etag` is provided in the call to `setIamPolicy`, then the existing
         # policy is overwritten blindly.
-    "version": 42, # Version of the `Policy`. The default version is 0.
   }</pre>
 </div>