Regen all docs. (#700)

* Stop recursing if discovery == {}

* Generate docs with 'make docs'.
diff --git a/docs/dyn/pubsub_v1beta2.projects.subscriptions.html b/docs/dyn/pubsub_v1beta2.projects.subscriptions.html
index 8d44e3f..4f9b355 100644
--- a/docs/dyn/pubsub_v1beta2.projects.subscriptions.html
+++ b/docs/dyn/pubsub_v1beta2.projects.subscriptions.html
@@ -72,7 +72,7 @@
 
 </style>
 
-<h1><a href="pubsub_v1beta2.html">Google Cloud Pub/Sub API</a> . <a href="pubsub_v1beta2.projects.html">projects</a> . <a href="pubsub_v1beta2.projects.subscriptions.html">subscriptions</a></h1>
+<h1><a href="pubsub_v1beta2.html">Cloud Pub/Sub API</a> . <a href="pubsub_v1beta2.projects.html">projects</a> . <a href="pubsub_v1beta2.projects.subscriptions.html">subscriptions</a></h1>
 <h2>Instance Methods</h2>
 <p class="toc_element">
   <code><a href="#acknowledge">acknowledge(subscription, body, x__xgafv=None)</a></code></p>
@@ -198,6 +198,22 @@
   "pushConfig": { # Configuration for a push delivery endpoint. # If push delivery is used with this subscription, this field is
       # used to configure it. An empty `pushConfig` signifies that the subscriber
       # will pull and ack messages using API methods.
+    "oidcToken": { # Contains information needed for generating an # If specified, Pub/Sub will generate and attach an OIDC JWT token as an
+        # `Authorization` header in the HTTP request for every pushed message.
+        # [OpenID Connect
+        # token](https://developers.google.com/identity/protocols/OpenIDConnect).
+      "audience": "A String", # Audience to be used when generating OIDC token. The audience claim
+          # identifies the recipients that the JWT is intended for. The audience
+          # value is a single case-sensitive string. Having multiple values (array)
+          # for the audience field is not supported. More info about the OIDC JWT
+          # token audience here: https://tools.ietf.org/html/rfc7519#section-4.1.3
+          # Note: if not specified, the Push endpoint URL will be used.
+      "serviceAccountEmail": "A String", # [Service account
+          # email](https://cloud.google.com/iam/docs/service-accounts)
+          # to be used for generating the OIDC token. The caller (for
+          # CreateSubscription, UpdateSubscription, and ModifyPushConfig RPCs) must
+          # have the iam.serviceAccounts.actAs permission for the service account.
+    },
     "attributes": { # Endpoint configuration attributes.
         #
         # Every endpoint has a set of API supported attributes that can be used to
@@ -266,6 +282,22 @@
     "pushConfig": { # Configuration for a push delivery endpoint. # If push delivery is used with this subscription, this field is
         # used to configure it. An empty `pushConfig` signifies that the subscriber
         # will pull and ack messages using API methods.
+      "oidcToken": { # Contains information needed for generating an # If specified, Pub/Sub will generate and attach an OIDC JWT token as an
+          # `Authorization` header in the HTTP request for every pushed message.
+          # [OpenID Connect
+          # token](https://developers.google.com/identity/protocols/OpenIDConnect).
+        "audience": "A String", # Audience to be used when generating OIDC token. The audience claim
+            # identifies the recipients that the JWT is intended for. The audience
+            # value is a single case-sensitive string. Having multiple values (array)
+            # for the audience field is not supported. More info about the OIDC JWT
+            # token audience here: https://tools.ietf.org/html/rfc7519#section-4.1.3
+            # Note: if not specified, the Push endpoint URL will be used.
+        "serviceAccountEmail": "A String", # [Service account
+            # email](https://cloud.google.com/iam/docs/service-accounts)
+            # to be used for generating the OIDC token. The caller (for
+            # CreateSubscription, UpdateSubscription, and ModifyPushConfig RPCs) must
+            # have the iam.serviceAccounts.actAs permission for the service account.
+      },
       "attributes": { # Endpoint configuration attributes.
           #
           # Every endpoint has a set of API supported attributes that can be used to
@@ -371,6 +403,22 @@
     "pushConfig": { # Configuration for a push delivery endpoint. # If push delivery is used with this subscription, this field is
         # used to configure it. An empty `pushConfig` signifies that the subscriber
         # will pull and ack messages using API methods.
+      "oidcToken": { # Contains information needed for generating an # If specified, Pub/Sub will generate and attach an OIDC JWT token as an
+          # `Authorization` header in the HTTP request for every pushed message.
+          # [OpenID Connect
+          # token](https://developers.google.com/identity/protocols/OpenIDConnect).
+        "audience": "A String", # Audience to be used when generating OIDC token. The audience claim
+            # identifies the recipients that the JWT is intended for. The audience
+            # value is a single case-sensitive string. Having multiple values (array)
+            # for the audience field is not supported. More info about the OIDC JWT
+            # token audience here: https://tools.ietf.org/html/rfc7519#section-4.1.3
+            # Note: if not specified, the Push endpoint URL will be used.
+        "serviceAccountEmail": "A String", # [Service account
+            # email](https://cloud.google.com/iam/docs/service-accounts)
+            # to be used for generating the OIDC token. The caller (for
+            # CreateSubscription, UpdateSubscription, and ModifyPushConfig RPCs) must
+            # have the iam.serviceAccounts.actAs permission for the service account.
+      },
       "attributes": { # Endpoint configuration attributes.
           #
           # Every endpoint has a set of API supported attributes that can be used to
@@ -428,12 +476,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": [
@@ -443,7 +491,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"
       #           ]
       #         },
       #         {
@@ -453,15 +501,48 @@
       #       ]
       #     }
       #
+      # **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
+        "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"
+          "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.
+          "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.
+          "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.
+          "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.
+        },
         "members": [ # Specifies the identities requesting access for a Cloud Platform resource.
             # `members` can have the following values:
             #
@@ -472,7 +553,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
@@ -481,7 +562,8 @@
             # * `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",
@@ -498,7 +580,7 @@
         #
         # 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.
+    "version": 42, # Deprecated.
   }</pre>
 </div>
 
@@ -550,6 +632,22 @@
         "pushConfig": { # Configuration for a push delivery endpoint. # If push delivery is used with this subscription, this field is
             # used to configure it. An empty `pushConfig` signifies that the subscriber
             # will pull and ack messages using API methods.
+          "oidcToken": { # Contains information needed for generating an # If specified, Pub/Sub will generate and attach an OIDC JWT token as an
+              # `Authorization` header in the HTTP request for every pushed message.
+              # [OpenID Connect
+              # token](https://developers.google.com/identity/protocols/OpenIDConnect).
+            "audience": "A String", # Audience to be used when generating OIDC token. The audience claim
+                # identifies the recipients that the JWT is intended for. The audience
+                # value is a single case-sensitive string. Having multiple values (array)
+                # for the audience field is not supported. More info about the OIDC JWT
+                # token audience here: https://tools.ietf.org/html/rfc7519#section-4.1.3
+                # Note: if not specified, the Push endpoint URL will be used.
+            "serviceAccountEmail": "A String", # [Service account
+                # email](https://cloud.google.com/iam/docs/service-accounts)
+                # to be used for generating the OIDC token. The caller (for
+                # CreateSubscription, UpdateSubscription, and ModifyPushConfig RPCs) must
+                # have the iam.serviceAccounts.actAs permission for the service account.
+          },
           "attributes": { # Endpoint configuration attributes.
               #
               # Every endpoint has a set of API supported attributes that can be used to
@@ -621,11 +719,11 @@
         # ack deadline will expire 10 seconds after the `ModifyAckDeadline` call
         # was made. Specifying zero may immediately make the message available for
         # another pull request.
+    "ackId": "A String", # The acknowledgment ID. Either this or ack_ids must be populated, but not
+        # both.
     "ackIds": [ # List of acknowledgment IDs.
       "A String",
     ],
-    "ackId": "A String", # The acknowledgment ID. Either this or ack_ids must be populated, but not
-        # both.
   }
 
   x__xgafv: string, V1 error format.
@@ -669,6 +767,22 @@
         # stop pushing messages from the given subscription and allow
         # messages to be pulled and acknowledged - effectively pausing
         # the subscription if `Pull` is not called.
+      "oidcToken": { # Contains information needed for generating an # If specified, Pub/Sub will generate and attach an OIDC JWT token as an
+          # `Authorization` header in the HTTP request for every pushed message.
+          # [OpenID Connect
+          # token](https://developers.google.com/identity/protocols/OpenIDConnect).
+        "audience": "A String", # Audience to be used when generating OIDC token. The audience claim
+            # identifies the recipients that the JWT is intended for. The audience
+            # value is a single case-sensitive string. Having multiple values (array)
+            # for the audience field is not supported. More info about the OIDC JWT
+            # token audience here: https://tools.ietf.org/html/rfc7519#section-4.1.3
+            # Note: if not specified, the Push endpoint URL will be used.
+        "serviceAccountEmail": "A String", # [Service account
+            # email](https://cloud.google.com/iam/docs/service-accounts)
+            # to be used for generating the OIDC token. The caller (for
+            # CreateSubscription, UpdateSubscription, and ModifyPushConfig RPCs) must
+            # have the iam.serviceAccounts.actAs permission for the service account.
+      },
       "attributes": { # Endpoint configuration attributes.
           #
           # Every endpoint has a set of API supported attributes that can be used to
@@ -794,12 +908,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": [
@@ -809,7 +923,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"
         #           ]
         #         },
         #         {
@@ -819,15 +933,48 @@
         #       ]
         #     }
         #
+        # **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
+          "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"
+            "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.
+            "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.
+            "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.
+            "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.
+          },
           "members": [ # Specifies the identities requesting access for a Cloud Platform resource.
               # `members` can have the following values:
               #
@@ -838,7 +985,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
@@ -847,7 +994,8 @@
               # * `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",
@@ -864,7 +1012,7 @@
           #
           # 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.
+      "version": 42, # Deprecated.
     },
   }
 
@@ -880,12 +1028,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": [
@@ -895,7 +1043,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"
       #           ]
       #         },
       #         {
@@ -905,15 +1053,48 @@
       #       ]
       #     }
       #
+      # **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
+        "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"
+          "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.
+          "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.
+          "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.
+          "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.
+        },
         "members": [ # Specifies the identities requesting access for a Cloud Platform resource.
             # `members` can have the following values:
             #
@@ -924,7 +1105,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
@@ -933,7 +1114,8 @@
             # * `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",
@@ -950,7 +1132,7 @@
         #
         # 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.
+    "version": 42, # Deprecated.
   }</pre>
 </div>