chore(all): auto-regenerate .pb.go files (#1112)


This is an auto-generated regeneration of the .pb.go files by
cloud.google.com/go/internal/gapicgen. Once this PR is submitted, genbot will
update the corresponding PR to depend on the newer version of go-genproto, and
assign reviewers. Whilst this or any regen PR is open in go-genproto, genbot
will not create any more regeneration PRs. If all regen PRs are closed,
gapicgen will create a new set of regeneration PRs once per night.

If you have been assigned to review this PR, please:

- Ensure that CI is passing. If it's failing, it requires your manual attention.
- Approve and submit this PR if you believe it's ready to ship. That will prompt
genbot to assign reviewers to the google-cloud-go PR.


There is no corresponding google-cloud-go PR.

Changes:

docs:card proto update feat: material icon in card
  PiperOrigin-RevId: 624942359
  Source-Link: https://togithub.com/googleapis/googleapis/commit/436a34a5da04978e98859afe7487ce93d08e9c03

chore: regenerate API index
  
  Source-Link: https://togithub.com/googleapis/googleapis/commit/113a378d5aad5018876ec0a8cbfd4d6a4f746809

feat: add model_monitor resource and APIs to public v1beta1 client library
  PiperOrigin-RevId: 624288685
  Source-Link: https://togithub.com/googleapis/googleapis/commit/b5d0197dce43a7c81a38573b5c1efc8da14a27df

fix!: mark parent/name fields with the REQUIRED field_behavior annotation docs: updated comments
  PiperOrigin-RevId: 624277410
  Source-Link: https://togithub.com/googleapis/googleapis/commit/2d881be8c566e4c374061248dd205efd72b7ef4f

chore: add license and generated code headers to generated resource files
  PiperOrigin-RevId: 624246268
  Source-Link: https://togithub.com/googleapis/googleapis/commit/72bfeaddd3b2efa3d8cb176f28d2d3c324271103

feat: add PHP geo common protos and new surfaces for Maps Fleetengine PHP
  PiperOrigin-RevId: 624246100
  Source-Link: https://togithub.com/googleapis/googleapis/commit/84d7f78a42e1e19f02960a4dd159e4c79d4a5335

chore: regenerate API index
  
  Source-Link: https://togithub.com/googleapis/googleapis/commit/b9352ebb4ca015c712b673f92fd732e32c1dc7b4

docs: Various updates
  PiperOrigin-RevId: 624233552
  Source-Link: https://togithub.com/googleapis/googleapis/commit/1413b13ee1741183772b57481d5f9a99c9bdc129

diff --git a/go.work.sum b/go.work.sum
index 14b6d21..cb45cc7 100644
--- a/go.work.sum
+++ b/go.work.sum
@@ -76,7 +76,9 @@
 github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
 github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
 github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
+github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
 github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
+github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
 github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
 github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
 github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
@@ -85,6 +87,7 @@
 github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
 github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
 github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk=
@@ -208,6 +211,7 @@
 golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58=
 golang.org/x/tools v0.14.0/go.mod h1:uYBEerGOWcJyEORxN+Ek8+TT266gXkNlHdJBwexUsBg=
 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8=
 golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90=
@@ -216,6 +220,7 @@
 google.golang.org/api v0.126.0/go.mod h1:mBwVAtz+87bEN6CbA1GtZPDOqY2R5ONPqJeIlvyo4Aw=
 google.golang.org/api v0.169.0/go.mod h1:gpNOiMA2tZ4mf5R9Iwf4rK/Dcz0fbdIgWYWVoxmsyLg=
 google.golang.org/api v0.170.0/go.mod h1:/xql9M2btF85xac/VAm4PsLMTLVGUOpq4BE9R8jyNy8=
+google.golang.org/api v0.172.0/go.mod h1:+fJZq6QXWfa9pXhnIzsjx4yI22d4aI9ZpLb58gvXjis=
 google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
 google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
 google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
@@ -230,13 +235,18 @@
 google.golang.org/genproto v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:xZnkP7mREFX5MORlOPEzLMr+90PPZQ2QWzrVTWfAq64=
 google.golang.org/genproto v0.0.0-20240123012728-ef4313101c80/go.mod h1:cc8bqMqtv9gMOr0zHg2Vzff5ULhhL2IXP4sbcn32Dro=
 google.golang.org/genproto v0.0.0-20240205150955-31a09d347014/go.mod h1:xEgQu1e4stdSSsxPDK8Azkrk/ECl5HvdPf6nbZrTS5M=
+google.golang.org/genproto v0.0.0-20240213162025-012b6fc9bca9/go.mod h1:mqHbVIp48Muh7Ywss/AD6I5kNVKZMmAa/QEW58Gxp2s=
 google.golang.org/genproto/googleapis/api v0.0.0-20240123012728-ef4313101c80/go.mod h1:4jWUdICTdgc3Ibxmr8nAJiiLHwQBY0UI0XZcEMaFKaA=
+google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:5iCWqnniDlqZHrd3neWVTOwvh/v6s3232omMecelax8=
 google.golang.org/genproto/googleapis/api v0.0.0-20240314234333-6e1732d8331c/go.mod h1:VQW3tUculP/D4B+xVCo+VgSq8As6wA9ZjHl//pmk+6s=
 google.golang.org/genproto/googleapis/bytestream v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:ylj+BE99M198VPbBh6A8d9n3w8fChvyLK3wwBOjXBFA=
 google.golang.org/genproto/googleapis/bytestream v0.0.0-20240311132316-a219d84964c2/go.mod h1:vh/N7795ftP0AkN1w8XKqN4w1OdUKXW5Eummda+ofv8=
+google.golang.org/genproto/googleapis/bytestream v0.0.0-20240318140521-94a12d6c2237/go.mod h1:IN9OQUXZ0xT+26MDwZL8fJcYw+y99b0eYPA2U15Jt8o=
 google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80/go.mod h1:PAREbraiVEVGVdTZsVWjSbbTtSyGbAgIIvni8a8CD5s=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:H4O17MA/PE9BsGx3w+a+W2VOLLD1Qf7oJneAoU6WktY=
 google.golang.org/genproto/googleapis/rpc v0.0.0-20240311132316-a219d84964c2/go.mod h1:UCOku4NytXMJuLQE5VuqA5lX3PcHCBo8pxNyvkf4xBs=
 google.golang.org/genproto/googleapis/rpc v0.0.0-20240314234333-6e1732d8331c/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY=
 google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
 google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
 google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
@@ -249,6 +259,7 @@
 google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw=
 google.golang.org/grpc v1.55.0/go.mod h1:iYEXKGkEBhg1PjZQvoYEVPTDkHo1/bjTnfwTeGONTY8=
 google.golang.org/grpc v1.62.0/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE=
+google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE=
 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw=
 google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
 google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
@@ -259,6 +270,8 @@
 google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
 google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
 google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
+google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
+google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
 google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
 google.golang.org/protobuf v1.29.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
 google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
diff --git a/googleapis/apps/card/v1/card.pb.go b/googleapis/apps/card/v1/card.pb.go
new file mode 100644
index 0000000..fae54ed
--- /dev/null
+++ b/googleapis/apps/card/v1/card.pb.go
@@ -0,0 +1,6448 @@
+// Copyright 2023 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// 	protoc-gen-go v1.26.0
+// 	protoc        v4.24.4
+// source: google/apps/card/v1/card.proto
+
+package card
+
+import (
+	reflect "reflect"
+	sync "sync"
+
+	color "google.golang.org/genproto/googleapis/type/color"
+	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+)
+
+const (
+	// Verify that this generated code is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+	// Verify that runtime/protoimpl is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+// The divider style of a card. Currently only used for dividers betweens card
+// sections.
+//
+// [Google Workspace Add-ons and Chat
+// apps](https://developers.google.com/workspace/extend):
+type Card_DividerStyle int32
+
+const (
+	// Don't use. Unspecified.
+	Card_DIVIDER_STYLE_UNSPECIFIED Card_DividerStyle = 0
+	// Default option. Render a solid divider between sections.
+	Card_SOLID_DIVIDER Card_DividerStyle = 1
+	// If set, no divider is rendered between sections.
+	Card_NO_DIVIDER Card_DividerStyle = 2
+)
+
+// Enum value maps for Card_DividerStyle.
+var (
+	Card_DividerStyle_name = map[int32]string{
+		0: "DIVIDER_STYLE_UNSPECIFIED",
+		1: "SOLID_DIVIDER",
+		2: "NO_DIVIDER",
+	}
+	Card_DividerStyle_value = map[string]int32{
+		"DIVIDER_STYLE_UNSPECIFIED": 0,
+		"SOLID_DIVIDER":             1,
+		"NO_DIVIDER":                2,
+	}
+)
+
+func (x Card_DividerStyle) Enum() *Card_DividerStyle {
+	p := new(Card_DividerStyle)
+	*p = x
+	return p
+}
+
+func (x Card_DividerStyle) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (Card_DividerStyle) Descriptor() protoreflect.EnumDescriptor {
+	return file_google_apps_card_v1_card_proto_enumTypes[0].Descriptor()
+}
+
+func (Card_DividerStyle) Type() protoreflect.EnumType {
+	return &file_google_apps_card_v1_card_proto_enumTypes[0]
+}
+
+func (x Card_DividerStyle) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use Card_DividerStyle.Descriptor instead.
+func (Card_DividerStyle) EnumDescriptor() ([]byte, []int) {
+	return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{0, 0}
+}
+
+// In Google Workspace Add-ons,
+// determines how a card is displayed.
+//
+// [Google Workspace
+// Add-ons](https://developers.google.com/workspace/add-ons):
+type Card_DisplayStyle int32
+
+const (
+	// Don't use. Unspecified.
+	Card_DISPLAY_STYLE_UNSPECIFIED Card_DisplayStyle = 0
+	// The header of the card appears at the bottom of the
+	// sidebar, partially covering the current top card of the stack. Clicking
+	// the header pops the card into the card stack. If the card has no header,
+	// a generated header is used instead.
+	Card_PEEK Card_DisplayStyle = 1
+	// Default value. The card is shown by replacing the view of the top card in
+	// the card stack.
+	Card_REPLACE Card_DisplayStyle = 2
+)
+
+// Enum value maps for Card_DisplayStyle.
+var (
+	Card_DisplayStyle_name = map[int32]string{
+		0: "DISPLAY_STYLE_UNSPECIFIED",
+		1: "PEEK",
+		2: "REPLACE",
+	}
+	Card_DisplayStyle_value = map[string]int32{
+		"DISPLAY_STYLE_UNSPECIFIED": 0,
+		"PEEK":                      1,
+		"REPLACE":                   2,
+	}
+)
+
+func (x Card_DisplayStyle) Enum() *Card_DisplayStyle {
+	p := new(Card_DisplayStyle)
+	*p = x
+	return p
+}
+
+func (x Card_DisplayStyle) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (Card_DisplayStyle) Descriptor() protoreflect.EnumDescriptor {
+	return file_google_apps_card_v1_card_proto_enumTypes[1].Descriptor()
+}
+
+func (Card_DisplayStyle) Type() protoreflect.EnumType {
+	return &file_google_apps_card_v1_card_proto_enumTypes[1]
+}
+
+func (x Card_DisplayStyle) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use Card_DisplayStyle.Descriptor instead.
+func (Card_DisplayStyle) EnumDescriptor() ([]byte, []int) {
+	return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{0, 1}
+}
+
+// The shape used to crop the image.
+//
+// [Google Workspace Add-ons and Chat
+// apps](https://developers.google.com/workspace/extend):
+type Widget_ImageType int32
+
+const (
+	// Default value. Applies a square mask to the image. For example, a 4x3
+	// image becomes 3x3.
+	Widget_SQUARE Widget_ImageType = 0
+	// Applies a circular mask to the image. For example, a 4x3 image becomes a
+	// circle with a diameter of 3.
+	Widget_CIRCLE Widget_ImageType = 1
+)
+
+// Enum value maps for Widget_ImageType.
+var (
+	Widget_ImageType_name = map[int32]string{
+		0: "SQUARE",
+		1: "CIRCLE",
+	}
+	Widget_ImageType_value = map[string]int32{
+		"SQUARE": 0,
+		"CIRCLE": 1,
+	}
+)
+
+func (x Widget_ImageType) Enum() *Widget_ImageType {
+	p := new(Widget_ImageType)
+	*p = x
+	return p
+}
+
+func (x Widget_ImageType) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (Widget_ImageType) Descriptor() protoreflect.EnumDescriptor {
+	return file_google_apps_card_v1_card_proto_enumTypes[2].Descriptor()
+}
+
+func (Widget_ImageType) Type() protoreflect.EnumType {
+	return &file_google_apps_card_v1_card_proto_enumTypes[2]
+}
+
+func (x Widget_ImageType) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use Widget_ImageType.Descriptor instead.
+func (Widget_ImageType) EnumDescriptor() ([]byte, []int) {
+	return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{1, 0}
+}
+
+// Specifies whether widgets align to the left, right, or center of a column.
+//
+// [Google Chat apps](https://developers.google.com/workspace/chat):
+type Widget_HorizontalAlignment int32
+
+const (
+	// Don't use. Unspecified.
+	Widget_HORIZONTAL_ALIGNMENT_UNSPECIFIED Widget_HorizontalAlignment = 0
+	// Default value. Aligns widgets to the start position of the column. For
+	// left-to-right layouts, aligns to the left. For right-to-left layouts,
+	// aligns to the right.
+	Widget_START Widget_HorizontalAlignment = 1
+	// Aligns widgets to the center of the column.
+	Widget_CENTER Widget_HorizontalAlignment = 2
+	// Aligns widgets to the end position of the column. For left-to-right
+	// layouts, aligns widgets to the right. For right-to-left layouts, aligns
+	// widgets to the left.
+	Widget_END Widget_HorizontalAlignment = 3
+)
+
+// Enum value maps for Widget_HorizontalAlignment.
+var (
+	Widget_HorizontalAlignment_name = map[int32]string{
+		0: "HORIZONTAL_ALIGNMENT_UNSPECIFIED",
+		1: "START",
+		2: "CENTER",
+		3: "END",
+	}
+	Widget_HorizontalAlignment_value = map[string]int32{
+		"HORIZONTAL_ALIGNMENT_UNSPECIFIED": 0,
+		"START":                            1,
+		"CENTER":                           2,
+		"END":                              3,
+	}
+)
+
+func (x Widget_HorizontalAlignment) Enum() *Widget_HorizontalAlignment {
+	p := new(Widget_HorizontalAlignment)
+	*p = x
+	return p
+}
+
+func (x Widget_HorizontalAlignment) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (Widget_HorizontalAlignment) Descriptor() protoreflect.EnumDescriptor {
+	return file_google_apps_card_v1_card_proto_enumTypes[3].Descriptor()
+}
+
+func (Widget_HorizontalAlignment) Type() protoreflect.EnumType {
+	return &file_google_apps_card_v1_card_proto_enumTypes[3]
+}
+
+func (x Widget_HorizontalAlignment) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use Widget_HorizontalAlignment.Descriptor instead.
+func (Widget_HorizontalAlignment) EnumDescriptor() ([]byte, []int) {
+	return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{1, 1}
+}
+
+// How the switch appears in the user interface.
+//
+// [Google Workspace Add-ons
+// and Chat apps](https://developers.google.com/workspace/extend):
+type DecoratedText_SwitchControl_ControlType int32
+
+const (
+	// A toggle-style switch.
+	DecoratedText_SwitchControl_SWITCH DecoratedText_SwitchControl_ControlType = 0
+	// Deprecated in favor of `CHECK_BOX`.
+	DecoratedText_SwitchControl_CHECKBOX DecoratedText_SwitchControl_ControlType = 1
+	// A checkbox.
+	DecoratedText_SwitchControl_CHECK_BOX DecoratedText_SwitchControl_ControlType = 2
+)
+
+// Enum value maps for DecoratedText_SwitchControl_ControlType.
+var (
+	DecoratedText_SwitchControl_ControlType_name = map[int32]string{
+		0: "SWITCH",
+		1: "CHECKBOX",
+		2: "CHECK_BOX",
+	}
+	DecoratedText_SwitchControl_ControlType_value = map[string]int32{
+		"SWITCH":    0,
+		"CHECKBOX":  1,
+		"CHECK_BOX": 2,
+	}
+)
+
+func (x DecoratedText_SwitchControl_ControlType) Enum() *DecoratedText_SwitchControl_ControlType {
+	p := new(DecoratedText_SwitchControl_ControlType)
+	*p = x
+	return p
+}
+
+func (x DecoratedText_SwitchControl_ControlType) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (DecoratedText_SwitchControl_ControlType) Descriptor() protoreflect.EnumDescriptor {
+	return file_google_apps_card_v1_card_proto_enumTypes[4].Descriptor()
+}
+
+func (DecoratedText_SwitchControl_ControlType) Type() protoreflect.EnumType {
+	return &file_google_apps_card_v1_card_proto_enumTypes[4]
+}
+
+func (x DecoratedText_SwitchControl_ControlType) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use DecoratedText_SwitchControl_ControlType.Descriptor instead.
+func (DecoratedText_SwitchControl_ControlType) EnumDescriptor() ([]byte, []int) {
+	return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{5, 0, 0}
+}
+
+// How a text input field appears in the user interface. For example,
+// whether it's a single line input field, or a multi-line input. If
+// `initialSuggestions` is specified, `type` is always `SINGLE_LINE`,
+// even if it's set to `MULTIPLE_LINE`.
+//
+// [Google Workspace Add-ons and Chat
+// apps](https://developers.google.com/workspace/extend):
+type TextInput_Type int32
+
+const (
+	// The text input field has a fixed height of one line.
+	TextInput_SINGLE_LINE TextInput_Type = 0
+	// The text input field has a fixed height of multiple lines.
+	TextInput_MULTIPLE_LINE TextInput_Type = 1
+)
+
+// Enum value maps for TextInput_Type.
+var (
+	TextInput_Type_name = map[int32]string{
+		0: "SINGLE_LINE",
+		1: "MULTIPLE_LINE",
+	}
+	TextInput_Type_value = map[string]int32{
+		"SINGLE_LINE":   0,
+		"MULTIPLE_LINE": 1,
+	}
+)
+
+func (x TextInput_Type) Enum() *TextInput_Type {
+	p := new(TextInput_Type)
+	*p = x
+	return p
+}
+
+func (x TextInput_Type) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (TextInput_Type) Descriptor() protoreflect.EnumDescriptor {
+	return file_google_apps_card_v1_card_proto_enumTypes[5].Descriptor()
+}
+
+func (TextInput_Type) Type() protoreflect.EnumType {
+	return &file_google_apps_card_v1_card_proto_enumTypes[5]
+}
+
+func (x TextInput_Type) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use TextInput_Type.Descriptor instead.
+func (TextInput_Type) EnumDescriptor() ([]byte, []int) {
+	return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{6, 0}
+}
+
+// The format for the items that users can select. Different options support
+// different types of interactions. For example, users can select multiple
+// checkboxes, but can only select one item from a dropdown menu.
+//
+// Each selection input supports one type of selection. Mixing checkboxes
+// and switches, for example, isn't supported.
+//
+// [Google Workspace Add-ons and Chat
+// apps](https://developers.google.com/workspace/extend):
+type SelectionInput_SelectionType int32
+
+const (
+	// A set of checkboxes. Users can select one or more checkboxes.
+	SelectionInput_CHECK_BOX SelectionInput_SelectionType = 0
+	// A set of radio buttons. Users can select one radio button.
+	SelectionInput_RADIO_BUTTON SelectionInput_SelectionType = 1
+	// A set of switches. Users can turn on one or more switches.
+	SelectionInput_SWITCH SelectionInput_SelectionType = 2
+	// A dropdown menu. Users can select one item from the menu.
+	SelectionInput_DROPDOWN SelectionInput_SelectionType = 3
+	// A multiselect menu for static or dynamic data. From the menu bar,
+	// users select one or more items. Users can also input values to populate
+	// dynamic data. For example, users can start typing the name of a Google
+	// Chat space and the widget autosuggests the space.
+	//
+	// To populate items for a multiselect menu, you can use one of the
+	// following types of data sources:
+	//
+	//   - Static data: Items are specified as `SelectionItem` objects in the
+	//     widget. Up to 100 items.
+	//   - Google Workspace data: Items are populated using data from Google
+	//     Workspace, such as Google Workspace users or Google Chat spaces.
+	//   - External data: Items are populated from an external data
+	//     source outside of Google Workspace.
+	//
+	// For examples of how to implement multiselect menus, see
+	// [Add a multiselect
+	// menu](https://developers.google.com/workspace/chat/design-interactive-card-dialog#multiselect-menu).
+	//
+	// [Google Workspace Add-ons and Chat
+	// apps](https://developers.google.com/workspace/extend):
+	// Multiselect for Google Workspace Add-ons are in
+	// Developer Preview.
+	SelectionInput_MULTI_SELECT SelectionInput_SelectionType = 4
+)
+
+// Enum value maps for SelectionInput_SelectionType.
+var (
+	SelectionInput_SelectionType_name = map[int32]string{
+		0: "CHECK_BOX",
+		1: "RADIO_BUTTON",
+		2: "SWITCH",
+		3: "DROPDOWN",
+		4: "MULTI_SELECT",
+	}
+	SelectionInput_SelectionType_value = map[string]int32{
+		"CHECK_BOX":    0,
+		"RADIO_BUTTON": 1,
+		"SWITCH":       2,
+		"DROPDOWN":     3,
+		"MULTI_SELECT": 4,
+	}
+)
+
+func (x SelectionInput_SelectionType) Enum() *SelectionInput_SelectionType {
+	p := new(SelectionInput_SelectionType)
+	*p = x
+	return p
+}
+
+func (x SelectionInput_SelectionType) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (SelectionInput_SelectionType) Descriptor() protoreflect.EnumDescriptor {
+	return file_google_apps_card_v1_card_proto_enumTypes[6].Descriptor()
+}
+
+func (SelectionInput_SelectionType) Type() protoreflect.EnumType {
+	return &file_google_apps_card_v1_card_proto_enumTypes[6]
+}
+
+func (x SelectionInput_SelectionType) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use SelectionInput_SelectionType.Descriptor instead.
+func (SelectionInput_SelectionType) EnumDescriptor() ([]byte, []int) {
+	return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{9, 0}
+}
+
+// A data source shared by all [Google Workspace
+// applications]
+// (https://developers.google.com/workspace/chat/api/reference/rest/v1/HostApp).
+//
+// [Google Chat apps](https://developers.google.com/workspace/chat):
+type SelectionInput_PlatformDataSource_CommonDataSource int32
+
+const (
+	// Default value. Don't use.
+	SelectionInput_PlatformDataSource_UNKNOWN SelectionInput_PlatformDataSource_CommonDataSource = 0
+	// Google Workspace users. The user can only view and select users from
+	// their Google Workspace organization.
+	SelectionInput_PlatformDataSource_USER SelectionInput_PlatformDataSource_CommonDataSource = 1
+)
+
+// Enum value maps for SelectionInput_PlatformDataSource_CommonDataSource.
+var (
+	SelectionInput_PlatformDataSource_CommonDataSource_name = map[int32]string{
+		0: "UNKNOWN",
+		1: "USER",
+	}
+	SelectionInput_PlatformDataSource_CommonDataSource_value = map[string]int32{
+		"UNKNOWN": 0,
+		"USER":    1,
+	}
+)
+
+func (x SelectionInput_PlatformDataSource_CommonDataSource) Enum() *SelectionInput_PlatformDataSource_CommonDataSource {
+	p := new(SelectionInput_PlatformDataSource_CommonDataSource)
+	*p = x
+	return p
+}
+
+func (x SelectionInput_PlatformDataSource_CommonDataSource) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (SelectionInput_PlatformDataSource_CommonDataSource) Descriptor() protoreflect.EnumDescriptor {
+	return file_google_apps_card_v1_card_proto_enumTypes[7].Descriptor()
+}
+
+func (SelectionInput_PlatformDataSource_CommonDataSource) Type() protoreflect.EnumType {
+	return &file_google_apps_card_v1_card_proto_enumTypes[7]
+}
+
+func (x SelectionInput_PlatformDataSource_CommonDataSource) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use SelectionInput_PlatformDataSource_CommonDataSource.Descriptor instead.
+func (SelectionInput_PlatformDataSource_CommonDataSource) EnumDescriptor() ([]byte, []int) {
+	return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{9, 1, 0}
+}
+
+// The format for the date and time in the `DateTimePicker` widget.
+// Determines whether users can input a date, a time, or both a date and time.
+//
+// [Google Workspace Add-ons and Chat
+// apps](https://developers.google.com/workspace/extend):
+type DateTimePicker_DateTimePickerType int32
+
+const (
+	// Users input a date and time.
+	DateTimePicker_DATE_AND_TIME DateTimePicker_DateTimePickerType = 0
+	// Users input a date.
+	DateTimePicker_DATE_ONLY DateTimePicker_DateTimePickerType = 1
+	// Users input a time.
+	DateTimePicker_TIME_ONLY DateTimePicker_DateTimePickerType = 2
+)
+
+// Enum value maps for DateTimePicker_DateTimePickerType.
+var (
+	DateTimePicker_DateTimePickerType_name = map[int32]string{
+		0: "DATE_AND_TIME",
+		1: "DATE_ONLY",
+		2: "TIME_ONLY",
+	}
+	DateTimePicker_DateTimePickerType_value = map[string]int32{
+		"DATE_AND_TIME": 0,
+		"DATE_ONLY":     1,
+		"TIME_ONLY":     2,
+	}
+)
+
+func (x DateTimePicker_DateTimePickerType) Enum() *DateTimePicker_DateTimePickerType {
+	p := new(DateTimePicker_DateTimePickerType)
+	*p = x
+	return p
+}
+
+func (x DateTimePicker_DateTimePickerType) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (DateTimePicker_DateTimePickerType) Descriptor() protoreflect.EnumDescriptor {
+	return file_google_apps_card_v1_card_proto_enumTypes[8].Descriptor()
+}
+
+func (DateTimePicker_DateTimePickerType) Type() protoreflect.EnumType {
+	return &file_google_apps_card_v1_card_proto_enumTypes[8]
+}
+
+func (x DateTimePicker_DateTimePickerType) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use DateTimePicker_DateTimePickerType.Descriptor instead.
+func (DateTimePicker_DateTimePickerType) EnumDescriptor() ([]byte, []int) {
+	return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{10, 0}
+}
+
+// Represents the crop style applied to an image.
+//
+// [Google Workspace Add-ons
+// and Chat apps](https://developers.google.com/workspace/extend):
+type ImageCropStyle_ImageCropType int32
+
+const (
+	// Don't use. Unspecified.
+	ImageCropStyle_IMAGE_CROP_TYPE_UNSPECIFIED ImageCropStyle_ImageCropType = 0
+	// Default value. Applies a square crop.
+	ImageCropStyle_SQUARE ImageCropStyle_ImageCropType = 1
+	// Applies a circular crop.
+	ImageCropStyle_CIRCLE ImageCropStyle_ImageCropType = 2
+	// Applies a rectangular crop with a custom aspect ratio. Set the custom
+	// aspect ratio with `aspectRatio`.
+	ImageCropStyle_RECTANGLE_CUSTOM ImageCropStyle_ImageCropType = 3
+	// Applies a rectangular crop with a 4:3 aspect ratio.
+	ImageCropStyle_RECTANGLE_4_3 ImageCropStyle_ImageCropType = 4
+)
+
+// Enum value maps for ImageCropStyle_ImageCropType.
+var (
+	ImageCropStyle_ImageCropType_name = map[int32]string{
+		0: "IMAGE_CROP_TYPE_UNSPECIFIED",
+		1: "SQUARE",
+		2: "CIRCLE",
+		3: "RECTANGLE_CUSTOM",
+		4: "RECTANGLE_4_3",
+	}
+	ImageCropStyle_ImageCropType_value = map[string]int32{
+		"IMAGE_CROP_TYPE_UNSPECIFIED": 0,
+		"SQUARE":                      1,
+		"CIRCLE":                      2,
+		"RECTANGLE_CUSTOM":            3,
+		"RECTANGLE_4_3":               4,
+	}
+)
+
+func (x ImageCropStyle_ImageCropType) Enum() *ImageCropStyle_ImageCropType {
+	p := new(ImageCropStyle_ImageCropType)
+	*p = x
+	return p
+}
+
+func (x ImageCropStyle_ImageCropType) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (ImageCropStyle_ImageCropType) Descriptor() protoreflect.EnumDescriptor {
+	return file_google_apps_card_v1_card_proto_enumTypes[9].Descriptor()
+}
+
+func (ImageCropStyle_ImageCropType) Type() protoreflect.EnumType {
+	return &file_google_apps_card_v1_card_proto_enumTypes[9]
+}
+
+func (x ImageCropStyle_ImageCropType) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use ImageCropStyle_ImageCropType.Descriptor instead.
+func (ImageCropStyle_ImageCropType) EnumDescriptor() ([]byte, []int) {
+	return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{14, 0}
+}
+
+// Represents the border types applied to widgets.
+//
+// [Google Workspace Add-ons
+// and Chat apps](https://developers.google.com/workspace/extend):
+type BorderStyle_BorderType int32
+
+const (
+	// Don't use. Unspecified.
+	BorderStyle_BORDER_TYPE_UNSPECIFIED BorderStyle_BorderType = 0
+	// Default value. No border.
+	BorderStyle_NO_BORDER BorderStyle_BorderType = 1
+	// Outline.
+	BorderStyle_STROKE BorderStyle_BorderType = 2
+)
+
+// Enum value maps for BorderStyle_BorderType.
+var (
+	BorderStyle_BorderType_name = map[int32]string{
+		0: "BORDER_TYPE_UNSPECIFIED",
+		1: "NO_BORDER",
+		2: "STROKE",
+	}
+	BorderStyle_BorderType_value = map[string]int32{
+		"BORDER_TYPE_UNSPECIFIED": 0,
+		"NO_BORDER":               1,
+		"STROKE":                  2,
+	}
+)
+
+func (x BorderStyle_BorderType) Enum() *BorderStyle_BorderType {
+	p := new(BorderStyle_BorderType)
+	*p = x
+	return p
+}
+
+func (x BorderStyle_BorderType) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (BorderStyle_BorderType) Descriptor() protoreflect.EnumDescriptor {
+	return file_google_apps_card_v1_card_proto_enumTypes[10].Descriptor()
+}
+
+func (BorderStyle_BorderType) Type() protoreflect.EnumType {
+	return &file_google_apps_card_v1_card_proto_enumTypes[10]
+}
+
+func (x BorderStyle_BorderType) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use BorderStyle_BorderType.Descriptor instead.
+func (BorderStyle_BorderType) EnumDescriptor() ([]byte, []int) {
+	return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{15, 0}
+}
+
+// Represents the various layout options available for a grid item.
+//
+// [Google Workspace Add-ons and Chat
+// apps](https://developers.google.com/workspace/extend):
+type Grid_GridItem_GridItemLayout int32
+
+const (
+	// Don't use. Unspecified.
+	Grid_GridItem_GRID_ITEM_LAYOUT_UNSPECIFIED Grid_GridItem_GridItemLayout = 0
+	// The title and subtitle are shown below the grid item's image.
+	Grid_GridItem_TEXT_BELOW Grid_GridItem_GridItemLayout = 1
+	// The title and subtitle are shown above the grid item's image.
+	Grid_GridItem_TEXT_ABOVE Grid_GridItem_GridItemLayout = 2
+)
+
+// Enum value maps for Grid_GridItem_GridItemLayout.
+var (
+	Grid_GridItem_GridItemLayout_name = map[int32]string{
+		0: "GRID_ITEM_LAYOUT_UNSPECIFIED",
+		1: "TEXT_BELOW",
+		2: "TEXT_ABOVE",
+	}
+	Grid_GridItem_GridItemLayout_value = map[string]int32{
+		"GRID_ITEM_LAYOUT_UNSPECIFIED": 0,
+		"TEXT_BELOW":                   1,
+		"TEXT_ABOVE":                   2,
+	}
+)
+
+func (x Grid_GridItem_GridItemLayout) Enum() *Grid_GridItem_GridItemLayout {
+	p := new(Grid_GridItem_GridItemLayout)
+	*p = x
+	return p
+}
+
+func (x Grid_GridItem_GridItemLayout) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (Grid_GridItem_GridItemLayout) Descriptor() protoreflect.EnumDescriptor {
+	return file_google_apps_card_v1_card_proto_enumTypes[11].Descriptor()
+}
+
+func (Grid_GridItem_GridItemLayout) Type() protoreflect.EnumType {
+	return &file_google_apps_card_v1_card_proto_enumTypes[11]
+}
+
+func (x Grid_GridItem_GridItemLayout) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use Grid_GridItem_GridItemLayout.Descriptor instead.
+func (Grid_GridItem_GridItemLayout) EnumDescriptor() ([]byte, []int) {
+	return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{17, 0, 0}
+}
+
+// Specifies how a column fills the width of the card. The width of each
+// column depends on both the `HorizontalSizeStyle` and the width of the
+// widgets within the column.
+//
+// [Google Workspace Add-ons and Chat
+// apps](https://developers.google.com/workspace/extend):
+// Columns for Google Workspace Add-ons are in
+// Developer Preview.
+type Columns_Column_HorizontalSizeStyle int32
+
+const (
+	// Don't use. Unspecified.
+	Columns_Column_HORIZONTAL_SIZE_STYLE_UNSPECIFIED Columns_Column_HorizontalSizeStyle = 0
+	// Default value. Column fills the available space, up to 70% of the
+	// card's width. If both columns are set to `FILL_AVAILABLE_SPACE`, each
+	// column fills 50% of the space.
+	Columns_Column_FILL_AVAILABLE_SPACE Columns_Column_HorizontalSizeStyle = 1
+	// Column fills the least amount of space possible and no more than 30% of
+	// the card's width.
+	Columns_Column_FILL_MINIMUM_SPACE Columns_Column_HorizontalSizeStyle = 2
+)
+
+// Enum value maps for Columns_Column_HorizontalSizeStyle.
+var (
+	Columns_Column_HorizontalSizeStyle_name = map[int32]string{
+		0: "HORIZONTAL_SIZE_STYLE_UNSPECIFIED",
+		1: "FILL_AVAILABLE_SPACE",
+		2: "FILL_MINIMUM_SPACE",
+	}
+	Columns_Column_HorizontalSizeStyle_value = map[string]int32{
+		"HORIZONTAL_SIZE_STYLE_UNSPECIFIED": 0,
+		"FILL_AVAILABLE_SPACE":              1,
+		"FILL_MINIMUM_SPACE":                2,
+	}
+)
+
+func (x Columns_Column_HorizontalSizeStyle) Enum() *Columns_Column_HorizontalSizeStyle {
+	p := new(Columns_Column_HorizontalSizeStyle)
+	*p = x
+	return p
+}
+
+func (x Columns_Column_HorizontalSizeStyle) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (Columns_Column_HorizontalSizeStyle) Descriptor() protoreflect.EnumDescriptor {
+	return file_google_apps_card_v1_card_proto_enumTypes[12].Descriptor()
+}
+
+func (Columns_Column_HorizontalSizeStyle) Type() protoreflect.EnumType {
+	return &file_google_apps_card_v1_card_proto_enumTypes[12]
+}
+
+func (x Columns_Column_HorizontalSizeStyle) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use Columns_Column_HorizontalSizeStyle.Descriptor instead.
+func (Columns_Column_HorizontalSizeStyle) EnumDescriptor() ([]byte, []int) {
+	return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{18, 0, 0}
+}
+
+// Specifies whether widgets align to the top, bottom, or center of a
+// column.
+//
+// [Google Workspace Add-ons and Chat
+// apps](https://developers.google.com/workspace/extend):
+// Columns for Google Workspace Add-ons are in
+// Developer Preview.
+type Columns_Column_VerticalAlignment int32
+
+const (
+	// Don't use. Unspecified.
+	Columns_Column_VERTICAL_ALIGNMENT_UNSPECIFIED Columns_Column_VerticalAlignment = 0
+	// Default value. Aligns widgets to the center of a column.
+	Columns_Column_CENTER Columns_Column_VerticalAlignment = 1
+	// Aligns widgets to the top of a column.
+	Columns_Column_TOP Columns_Column_VerticalAlignment = 2
+	// Aligns widgets to the bottom of a column.
+	Columns_Column_BOTTOM Columns_Column_VerticalAlignment = 3
+)
+
+// Enum value maps for Columns_Column_VerticalAlignment.
+var (
+	Columns_Column_VerticalAlignment_name = map[int32]string{
+		0: "VERTICAL_ALIGNMENT_UNSPECIFIED",
+		1: "CENTER",
+		2: "TOP",
+		3: "BOTTOM",
+	}
+	Columns_Column_VerticalAlignment_value = map[string]int32{
+		"VERTICAL_ALIGNMENT_UNSPECIFIED": 0,
+		"CENTER":                         1,
+		"TOP":                            2,
+		"BOTTOM":                         3,
+	}
+)
+
+func (x Columns_Column_VerticalAlignment) Enum() *Columns_Column_VerticalAlignment {
+	p := new(Columns_Column_VerticalAlignment)
+	*p = x
+	return p
+}
+
+func (x Columns_Column_VerticalAlignment) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (Columns_Column_VerticalAlignment) Descriptor() protoreflect.EnumDescriptor {
+	return file_google_apps_card_v1_card_proto_enumTypes[13].Descriptor()
+}
+
+func (Columns_Column_VerticalAlignment) Type() protoreflect.EnumType {
+	return &file_google_apps_card_v1_card_proto_enumTypes[13]
+}
+
+func (x Columns_Column_VerticalAlignment) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use Columns_Column_VerticalAlignment.Descriptor instead.
+func (Columns_Column_VerticalAlignment) EnumDescriptor() ([]byte, []int) {
+	return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{18, 0, 1}
+}
+
+// When an `OnClick` action opens a link, then the client can either open it
+// as a full-size window (if that's the frame used by the client), or an
+// overlay (such as a pop-up). The implementation depends on the client
+// platform capabilities, and the value selected might be ignored if the
+// client doesn't support it. `FULL_SIZE` is supported by all clients.
+//
+// [Google Workspace
+// Add-ons](https://developers.google.com/workspace/add-ons):
+type OpenLink_OpenAs int32
+
+const (
+	// The link opens as a full-size window (if that's the frame used by the
+	// client).
+	OpenLink_FULL_SIZE OpenLink_OpenAs = 0
+	// The link opens as an overlay, such as a pop-up.
+	OpenLink_OVERLAY OpenLink_OpenAs = 1
+)
+
+// Enum value maps for OpenLink_OpenAs.
+var (
+	OpenLink_OpenAs_name = map[int32]string{
+		0: "FULL_SIZE",
+		1: "OVERLAY",
+	}
+	OpenLink_OpenAs_value = map[string]int32{
+		"FULL_SIZE": 0,
+		"OVERLAY":   1,
+	}
+)
+
+func (x OpenLink_OpenAs) Enum() *OpenLink_OpenAs {
+	p := new(OpenLink_OpenAs)
+	*p = x
+	return p
+}
+
+func (x OpenLink_OpenAs) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (OpenLink_OpenAs) Descriptor() protoreflect.EnumDescriptor {
+	return file_google_apps_card_v1_card_proto_enumTypes[14].Descriptor()
+}
+
+func (OpenLink_OpenAs) Type() protoreflect.EnumType {
+	return &file_google_apps_card_v1_card_proto_enumTypes[14]
+}
+
+func (x OpenLink_OpenAs) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use OpenLink_OpenAs.Descriptor instead.
+func (OpenLink_OpenAs) EnumDescriptor() ([]byte, []int) {
+	return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{20, 0}
+}
+
+// What the client does when a link opened by an `OnClick` action is closed.
+//
+// Implementation depends on client platform capabilities. For example, a web
+// browser might open a link in a pop-up window with an `OnClose` handler.
+//
+// If both `OnOpen` and `OnClose` handlers are set, and the client platform
+// can't support both values, `OnClose` takes precedence.
+//
+// [Google Workspace
+// Add-ons](https://developers.google.com/workspace/add-ons):
+type OpenLink_OnClose int32
+
+const (
+	// Default value. The card doesn't reload; nothing happens.
+	OpenLink_NOTHING OpenLink_OnClose = 0
+	// Reloads the card after the child window closes.
+	//
+	// If used in conjunction with
+	// [`OpenAs.OVERLAY`](https://developers.google.com/workspace/add-ons/reference/rpc/google.apps.card.v1#openas),
+	// the child window acts as a modal dialog and the parent card is blocked
+	// until the child window closes.
+	OpenLink_RELOAD OpenLink_OnClose = 1
+)
+
+// Enum value maps for OpenLink_OnClose.
+var (
+	OpenLink_OnClose_name = map[int32]string{
+		0: "NOTHING",
+		1: "RELOAD",
+	}
+	OpenLink_OnClose_value = map[string]int32{
+		"NOTHING": 0,
+		"RELOAD":  1,
+	}
+)
+
+func (x OpenLink_OnClose) Enum() *OpenLink_OnClose {
+	p := new(OpenLink_OnClose)
+	*p = x
+	return p
+}
+
+func (x OpenLink_OnClose) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (OpenLink_OnClose) Descriptor() protoreflect.EnumDescriptor {
+	return file_google_apps_card_v1_card_proto_enumTypes[15].Descriptor()
+}
+
+func (OpenLink_OnClose) Type() protoreflect.EnumType {
+	return &file_google_apps_card_v1_card_proto_enumTypes[15]
+}
+
+func (x OpenLink_OnClose) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use OpenLink_OnClose.Descriptor instead.
+func (OpenLink_OnClose) EnumDescriptor() ([]byte, []int) {
+	return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{20, 1}
+}
+
+// Specifies the loading indicator that the action displays while
+// making the call to the action.
+//
+// [Google Workspace Add-ons and Chat
+// apps](https://developers.google.com/workspace/extend):
+type Action_LoadIndicator int32
+
+const (
+	// Displays a spinner to indicate that content is loading.
+	Action_SPINNER Action_LoadIndicator = 0
+	// Nothing is displayed.
+	Action_NONE Action_LoadIndicator = 1
+)
+
+// Enum value maps for Action_LoadIndicator.
+var (
+	Action_LoadIndicator_name = map[int32]string{
+		0: "SPINNER",
+		1: "NONE",
+	}
+	Action_LoadIndicator_value = map[string]int32{
+		"SPINNER": 0,
+		"NONE":    1,
+	}
+)
+
+func (x Action_LoadIndicator) Enum() *Action_LoadIndicator {
+	p := new(Action_LoadIndicator)
+	*p = x
+	return p
+}
+
+func (x Action_LoadIndicator) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (Action_LoadIndicator) Descriptor() protoreflect.EnumDescriptor {
+	return file_google_apps_card_v1_card_proto_enumTypes[16].Descriptor()
+}
+
+func (Action_LoadIndicator) Type() protoreflect.EnumType {
+	return &file_google_apps_card_v1_card_proto_enumTypes[16]
+}
+
+func (x Action_LoadIndicator) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use Action_LoadIndicator.Descriptor instead.
+func (Action_LoadIndicator) EnumDescriptor() ([]byte, []int) {
+	return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{21, 0}
+}
+
+// Optional. Required when opening a
+// [dialog](https://developers.google.com/workspace/chat/dialogs).
+//
+// What to do in response to an interaction with a user, such as a user
+// clicking a button in a card message.
+//
+// If unspecified, the app responds by executing an `action`—like opening a
+// link or running a function—as normal.
+//
+// By specifying an `interaction`, the app can respond in special interactive
+// ways. For example, by setting `interaction` to `OPEN_DIALOG`, the app can
+// open a [dialog](https://developers.google.com/workspace/chat/dialogs).
+//
+// When specified, a loading indicator isn't shown. If specified for
+// an add-on, the entire card is stripped and nothing is shown in the client.
+//
+// [Google Chat apps](https://developers.google.com/workspace/chat):
+type Action_Interaction int32
+
+const (
+	// Default value. The `action` executes as normal.
+	Action_INTERACTION_UNSPECIFIED Action_Interaction = 0
+	// Opens a [dialog](https://developers.google.com/workspace/chat/dialogs), a
+	// windowed, card-based interface that Chat apps use to interact with users.
+	//
+	// Only supported by Chat apps in response to button-clicks on card
+	// messages. If specified for
+	// an add-on, the entire card is stripped and nothing is shown in the
+	// client.
+	//
+	// [Google Chat apps](https://developers.google.com/workspace/chat):
+	Action_OPEN_DIALOG Action_Interaction = 1
+)
+
+// Enum value maps for Action_Interaction.
+var (
+	Action_Interaction_name = map[int32]string{
+		0: "INTERACTION_UNSPECIFIED",
+		1: "OPEN_DIALOG",
+	}
+	Action_Interaction_value = map[string]int32{
+		"INTERACTION_UNSPECIFIED": 0,
+		"OPEN_DIALOG":             1,
+	}
+)
+
+func (x Action_Interaction) Enum() *Action_Interaction {
+	p := new(Action_Interaction)
+	*p = x
+	return p
+}
+
+func (x Action_Interaction) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (Action_Interaction) Descriptor() protoreflect.EnumDescriptor {
+	return file_google_apps_card_v1_card_proto_enumTypes[17].Descriptor()
+}
+
+func (Action_Interaction) Type() protoreflect.EnumType {
+	return &file_google_apps_card_v1_card_proto_enumTypes[17]
+}
+
+func (x Action_Interaction) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use Action_Interaction.Descriptor instead.
+func (Action_Interaction) EnumDescriptor() ([]byte, []int) {
+	return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{21, 1}
+}
+
+// A card interface displayed in a Google Chat message or Google Workspace
+// Add-on.
+//
+// Cards support a defined layout, interactive UI elements like buttons, and
+// rich media like images. Use cards to present detailed information,
+// gather information from users, and guide users to take a next step.
+//
+// [Card builder](https://addons.gsuite.google.com/uikit/builder)
+//
+// To learn how
+// to build cards, see the following documentation:
+//
+//   - For Google Chat apps, see [Design the components of a card or
+//     dialog](https://developers.google.com/workspace/chat/design-components-card-dialog).
+//   - For Google Workspace Add-ons, see [Card-based
+//
+// interfaces](https://developers.google.com/apps-script/add-ons/concepts/cards).
+//
+// **Example: Card message for a Google Chat app**
+//
+// ![Example contact
+// card](https://developers.google.com/workspace/chat/images/card_api_reference.png)
+//
+// To create the sample card message in Google Chat, use the following JSON:
+//
+// ```
+//
+//	{
+//	  "cardsV2": [
+//	    {
+//	      "cardId": "unique-card-id",
+//	      "card": {
+//	        "header": {
+//	           "title": "Sasha",
+//	           "subtitle": "Software Engineer",
+//	           "imageUrl":
+//	           "https://developers.google.com/workspace/chat/images/quickstart-app-avatar.png",
+//	           "imageType": "CIRCLE",
+//	           "imageAltText": "Avatar for Sasha"
+//	         },
+//	         "sections": [
+//	           {
+//	             "header": "Contact Info",
+//	             "collapsible": true,
+//	             "uncollapsibleWidgetsCount": 1,
+//	             "widgets": [
+//	               {
+//	                 "decoratedText": {
+//	                   "startIcon": {
+//	                     "knownIcon": "EMAIL"
+//	                   },
+//	                   "text": "sasha@example.com"
+//	                 }
+//	               },
+//	               {
+//	                 "decoratedText": {
+//	                   "startIcon": {
+//	                     "knownIcon": "PERSON"
+//	                   },
+//	                   "text": "<font color=\"#80e27e\">Online</font>"
+//	                 }
+//	               },
+//	               {
+//	                 "decoratedText": {
+//	                   "startIcon": {
+//	                     "knownIcon": "PHONE"
+//	                   },
+//	                   "text": "+1 (555) 555-1234"
+//	                 }
+//	               },
+//	               {
+//	                 "buttonList": {
+//	                   "buttons": [
+//	                     {
+//	                       "text": "Share",
+//	                       "onClick": {
+//	                        "openLink": {
+//	                           "url": "https://example.com/share"
+//	                         }
+//	                       }
+//	                     },
+//	                     {
+//	                       "text": "Edit",
+//	                       "onClick": {
+//	                         "action": {
+//	                           "function": "goToView",
+//	                           "parameters": [
+//	                             {
+//	                               "key": "viewType",
+//	                               "value": "EDIT"
+//	                             }
+//	                           ]
+//	                         }
+//	                       }
+//	                     }
+//	                   ]
+//	                 }
+//	               }
+//	             ]
+//	           }
+//	         ]
+//	       }
+//	    }
+//	  ]
+//	}
+//
+// ```
+type Card struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// The header of the card. A header usually contains a leading image and a
+	// title. Headers always appear at the top of a card.
+	Header *Card_CardHeader `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"`
+	// Contains a collection of widgets. Each section has its own, optional
+	// header. Sections are visually separated by a line divider. For an example
+	// in Google Chat apps, see [Define a section of a
+	// card](https://developers.google.com/workspace/chat/design-components-card-dialog#define_a_section_of_a_card).
+	Sections []*Card_Section `protobuf:"bytes,2,rep,name=sections,proto3" json:"sections,omitempty"`
+	// The divider style between sections.
+	SectionDividerStyle Card_DividerStyle `protobuf:"varint,9,opt,name=section_divider_style,json=sectionDividerStyle,proto3,enum=google.apps.card.v1.Card_DividerStyle" json:"section_divider_style,omitempty"`
+	// The card's actions. Actions are added to the card's toolbar menu.
+	//
+	// [Google Workspace
+	// Add-ons](https://developers.google.com/workspace/add-ons):
+	//
+	// For example, the following JSON constructs a card action menu with
+	// `Settings` and `Send Feedback` options:
+	//
+	// ```
+	// "card_actions": [
+	//
+	//	{
+	//	  "actionLabel": "Settings",
+	//	  "onClick": {
+	//	    "action": {
+	//	      "functionName": "goToView",
+	//	      "parameters": [
+	//	        {
+	//	          "key": "viewType",
+	//	          "value": "SETTING"
+	//	       }
+	//	      ],
+	//	      "loadIndicator": "LoadIndicator.SPINNER"
+	//	    }
+	//	  }
+	//	},
+	//	{
+	//	  "actionLabel": "Send Feedback",
+	//	  "onClick": {
+	//	    "openLink": {
+	//	      "url": "https://example.com/feedback"
+	//	    }
+	//	  }
+	//	}
+	//
+	// ]
+	// ```
+	CardActions []*Card_CardAction `protobuf:"bytes,3,rep,name=card_actions,json=cardActions,proto3" json:"card_actions,omitempty"`
+	// Name of the card. Used as a card identifier in card navigation.
+	//
+	// [Google Workspace
+	// Add-ons](https://developers.google.com/workspace/add-ons):
+	Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"`
+	// The fixed footer shown at the bottom of this card.
+	//
+	// Setting `fixedFooter` without specifying a `primaryButton` or a
+	// `secondaryButton` causes an error. For Chat apps, you can use fixed footers
+	// in
+	// [dialogs](https://developers.google.com/workspace/chat/dialogs), but not
+	// [card
+	// messages](https://developers.google.com/workspace/chat/create-messages#create).
+	//
+	// [Google Workspace Add-ons and Chat
+	// apps](https://developers.google.com/workspace/extend):
+	FixedFooter *Card_CardFixedFooter `protobuf:"bytes,5,opt,name=fixed_footer,json=fixedFooter,proto3" json:"fixed_footer,omitempty"`
+	// In Google Workspace Add-ons, sets the display properties of the
+	// `peekCardHeader`.
+	//
+	// [Google Workspace
+	// Add-ons](https://developers.google.com/workspace/add-ons):
+	DisplayStyle Card_DisplayStyle `protobuf:"varint,6,opt,name=display_style,json=displayStyle,proto3,enum=google.apps.card.v1.Card_DisplayStyle" json:"display_style,omitempty"`
+	// When displaying contextual content, the peek card header acts as a
+	// placeholder so that the user can navigate forward between the homepage
+	// cards and the contextual cards.
+	//
+	// [Google Workspace
+	// Add-ons](https://developers.google.com/workspace/add-ons):
+	PeekCardHeader *Card_CardHeader `protobuf:"bytes,7,opt,name=peek_card_header,json=peekCardHeader,proto3" json:"peek_card_header,omitempty"`
+}
+
+func (x *Card) Reset() {
+	*x = Card{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_apps_card_v1_card_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *Card) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Card) ProtoMessage() {}
+
+func (x *Card) ProtoReflect() protoreflect.Message {
+	mi := &file_google_apps_card_v1_card_proto_msgTypes[0]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use Card.ProtoReflect.Descriptor instead.
+func (*Card) Descriptor() ([]byte, []int) {
+	return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *Card) GetHeader() *Card_CardHeader {
+	if x != nil {
+		return x.Header
+	}
+	return nil
+}
+
+func (x *Card) GetSections() []*Card_Section {
+	if x != nil {
+		return x.Sections
+	}
+	return nil
+}
+
+func (x *Card) GetSectionDividerStyle() Card_DividerStyle {
+	if x != nil {
+		return x.SectionDividerStyle
+	}
+	return Card_DIVIDER_STYLE_UNSPECIFIED
+}
+
+func (x *Card) GetCardActions() []*Card_CardAction {
+	if x != nil {
+		return x.CardActions
+	}
+	return nil
+}
+
+func (x *Card) GetName() string {
+	if x != nil {
+		return x.Name
+	}
+	return ""
+}
+
+func (x *Card) GetFixedFooter() *Card_CardFixedFooter {
+	if x != nil {
+		return x.FixedFooter
+	}
+	return nil
+}
+
+func (x *Card) GetDisplayStyle() Card_DisplayStyle {
+	if x != nil {
+		return x.DisplayStyle
+	}
+	return Card_DISPLAY_STYLE_UNSPECIFIED
+}
+
+func (x *Card) GetPeekCardHeader() *Card_CardHeader {
+	if x != nil {
+		return x.PeekCardHeader
+	}
+	return nil
+}
+
+// Each card is made up of widgets.
+//
+// A widget is a composite object that can represent one of text, images,
+// buttons, and other object types.
+type Widget struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// A widget can only have one of the following items. You can use multiple
+	// widget fields to display more items.
+	//
+	// Types that are assignable to Data:
+	//
+	//	*Widget_TextParagraph
+	//	*Widget_Image
+	//	*Widget_DecoratedText
+	//	*Widget_ButtonList
+	//	*Widget_TextInput
+	//	*Widget_SelectionInput
+	//	*Widget_DateTimePicker
+	//	*Widget_Divider
+	//	*Widget_Grid
+	//	*Widget_Columns
+	Data isWidget_Data `protobuf_oneof:"data"`
+	// Specifies whether widgets align to the left, right, or center of a column.
+	HorizontalAlignment Widget_HorizontalAlignment `protobuf:"varint,8,opt,name=horizontal_alignment,json=horizontalAlignment,proto3,enum=google.apps.card.v1.Widget_HorizontalAlignment" json:"horizontal_alignment,omitempty"`
+}
+
+func (x *Widget) Reset() {
+	*x = Widget{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_apps_card_v1_card_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *Widget) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Widget) ProtoMessage() {}
+
+func (x *Widget) ProtoReflect() protoreflect.Message {
+	mi := &file_google_apps_card_v1_card_proto_msgTypes[1]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use Widget.ProtoReflect.Descriptor instead.
+func (*Widget) Descriptor() ([]byte, []int) {
+	return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{1}
+}
+
+func (m *Widget) GetData() isWidget_Data {
+	if m != nil {
+		return m.Data
+	}
+	return nil
+}
+
+func (x *Widget) GetTextParagraph() *TextParagraph {
+	if x, ok := x.GetData().(*Widget_TextParagraph); ok {
+		return x.TextParagraph
+	}
+	return nil
+}
+
+func (x *Widget) GetImage() *Image {
+	if x, ok := x.GetData().(*Widget_Image); ok {
+		return x.Image
+	}
+	return nil
+}
+
+func (x *Widget) GetDecoratedText() *DecoratedText {
+	if x, ok := x.GetData().(*Widget_DecoratedText); ok {
+		return x.DecoratedText
+	}
+	return nil
+}
+
+func (x *Widget) GetButtonList() *ButtonList {
+	if x, ok := x.GetData().(*Widget_ButtonList); ok {
+		return x.ButtonList
+	}
+	return nil
+}
+
+func (x *Widget) GetTextInput() *TextInput {
+	if x, ok := x.GetData().(*Widget_TextInput); ok {
+		return x.TextInput
+	}
+	return nil
+}
+
+func (x *Widget) GetSelectionInput() *SelectionInput {
+	if x, ok := x.GetData().(*Widget_SelectionInput); ok {
+		return x.SelectionInput
+	}
+	return nil
+}
+
+func (x *Widget) GetDateTimePicker() *DateTimePicker {
+	if x, ok := x.GetData().(*Widget_DateTimePicker); ok {
+		return x.DateTimePicker
+	}
+	return nil
+}
+
+func (x *Widget) GetDivider() *Divider {
+	if x, ok := x.GetData().(*Widget_Divider); ok {
+		return x.Divider
+	}
+	return nil
+}
+
+func (x *Widget) GetGrid() *Grid {
+	if x, ok := x.GetData().(*Widget_Grid); ok {
+		return x.Grid
+	}
+	return nil
+}
+
+func (x *Widget) GetColumns() *Columns {
+	if x, ok := x.GetData().(*Widget_Columns); ok {
+		return x.Columns
+	}
+	return nil
+}
+
+func (x *Widget) GetHorizontalAlignment() Widget_HorizontalAlignment {
+	if x != nil {
+		return x.HorizontalAlignment
+	}
+	return Widget_HORIZONTAL_ALIGNMENT_UNSPECIFIED
+}
+
+type isWidget_Data interface {
+	isWidget_Data()
+}
+
+type Widget_TextParagraph struct {
+	// Displays a text paragraph. Supports simple HTML formatted text. For more
+	// information about formatting text, see
+	// [Formatting text in Google Chat
+	// apps](https://developers.google.com/workspace/chat/format-messages#card-formatting)
+	// and
+	// [Formatting
+	// text in Google Workspace
+	// Add-ons](https://developers.google.com/apps-script/add-ons/concepts/widgets#text_formatting).
+	//
+	// For example, the following JSON creates a bolded text:
+	// ```
+	//
+	//	"textParagraph": {
+	//	  "text": "  <b>bold text</b>"
+	//	}
+	//
+	// ```
+	TextParagraph *TextParagraph `protobuf:"bytes,1,opt,name=text_paragraph,json=textParagraph,proto3,oneof"`
+}
+
+type Widget_Image struct {
+	// Displays an image.
+	//
+	// For example, the following JSON creates an image with alternative text:
+	// ```
+	//
+	//	"image": {
+	//	  "imageUrl":
+	//	  "https://developers.google.com/workspace/chat/images/quickstart-app-avatar.png",
+	//	  "altText": "Chat app avatar"
+	//	}
+	//
+	// ```
+	Image *Image `protobuf:"bytes,2,opt,name=image,proto3,oneof"`
+}
+
+type Widget_DecoratedText struct {
+	// Displays a decorated text item.
+	//
+	// For example, the following JSON creates a decorated text widget showing
+	// email address:
+	//
+	// ```
+	//
+	//	"decoratedText": {
+	//	  "icon": {
+	//	    "knownIcon": "EMAIL"
+	//	  },
+	//	  "topLabel": "Email Address",
+	//	  "text": "sasha@example.com",
+	//	  "bottomLabel": "This is a new Email address!",
+	//	  "switchControl": {
+	//	    "name": "has_send_welcome_email_to_sasha",
+	//	    "selected": false,
+	//	    "controlType": "CHECKBOX"
+	//	  }
+	//	}
+	//
+	// ```
+	DecoratedText *DecoratedText `protobuf:"bytes,3,opt,name=decorated_text,json=decoratedText,proto3,oneof"`
+}
+
+type Widget_ButtonList struct {
+	// A list of buttons.
+	//
+	// For example, the following JSON creates two buttons. The first
+	// is a blue text button and the second is an image button that opens a
+	// link:
+	// ```
+	//
+	//	"buttonList": {
+	//	  "buttons": [
+	//	    {
+	//	      "text": "Edit",
+	//	      "color": {
+	//	        "red": 0,
+	//	        "green": 0,
+	//	        "blue": 1,
+	//	        "alpha": 1
+	//	      },
+	//	      "disabled": true,
+	//	    },
+	//	    {
+	//	      "icon": {
+	//	        "knownIcon": "INVITE",
+	//	        "altText": "check calendar"
+	//	      },
+	//	      "onClick": {
+	//	        "openLink": {
+	//	          "url": "https://example.com/calendar"
+	//	        }
+	//	      }
+	//	    }
+	//	  ]
+	//	}
+	//
+	// ```
+	ButtonList *ButtonList `protobuf:"bytes,4,opt,name=button_list,json=buttonList,proto3,oneof"`
+}
+
+type Widget_TextInput struct {
+	// Displays a text box that users can type into.
+	//
+	// For example, the following JSON creates a text input for an email
+	// address:
+	//
+	// ```
+	//
+	//	"textInput": {
+	//	  "name": "mailing_address",
+	//	  "label": "Mailing Address"
+	//	}
+	//
+	// ```
+	//
+	// As another example, the following JSON creates a text input for a
+	// programming language with static suggestions:
+	// ```
+	//
+	//	"textInput": {
+	//	  "name": "preferred_programing_language",
+	//	  "label": "Preferred Language",
+	//	  "initialSuggestions": {
+	//	    "items": [
+	//	      {
+	//	        "text": "C++"
+	//	      },
+	//	      {
+	//	        "text": "Java"
+	//	      },
+	//	      {
+	//	        "text": "JavaScript"
+	//	      },
+	//	      {
+	//	        "text": "Python"
+	//	      }
+	//	    ]
+	//	  }
+	//	}
+	//
+	// ```
+	TextInput *TextInput `protobuf:"bytes,5,opt,name=text_input,json=textInput,proto3,oneof"`
+}
+
+type Widget_SelectionInput struct {
+	// Displays a selection control that lets users select items. Selection
+	// controls can be checkboxes, radio buttons, switches, or dropdown menus.
+	//
+	// For example, the following JSON creates a dropdown menu that lets users
+	// choose a size:
+	//
+	// ```
+	//
+	//	"selectionInput": {
+	//	  "name": "size",
+	//	  "label": "Size"
+	//	  "type": "DROPDOWN",
+	//	  "items": [
+	//	    {
+	//	      "text": "S",
+	//	      "value": "small",
+	//	      "selected": false
+	//	    },
+	//	    {
+	//	      "text": "M",
+	//	      "value": "medium",
+	//	      "selected": true
+	//	    },
+	//	    {
+	//	      "text": "L",
+	//	      "value": "large",
+	//	      "selected": false
+	//	    },
+	//	    {
+	//	      "text": "XL",
+	//	      "value": "extra_large",
+	//	      "selected": false
+	//	    }
+	//	  ]
+	//	}
+	//
+	// ```
+	SelectionInput *SelectionInput `protobuf:"bytes,6,opt,name=selection_input,json=selectionInput,proto3,oneof"`
+}
+
+type Widget_DateTimePicker struct {
+	// Displays a widget that lets users input a date, time, or date and time.
+	//
+	// For example, the following JSON creates a date time picker to schedule an
+	// appointment:
+	//
+	// ```
+	//
+	//	"dateTimePicker": {
+	//	  "name": "appointment_time",
+	//	  "label": "Book your appointment at:",
+	//	  "type": "DATE_AND_TIME",
+	//	  "valueMsEpoch": "796435200000"
+	//	}
+	//
+	// ```
+	DateTimePicker *DateTimePicker `protobuf:"bytes,7,opt,name=date_time_picker,json=dateTimePicker,proto3,oneof"`
+}
+
+type Widget_Divider struct {
+	// Displays a horizontal line divider between widgets.
+	//
+	// For example, the following JSON creates a divider:
+	// ```
+	// "divider": {
+	// }
+	// ```
+	Divider *Divider `protobuf:"bytes,9,opt,name=divider,proto3,oneof"`
+}
+
+type Widget_Grid struct {
+	// Displays a grid with a collection of items.
+	//
+	// A grid supports any number of columns and items. The number of rows is
+	// determined by the upper bounds of the number items divided by the number
+	// of columns. A grid with 10 items and 2 columns has 5 rows. A grid with 11
+	// items and 2 columns has 6 rows.
+	//
+	// [Google Workspace Add-ons and
+	// Chat apps](https://developers.google.com/workspace/extend):
+	//
+	// For example, the following JSON creates a 2 column grid with a single
+	// item:
+	//
+	// ```
+	//
+	//	"grid": {
+	//	  "title": "A fine collection of items",
+	//	  "columnCount": 2,
+	//	  "borderStyle": {
+	//	    "type": "STROKE",
+	//	    "cornerRadius": 4
+	//	  },
+	//	  "items": [
+	//	    {
+	//	      "image": {
+	//	        "imageUri": "https://www.example.com/image.png",
+	//	        "cropStyle": {
+	//	          "type": "SQUARE"
+	//	        },
+	//	        "borderStyle": {
+	//	          "type": "STROKE"
+	//	        }
+	//	      },
+	//	      "title": "An item",
+	//	      "textAlignment": "CENTER"
+	//	    }
+	//	  ],
+	//	  "onClick": {
+	//	    "openLink": {
+	//	      "url": "https://www.example.com"
+	//	    }
+	//	  }
+	//	}
+	//
+	// ```
+	Grid *Grid `protobuf:"bytes,10,opt,name=grid,proto3,oneof"`
+}
+
+type Widget_Columns struct {
+	// Displays up to 2 columns.
+	//
+	// To include more than 2 columns, or to use rows, use the `Grid` widget.
+	//
+	// For example, the following JSON creates 2 columns that each contain
+	// text paragraphs:
+	//
+	// ```
+	//
+	//	"columns": {
+	//	  "columnItems": [
+	//	    {
+	//	      "horizontalSizeStyle": "FILL_AVAILABLE_SPACE",
+	//	      "horizontalAlignment": "CENTER",
+	//	      "verticalAlignment": "CENTER",
+	//	      "widgets": [
+	//	        {
+	//	          "textParagraph": {
+	//	            "text": "First column text paragraph"
+	//	          }
+	//	        }
+	//	      ]
+	//	    },
+	//	    {
+	//	      "horizontalSizeStyle": "FILL_AVAILABLE_SPACE",
+	//	      "horizontalAlignment": "CENTER",
+	//	      "verticalAlignment": "CENTER",
+	//	      "widgets": [
+	//	        {
+	//	          "textParagraph": {
+	//	            "text": "Second column text paragraph"
+	//	          }
+	//	        }
+	//	      ]
+	//	    }
+	//	  ]
+	//	}
+	//
+	// ```
+	Columns *Columns `protobuf:"bytes,11,opt,name=columns,proto3,oneof"`
+}
+
+func (*Widget_TextParagraph) isWidget_Data() {}
+
+func (*Widget_Image) isWidget_Data() {}
+
+func (*Widget_DecoratedText) isWidget_Data() {}
+
+func (*Widget_ButtonList) isWidget_Data() {}
+
+func (*Widget_TextInput) isWidget_Data() {}
+
+func (*Widget_SelectionInput) isWidget_Data() {}
+
+func (*Widget_DateTimePicker) isWidget_Data() {}
+
+func (*Widget_Divider) isWidget_Data() {}
+
+func (*Widget_Grid) isWidget_Data() {}
+
+func (*Widget_Columns) isWidget_Data() {}
+
+// A paragraph of text that supports formatting. For an example in
+// Google Chat apps, see [Add a paragraph of formatted
+// text](https://developers.google.com/workspace/chat/add-text-image-card-dialog#add_a_paragraph_of_formatted_text).
+// For more information
+// about formatting text, see
+// [Formatting text in Google Chat
+// apps](https://developers.google.com/workspace/chat/format-messages#card-formatting)
+// and
+// [Formatting
+// text in Google Workspace
+// Add-ons](https://developers.google.com/apps-script/add-ons/concepts/widgets#text_formatting).
+//
+// [Google Workspace Add-ons and
+// Chat apps](https://developers.google.com/workspace/extend):
+type TextParagraph struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// The text that's shown in the widget.
+	Text string `protobuf:"bytes,1,opt,name=text,proto3" json:"text,omitempty"`
+}
+
+func (x *TextParagraph) Reset() {
+	*x = TextParagraph{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_apps_card_v1_card_proto_msgTypes[2]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *TextParagraph) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*TextParagraph) ProtoMessage() {}
+
+func (x *TextParagraph) ProtoReflect() protoreflect.Message {
+	mi := &file_google_apps_card_v1_card_proto_msgTypes[2]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use TextParagraph.ProtoReflect.Descriptor instead.
+func (*TextParagraph) Descriptor() ([]byte, []int) {
+	return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{2}
+}
+
+func (x *TextParagraph) GetText() string {
+	if x != nil {
+		return x.Text
+	}
+	return ""
+}
+
+// An image that is specified by a URL and can have an `onClick` action. For an
+// example, see [Add an
+// image](https://developers.google.com/workspace/chat/add-text-image-card-dialog#add_an_image).
+//
+// [Google Workspace Add-ons and Chat
+// apps](https://developers.google.com/workspace/extend):
+type Image struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// The HTTPS URL that hosts the image.
+	//
+	// For example:
+	//
+	// ```
+	// https://developers.google.com/workspace/chat/images/quickstart-app-avatar.png
+	// ```
+	ImageUrl string `protobuf:"bytes,1,opt,name=image_url,json=imageUrl,proto3" json:"image_url,omitempty"`
+	// When a user clicks the image, the click triggers this action.
+	OnClick *OnClick `protobuf:"bytes,2,opt,name=on_click,json=onClick,proto3" json:"on_click,omitempty"`
+	// The alternative text of this image that's used for accessibility.
+	AltText string `protobuf:"bytes,3,opt,name=alt_text,json=altText,proto3" json:"alt_text,omitempty"`
+}
+
+func (x *Image) Reset() {
+	*x = Image{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_apps_card_v1_card_proto_msgTypes[3]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *Image) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Image) ProtoMessage() {}
+
+func (x *Image) ProtoReflect() protoreflect.Message {
+	mi := &file_google_apps_card_v1_card_proto_msgTypes[3]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use Image.ProtoReflect.Descriptor instead.
+func (*Image) Descriptor() ([]byte, []int) {
+	return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{3}
+}
+
+func (x *Image) GetImageUrl() string {
+	if x != nil {
+		return x.ImageUrl
+	}
+	return ""
+}
+
+func (x *Image) GetOnClick() *OnClick {
+	if x != nil {
+		return x.OnClick
+	}
+	return nil
+}
+
+func (x *Image) GetAltText() string {
+	if x != nil {
+		return x.AltText
+	}
+	return ""
+}
+
+// Displays a divider between widgets as a horizontal line. For an example in
+// Google Chat apps, see
+// [Add a horizontal divider between
+// widgets](https://developers.google.com/workspace/chat/format-structure-card-dialog#add_a_horizontal_divider_between_widgets).
+//
+// [Google Workspace Add-ons and Chat
+// apps](https://developers.google.com/workspace/extend):
+//
+// For example, the following JSON creates a divider:
+//
+// ```
+// "divider": {}
+// ```
+type Divider struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+}
+
+func (x *Divider) Reset() {
+	*x = Divider{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_apps_card_v1_card_proto_msgTypes[4]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *Divider) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Divider) ProtoMessage() {}
+
+func (x *Divider) ProtoReflect() protoreflect.Message {
+	mi := &file_google_apps_card_v1_card_proto_msgTypes[4]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use Divider.ProtoReflect.Descriptor instead.
+func (*Divider) Descriptor() ([]byte, []int) {
+	return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{4}
+}
+
+// A widget that displays text with optional decorations such as a label above
+// or below the text, an icon in front of the text, a selection widget, or a
+// button after the text. For an example in
+// Google Chat apps, see [Display text with decorative
+// text](https://developers.google.com/workspace/chat/add-text-image-card-dialog#display_text_with_decorative_elements).
+//
+// [Google Workspace Add-ons and Chat
+// apps](https://developers.google.com/workspace/extend):
+type DecoratedText struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// Deprecated in favor of `startIcon`.
+	//
+	// Deprecated: Do not use.
+	Icon *Icon `protobuf:"bytes,1,opt,name=icon,proto3" json:"icon,omitempty"`
+	// The icon displayed in front of the text.
+	StartIcon *Icon `protobuf:"bytes,12,opt,name=start_icon,json=startIcon,proto3" json:"start_icon,omitempty"`
+	// The text that appears above `text`. Always truncates.
+	TopLabel string `protobuf:"bytes,3,opt,name=top_label,json=topLabel,proto3" json:"top_label,omitempty"`
+	// Required. The primary text.
+	//
+	// Supports simple formatting. For more information
+	// about formatting text, see
+	// [Formatting text in Google Chat
+	// apps](https://developers.google.com/workspace/chat/format-messages#card-formatting)
+	// and
+	// [Formatting
+	// text in Google Workspace
+	// Add-ons](https://developers.google.com/apps-script/add-ons/concepts/widgets#text_formatting).
+	Text string `protobuf:"bytes,4,opt,name=text,proto3" json:"text,omitempty"`
+	// The wrap text setting. If `true`, the text wraps and displays on
+	// multiple lines. Otherwise, the text is truncated.
+	//
+	// Only applies to `text`, not `topLabel` and `bottomLabel`.
+	WrapText bool `protobuf:"varint,5,opt,name=wrap_text,json=wrapText,proto3" json:"wrap_text,omitempty"`
+	// The text that appears below `text`. Always wraps.
+	BottomLabel string `protobuf:"bytes,6,opt,name=bottom_label,json=bottomLabel,proto3" json:"bottom_label,omitempty"`
+	// This action is triggered when users click `topLabel` or `bottomLabel`.
+	OnClick *OnClick `protobuf:"bytes,7,opt,name=on_click,json=onClick,proto3" json:"on_click,omitempty"`
+	// A button, switch, checkbox, or image that appears to the right-hand side
+	// of text in the `decoratedText` widget.
+	//
+	// Types that are assignable to Control:
+	//
+	//	*DecoratedText_Button
+	//	*DecoratedText_SwitchControl_
+	//	*DecoratedText_EndIcon
+	Control isDecoratedText_Control `protobuf_oneof:"control"`
+}
+
+func (x *DecoratedText) Reset() {
+	*x = DecoratedText{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_apps_card_v1_card_proto_msgTypes[5]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *DecoratedText) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DecoratedText) ProtoMessage() {}
+
+func (x *DecoratedText) ProtoReflect() protoreflect.Message {
+	mi := &file_google_apps_card_v1_card_proto_msgTypes[5]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use DecoratedText.ProtoReflect.Descriptor instead.
+func (*DecoratedText) Descriptor() ([]byte, []int) {
+	return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{5}
+}
+
+// Deprecated: Do not use.
+func (x *DecoratedText) GetIcon() *Icon {
+	if x != nil {
+		return x.Icon
+	}
+	return nil
+}
+
+func (x *DecoratedText) GetStartIcon() *Icon {
+	if x != nil {
+		return x.StartIcon
+	}
+	return nil
+}
+
+func (x *DecoratedText) GetTopLabel() string {
+	if x != nil {
+		return x.TopLabel
+	}
+	return ""
+}
+
+func (x *DecoratedText) GetText() string {
+	if x != nil {
+		return x.Text
+	}
+	return ""
+}
+
+func (x *DecoratedText) GetWrapText() bool {
+	if x != nil {
+		return x.WrapText
+	}
+	return false
+}
+
+func (x *DecoratedText) GetBottomLabel() string {
+	if x != nil {
+		return x.BottomLabel
+	}
+	return ""
+}
+
+func (x *DecoratedText) GetOnClick() *OnClick {
+	if x != nil {
+		return x.OnClick
+	}
+	return nil
+}
+
+func (m *DecoratedText) GetControl() isDecoratedText_Control {
+	if m != nil {
+		return m.Control
+	}
+	return nil
+}
+
+func (x *DecoratedText) GetButton() *Button {
+	if x, ok := x.GetControl().(*DecoratedText_Button); ok {
+		return x.Button
+	}
+	return nil
+}
+
+func (x *DecoratedText) GetSwitchControl() *DecoratedText_SwitchControl {
+	if x, ok := x.GetControl().(*DecoratedText_SwitchControl_); ok {
+		return x.SwitchControl
+	}
+	return nil
+}
+
+func (x *DecoratedText) GetEndIcon() *Icon {
+	if x, ok := x.GetControl().(*DecoratedText_EndIcon); ok {
+		return x.EndIcon
+	}
+	return nil
+}
+
+type isDecoratedText_Control interface {
+	isDecoratedText_Control()
+}
+
+type DecoratedText_Button struct {
+	// A button that a user can click to trigger an action.
+	Button *Button `protobuf:"bytes,8,opt,name=button,proto3,oneof"`
+}
+
+type DecoratedText_SwitchControl_ struct {
+	// A switch widget that a user can click to change its state and trigger an
+	// action.
+	SwitchControl *DecoratedText_SwitchControl `protobuf:"bytes,9,opt,name=switch_control,json=switchControl,proto3,oneof"`
+}
+
+type DecoratedText_EndIcon struct {
+	// An icon displayed after the text.
+	//
+	// Supports
+	// [built-in](https://developers.google.com/workspace/chat/format-messages#builtinicons)
+	// and
+	// [custom](https://developers.google.com/workspace/chat/format-messages#customicons)
+	// icons.
+	EndIcon *Icon `protobuf:"bytes,11,opt,name=end_icon,json=endIcon,proto3,oneof"`
+}
+
+func (*DecoratedText_Button) isDecoratedText_Control() {}
+
+func (*DecoratedText_SwitchControl_) isDecoratedText_Control() {}
+
+func (*DecoratedText_EndIcon) isDecoratedText_Control() {}
+
+// A field in which users can enter text. Supports suggestions and on-change
+// actions. For an example in Google Chat apps, see [Add a field in which a user
+// can enter
+// text](https://developers.google.com/workspace/chat/design-interactive-card-dialog#add_a_field_in_which_a_user_can_enter_text).
+//
+// Chat apps receive and can process the value of entered text during form input
+// events. For details about working with form inputs, see [Receive form
+// data](https://developers.google.com/workspace/chat/read-form-data).
+//
+// When you need to collect undefined or abstract data from users,
+// use a text input. To collect defined or enumerated data from users, use the
+// [SelectionInput][google.apps.card.v1.SelectionInput] widget.
+//
+// [Google Workspace Add-ons and Chat
+// apps](https://developers.google.com/workspace/extend):
+type TextInput struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// The name by which the text input is identified in a form input event.
+	//
+	// For details about working with form inputs, see [Receive form
+	// data](https://developers.google.com/workspace/chat/read-form-data).
+	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	// The text that appears above the text input field in the user interface.
+	//
+	// Specify text that helps the user enter the information your app needs.
+	// For example, if you are asking someone's name, but specifically need their
+	// surname, write `surname` instead of `name`.
+	//
+	// Required if `hintText` is unspecified. Otherwise, optional.
+	Label string `protobuf:"bytes,2,opt,name=label,proto3" json:"label,omitempty"`
+	// Text that appears below the text input field meant to assist users by
+	// prompting them to enter a certain value. This text is always visible.
+	//
+	// Required if `label` is unspecified. Otherwise, optional.
+	HintText string `protobuf:"bytes,3,opt,name=hint_text,json=hintText,proto3" json:"hint_text,omitempty"`
+	// The value entered by a user, returned as part of a form input event.
+	//
+	// For details about working with form inputs, see [Receive form
+	// data](https://developers.google.com/workspace/chat/read-form-data).
+	Value string `protobuf:"bytes,4,opt,name=value,proto3" json:"value,omitempty"`
+	// How a text input field appears in the user interface.
+	// For example, whether the field is single or multi-line.
+	Type TextInput_Type `protobuf:"varint,5,opt,name=type,proto3,enum=google.apps.card.v1.TextInput_Type" json:"type,omitempty"`
+	// What to do when a change occurs in the text input field. For example, a
+	// user adding to the field or deleting text.
+	//
+	// Examples of actions to take include running a custom function or opening
+	// a [dialog](https://developers.google.com/workspace/chat/dialogs)
+	// in Google Chat.
+	OnChangeAction *Action `protobuf:"bytes,6,opt,name=on_change_action,json=onChangeAction,proto3" json:"on_change_action,omitempty"`
+	// Suggested values that users can enter. These values appear when users click
+	// inside the text input field. As users type, the suggested values
+	// dynamically filter to match what the users have typed.
+	//
+	// For example, a text input field for programming language might suggest
+	// Java, JavaScript, Python, and C++. When users start typing `Jav`, the list
+	// of suggestions filters to show just `Java` and `JavaScript`.
+	//
+	// Suggested values help guide users to enter values that your app can make
+	// sense of. When referring to JavaScript, some users might enter `javascript`
+	// and others `java script`. Suggesting `JavaScript` can standardize how users
+	// interact with your app.
+	//
+	// When specified, `TextInput.type` is always `SINGLE_LINE`, even if it's set
+	// to `MULTIPLE_LINE`.
+	//
+	// [Google Workspace
+	// Add-ons and Chat apps](https://developers.google.com/workspace/extend):
+	InitialSuggestions *Suggestions `protobuf:"bytes,7,opt,name=initial_suggestions,json=initialSuggestions,proto3" json:"initial_suggestions,omitempty"`
+	// Optional. Specify what action to take when the text input field provides
+	// suggestions to users who interact with it.
+	//
+	// If unspecified, the suggestions are set by `initialSuggestions` and
+	// are processed by the client.
+	//
+	// If specified, the app takes the action specified here, such as running
+	// a custom function.
+	//
+	// [Google Workspace
+	// Add-ons](https://developers.google.com/workspace/add-ons):
+	AutoCompleteAction *Action `protobuf:"bytes,8,opt,name=auto_complete_action,json=autoCompleteAction,proto3" json:"auto_complete_action,omitempty"`
+	// Text that appears in the text input field when the field is empty.
+	// Use this text to prompt users to enter a value. For example, `Enter a
+	// number from 0 to 100`.
+	//
+	// [Google Chat apps](https://developers.google.com/workspace/chat):
+	PlaceholderText string `protobuf:"bytes,12,opt,name=placeholder_text,json=placeholderText,proto3" json:"placeholder_text,omitempty"`
+}
+
+func (x *TextInput) Reset() {
+	*x = TextInput{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_apps_card_v1_card_proto_msgTypes[6]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *TextInput) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*TextInput) ProtoMessage() {}
+
+func (x *TextInput) ProtoReflect() protoreflect.Message {
+	mi := &file_google_apps_card_v1_card_proto_msgTypes[6]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use TextInput.ProtoReflect.Descriptor instead.
+func (*TextInput) Descriptor() ([]byte, []int) {
+	return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{6}
+}
+
+func (x *TextInput) GetName() string {
+	if x != nil {
+		return x.Name
+	}
+	return ""
+}
+
+func (x *TextInput) GetLabel() string {
+	if x != nil {
+		return x.Label
+	}
+	return ""
+}
+
+func (x *TextInput) GetHintText() string {
+	if x != nil {
+		return x.HintText
+	}
+	return ""
+}
+
+func (x *TextInput) GetValue() string {
+	if x != nil {
+		return x.Value
+	}
+	return ""
+}
+
+func (x *TextInput) GetType() TextInput_Type {
+	if x != nil {
+		return x.Type
+	}
+	return TextInput_SINGLE_LINE
+}
+
+func (x *TextInput) GetOnChangeAction() *Action {
+	if x != nil {
+		return x.OnChangeAction
+	}
+	return nil
+}
+
+func (x *TextInput) GetInitialSuggestions() *Suggestions {
+	if x != nil {
+		return x.InitialSuggestions
+	}
+	return nil
+}
+
+func (x *TextInput) GetAutoCompleteAction() *Action {
+	if x != nil {
+		return x.AutoCompleteAction
+	}
+	return nil
+}
+
+func (x *TextInput) GetPlaceholderText() string {
+	if x != nil {
+		return x.PlaceholderText
+	}
+	return ""
+}
+
+// Suggested values that users can enter. These values appear when users click
+// inside the text input field. As users type, the suggested values
+// dynamically filter to match what the users have typed.
+//
+// For example, a text input field for programming language might suggest
+// Java, JavaScript, Python, and C++. When users start typing `Jav`, the list
+// of suggestions filters to show `Java` and `JavaScript`.
+//
+// Suggested values help guide users to enter values that your app can make
+// sense of. When referring to JavaScript, some users might enter `javascript`
+// and others `java script`. Suggesting `JavaScript` can standardize how users
+// interact with your app.
+//
+// When specified, `TextInput.type` is always `SINGLE_LINE`, even if it's set
+// to `MULTIPLE_LINE`.
+//
+// [Google Workspace
+// Add-ons and Chat apps](https://developers.google.com/workspace/extend):
+type Suggestions struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// A list of suggestions used for autocomplete recommendations in text input
+	// fields.
+	Items []*Suggestions_SuggestionItem `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"`
+}
+
+func (x *Suggestions) Reset() {
+	*x = Suggestions{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_apps_card_v1_card_proto_msgTypes[7]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *Suggestions) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Suggestions) ProtoMessage() {}
+
+func (x *Suggestions) ProtoReflect() protoreflect.Message {
+	mi := &file_google_apps_card_v1_card_proto_msgTypes[7]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use Suggestions.ProtoReflect.Descriptor instead.
+func (*Suggestions) Descriptor() ([]byte, []int) {
+	return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{7}
+}
+
+func (x *Suggestions) GetItems() []*Suggestions_SuggestionItem {
+	if x != nil {
+		return x.Items
+	}
+	return nil
+}
+
+// A list of buttons layed out horizontally. For an example in
+// Google Chat apps, see
+// [Add a
+// button](https://developers.google.com/workspace/chat/design-interactive-card-dialog#add_a_button).
+//
+// [Google Workspace Add-ons and Chat
+// apps](https://developers.google.com/workspace/extend):
+type ButtonList struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// An array of buttons.
+	Buttons []*Button `protobuf:"bytes,1,rep,name=buttons,proto3" json:"buttons,omitempty"`
+}
+
+func (x *ButtonList) Reset() {
+	*x = ButtonList{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_apps_card_v1_card_proto_msgTypes[8]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ButtonList) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ButtonList) ProtoMessage() {}
+
+func (x *ButtonList) ProtoReflect() protoreflect.Message {
+	mi := &file_google_apps_card_v1_card_proto_msgTypes[8]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use ButtonList.ProtoReflect.Descriptor instead.
+func (*ButtonList) Descriptor() ([]byte, []int) {
+	return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{8}
+}
+
+func (x *ButtonList) GetButtons() []*Button {
+	if x != nil {
+		return x.Buttons
+	}
+	return nil
+}
+
+// A widget that creates one or more UI items that users can select.
+// For example, a dropdown menu or checkboxes. You can use this widget to
+// collect data that can be predicted or enumerated. For an example in Google
+// Chat apps, see [Add selectable UI
+// elements](/workspace/chat/design-interactive-card-dialog#add_selectable_ui_elements).
+//
+// Chat apps can process the value of items that users select or input. For
+// details about working with form inputs, see [Receive form
+// data](https://developers.google.com/workspace/chat/read-form-data).
+//
+// To collect undefined or abstract data from users, use
+// the [TextInput][google.apps.card.v1.TextInput] widget.
+//
+// [Google Workspace Add-ons
+// and Chat apps](https://developers.google.com/workspace/extend):
+type SelectionInput struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// The name that identifies the selection input in a form input event.
+	//
+	// For details about working with form inputs, see [Receive form
+	// data](https://developers.google.com/workspace/chat/read-form-data).
+	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	// The text that appears above the selection input field in the user
+	// interface.
+	//
+	// Specify text that helps the user enter the information your app needs.
+	// For example, if users are selecting the urgency of a work ticket from a
+	// drop-down menu, the label might be "Urgency" or "Select urgency".
+	Label string `protobuf:"bytes,2,opt,name=label,proto3" json:"label,omitempty"`
+	// The type of items that are displayed to users in a `SelectionInput` widget.
+	// Selection types support different types of interactions. For example, users
+	// can select one or more checkboxes, but they can only select one value from
+	// a dropdown menu.
+	Type SelectionInput_SelectionType `protobuf:"varint,3,opt,name=type,proto3,enum=google.apps.card.v1.SelectionInput_SelectionType" json:"type,omitempty"`
+	// An array of selectable items. For example, an array of radio buttons or
+	// checkboxes. Supports up to 100 items.
+	Items []*SelectionInput_SelectionItem `protobuf:"bytes,4,rep,name=items,proto3" json:"items,omitempty"`
+	// If specified, the form is submitted when the selection changes. If not
+	// specified, you must specify a separate button that submits the form.
+	//
+	// For details about working with form inputs, see [Receive form
+	// data](https://developers.google.com/workspace/chat/read-form-data).
+	OnChangeAction *Action `protobuf:"bytes,5,opt,name=on_change_action,json=onChangeAction,proto3" json:"on_change_action,omitempty"`
+	// For multiselect menus, the maximum number of items that a user can select.
+	// Minimum value is 1 item. If unspecified, defaults to 3 items.
+	MultiSelectMaxSelectedItems int32 `protobuf:"varint,6,opt,name=multi_select_max_selected_items,json=multiSelectMaxSelectedItems,proto3" json:"multi_select_max_selected_items,omitempty"`
+	// For multiselect menus, the number of text characters that a user inputs
+	// before the app queries autocomplete and displays suggested items
+	// in the menu.
+	//
+	// If unspecified, defaults to 0 characters for static data sources and 3
+	// characters for external data sources.
+	MultiSelectMinQueryLength int32 `protobuf:"varint,7,opt,name=multi_select_min_query_length,json=multiSelectMinQueryLength,proto3" json:"multi_select_min_query_length,omitempty"`
+	// For a multiselect menu, the data source that populates
+	// selection items.
+	//
+	// [Google Chat apps](https://developers.google.com/workspace/chat):
+	//
+	// Types that are assignable to MultiSelectDataSource:
+	//
+	//	*SelectionInput_ExternalDataSource
+	//	*SelectionInput_PlatformDataSource_
+	MultiSelectDataSource isSelectionInput_MultiSelectDataSource `protobuf_oneof:"multi_select_data_source"`
+}
+
+func (x *SelectionInput) Reset() {
+	*x = SelectionInput{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_apps_card_v1_card_proto_msgTypes[9]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *SelectionInput) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SelectionInput) ProtoMessage() {}
+
+func (x *SelectionInput) ProtoReflect() protoreflect.Message {
+	mi := &file_google_apps_card_v1_card_proto_msgTypes[9]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use SelectionInput.ProtoReflect.Descriptor instead.
+func (*SelectionInput) Descriptor() ([]byte, []int) {
+	return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{9}
+}
+
+func (x *SelectionInput) GetName() string {
+	if x != nil {
+		return x.Name
+	}
+	return ""
+}
+
+func (x *SelectionInput) GetLabel() string {
+	if x != nil {
+		return x.Label
+	}
+	return ""
+}
+
+func (x *SelectionInput) GetType() SelectionInput_SelectionType {
+	if x != nil {
+		return x.Type
+	}
+	return SelectionInput_CHECK_BOX
+}
+
+func (x *SelectionInput) GetItems() []*SelectionInput_SelectionItem {
+	if x != nil {
+		return x.Items
+	}
+	return nil
+}
+
+func (x *SelectionInput) GetOnChangeAction() *Action {
+	if x != nil {
+		return x.OnChangeAction
+	}
+	return nil
+}
+
+func (x *SelectionInput) GetMultiSelectMaxSelectedItems() int32 {
+	if x != nil {
+		return x.MultiSelectMaxSelectedItems
+	}
+	return 0
+}
+
+func (x *SelectionInput) GetMultiSelectMinQueryLength() int32 {
+	if x != nil {
+		return x.MultiSelectMinQueryLength
+	}
+	return 0
+}
+
+func (m *SelectionInput) GetMultiSelectDataSource() isSelectionInput_MultiSelectDataSource {
+	if m != nil {
+		return m.MultiSelectDataSource
+	}
+	return nil
+}
+
+func (x *SelectionInput) GetExternalDataSource() *Action {
+	if x, ok := x.GetMultiSelectDataSource().(*SelectionInput_ExternalDataSource); ok {
+		return x.ExternalDataSource
+	}
+	return nil
+}
+
+func (x *SelectionInput) GetPlatformDataSource() *SelectionInput_PlatformDataSource {
+	if x, ok := x.GetMultiSelectDataSource().(*SelectionInput_PlatformDataSource_); ok {
+		return x.PlatformDataSource
+	}
+	return nil
+}
+
+type isSelectionInput_MultiSelectDataSource interface {
+	isSelectionInput_MultiSelectDataSource()
+}
+
+type SelectionInput_ExternalDataSource struct {
+	// An external data source, such as a relational data base.
+	ExternalDataSource *Action `protobuf:"bytes,8,opt,name=external_data_source,json=externalDataSource,proto3,oneof"`
+}
+
+type SelectionInput_PlatformDataSource_ struct {
+	// A data source from Google Workspace.
+	PlatformDataSource *SelectionInput_PlatformDataSource `protobuf:"bytes,9,opt,name=platform_data_source,json=platformDataSource,proto3,oneof"`
+}
+
+func (*SelectionInput_ExternalDataSource) isSelectionInput_MultiSelectDataSource() {}
+
+func (*SelectionInput_PlatformDataSource_) isSelectionInput_MultiSelectDataSource() {}
+
+// Lets users input a date, a time, or both a date and a time. For an example in
+// Google Chat apps, see [Let a user pick a date and
+// time](https://developers.google.com/workspace/chat/design-interactive-card-dialog#let_a_user_pick_a_date_and_time).
+//
+// Users can input text or use the picker to select dates and times. If users
+// input an invalid date or time, the picker shows an error that prompts users
+// to input the information correctly.
+//
+// [Google Workspace
+// Add-ons and Chat apps](https://developers.google.com/workspace/extend):
+type DateTimePicker struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// The name by which the `DateTimePicker` is identified in a form input event.
+	//
+	// For details about working with form inputs, see [Receive form
+	// data](https://developers.google.com/workspace/chat/read-form-data).
+	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	// The text that prompts users to input a date, a time, or a date and time.
+	// For example, if users are scheduling an appointment, use a label such as
+	// `Appointment date` or `Appointment date and time`.
+	Label string `protobuf:"bytes,2,opt,name=label,proto3" json:"label,omitempty"`
+	// Whether the widget supports inputting a date, a time, or the date and time.
+	Type DateTimePicker_DateTimePickerType `protobuf:"varint,3,opt,name=type,proto3,enum=google.apps.card.v1.DateTimePicker_DateTimePickerType" json:"type,omitempty"`
+	// The default value displayed in the widget, in milliseconds since [Unix
+	// epoch time](https://en.wikipedia.org/wiki/Unix_time).
+	//
+	// Specify the value based on the type of picker (`DateTimePickerType`):
+	//
+	//   - `DATE_AND_TIME`: a calendar date and time in UTC. For example, to
+	//     represent January 1, 2023 at 12:00 PM UTC, use `1672574400000`.
+	//   - `DATE_ONLY`: a calendar date at 00:00:00 UTC. For example, to represent
+	//     January 1, 2023, use `1672531200000`.
+	//   - `TIME_ONLY`: a time in UTC. For example, to represent 12:00 PM, use
+	//     `43200000` (or `12 * 60 * 60 * 1000`).
+	ValueMsEpoch int64 `protobuf:"varint,4,opt,name=value_ms_epoch,json=valueMsEpoch,proto3" json:"value_ms_epoch,omitempty"`
+	// The number representing the time zone offset from UTC, in minutes.
+	// If set, the `value_ms_epoch` is displayed in the specified time zone.
+	// If unset, the value defaults to the user's time zone setting.
+	TimezoneOffsetDate int32 `protobuf:"varint,5,opt,name=timezone_offset_date,json=timezoneOffsetDate,proto3" json:"timezone_offset_date,omitempty"`
+	// Triggered when the user clicks **Save** or **Clear** from the
+	// `DateTimePicker` interface.
+	OnChangeAction *Action `protobuf:"bytes,6,opt,name=on_change_action,json=onChangeAction,proto3" json:"on_change_action,omitempty"`
+}
+
+func (x *DateTimePicker) Reset() {
+	*x = DateTimePicker{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_apps_card_v1_card_proto_msgTypes[10]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *DateTimePicker) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DateTimePicker) ProtoMessage() {}
+
+func (x *DateTimePicker) ProtoReflect() protoreflect.Message {
+	mi := &file_google_apps_card_v1_card_proto_msgTypes[10]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use DateTimePicker.ProtoReflect.Descriptor instead.
+func (*DateTimePicker) Descriptor() ([]byte, []int) {
+	return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{10}
+}
+
+func (x *DateTimePicker) GetName() string {
+	if x != nil {
+		return x.Name
+	}
+	return ""
+}
+
+func (x *DateTimePicker) GetLabel() string {
+	if x != nil {
+		return x.Label
+	}
+	return ""
+}
+
+func (x *DateTimePicker) GetType() DateTimePicker_DateTimePickerType {
+	if x != nil {
+		return x.Type
+	}
+	return DateTimePicker_DATE_AND_TIME
+}
+
+func (x *DateTimePicker) GetValueMsEpoch() int64 {
+	if x != nil {
+		return x.ValueMsEpoch
+	}
+	return 0
+}
+
+func (x *DateTimePicker) GetTimezoneOffsetDate() int32 {
+	if x != nil {
+		return x.TimezoneOffsetDate
+	}
+	return 0
+}
+
+func (x *DateTimePicker) GetOnChangeAction() *Action {
+	if x != nil {
+		return x.OnChangeAction
+	}
+	return nil
+}
+
+// A text, icon, or text and icon button that users can click. For an example in
+// Google Chat apps, see
+// [Add a
+// button](https://developers.google.com/workspace/chat/design-interactive-card-dialog#add_a_button).
+//
+// To make an image a clickable button, specify an
+// [`Image`][google.apps.card.v1.Image] (not an
+// [`ImageComponent`][google.apps.card.v1.ImageComponent]) and set an
+// `onClick` action.
+//
+// [Google Workspace
+// Add-ons and Chat apps](https://developers.google.com/workspace/extend):
+type Button struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// The text displayed inside the button.
+	Text string `protobuf:"bytes,1,opt,name=text,proto3" json:"text,omitempty"`
+	// The icon image. If both `icon` and `text` are set, then the icon appears
+	// before the text.
+	Icon *Icon `protobuf:"bytes,2,opt,name=icon,proto3" json:"icon,omitempty"`
+	// If set, the button is filled with a solid background color and the font
+	// color changes to maintain contrast with the background color. For example,
+	// setting a blue background likely results in white text.
+	//
+	// If unset, the image background is white and the font color is blue.
+	//
+	// For red, green, and blue, the value of each field is a `float` number that
+	// you can express in either of two ways: as a number between 0 and 255
+	// divided by 255 (153/255), or as a value between 0 and 1 (0.6). 0 represents
+	// the absence of a color and 1 or 255/255 represent the full presence of that
+	// color on the RGB scale.
+	//
+	// Optionally set `alpha`, which sets a level of transparency using this
+	// equation:
+	//
+	// ```
+	// pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+	// ```
+	//
+	// For `alpha`, a value of `1` corresponds with a solid color, and a value of
+	// `0` corresponds with a completely transparent color.
+	//
+	// For example, the following color represents a half transparent red:
+	//
+	// ```
+	//
+	//	"color": {
+	//	   "red": 1,
+	//	   "green": 0,
+	//	   "blue": 0,
+	//	   "alpha": 0.5
+	//	}
+	//
+	// ```
+	Color *color.Color `protobuf:"bytes,3,opt,name=color,proto3" json:"color,omitempty"`
+	// Required. The action to perform when a user clicks the button, such as
+	// opening a hyperlink or running a custom function.
+	OnClick *OnClick `protobuf:"bytes,4,opt,name=on_click,json=onClick,proto3" json:"on_click,omitempty"`
+	// If `true`, the button is displayed in an inactive state and doesn't respond
+	// to user actions.
+	Disabled bool `protobuf:"varint,5,opt,name=disabled,proto3" json:"disabled,omitempty"`
+	// The alternative text that's used for accessibility.
+	//
+	// Set descriptive text that lets users know what the button does. For
+	// example, if a button opens a hyperlink, you might write: "Opens a new
+	// browser tab and navigates to the Google Chat developer documentation at
+	// https://developers.google.com/workspace/chat".
+	AltText string `protobuf:"bytes,6,opt,name=alt_text,json=altText,proto3" json:"alt_text,omitempty"`
+}
+
+func (x *Button) Reset() {
+	*x = Button{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_apps_card_v1_card_proto_msgTypes[11]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *Button) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Button) ProtoMessage() {}
+
+func (x *Button) ProtoReflect() protoreflect.Message {
+	mi := &file_google_apps_card_v1_card_proto_msgTypes[11]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use Button.ProtoReflect.Descriptor instead.
+func (*Button) Descriptor() ([]byte, []int) {
+	return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{11}
+}
+
+func (x *Button) GetText() string {
+	if x != nil {
+		return x.Text
+	}
+	return ""
+}
+
+func (x *Button) GetIcon() *Icon {
+	if x != nil {
+		return x.Icon
+	}
+	return nil
+}
+
+func (x *Button) GetColor() *color.Color {
+	if x != nil {
+		return x.Color
+	}
+	return nil
+}
+
+func (x *Button) GetOnClick() *OnClick {
+	if x != nil {
+		return x.OnClick
+	}
+	return nil
+}
+
+func (x *Button) GetDisabled() bool {
+	if x != nil {
+		return x.Disabled
+	}
+	return false
+}
+
+func (x *Button) GetAltText() string {
+	if x != nil {
+		return x.AltText
+	}
+	return ""
+}
+
+// An icon displayed in a widget on a card. For an example in Google Chat apps,
+// see [Add an
+// icon](https://developers.google.com/workspace/chat/add-text-image-card-dialog#add_an_icon).
+//
+// Supports
+// [built-in](https://developers.google.com/workspace/chat/format-messages#builtinicons)
+// and
+// [custom](https://developers.google.com/workspace/chat/format-messages#customicons)
+// icons.
+//
+// [Google Workspace Add-ons and Chat
+// apps](https://developers.google.com/workspace/extend):
+type Icon struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// The icon displayed in the widget on the card.
+	//
+	// Types that are assignable to Icons:
+	//
+	//	*Icon_KnownIcon
+	//	*Icon_IconUrl
+	//	*Icon_MaterialIcon
+	Icons isIcon_Icons `protobuf_oneof:"icons"`
+	// Optional. A description of the icon used for accessibility.
+	// If unspecified, the default value `Button` is provided. As a best practice,
+	// you should set a helpful description for what the icon displays, and if
+	// applicable, what it does. For example, `A user's account portrait`, or
+	// `Opens a new browser tab and navigates to the Google Chat developer
+	// documentation at https://developers.google.com/workspace/chat`.
+	//
+	// If the icon is set in a [`Button`][google.apps.card.v1.Button], the
+	// `altText` appears as helper text when the user hovers over the button.
+	// However, if the button also sets `text`, the icon's `altText` is ignored.
+	AltText string `protobuf:"bytes,3,opt,name=alt_text,json=altText,proto3" json:"alt_text,omitempty"`
+	// The crop style applied to the image. In some cases, applying a
+	// `CIRCLE` crop causes the image to be drawn larger than a built-in
+	// icon.
+	ImageType Widget_ImageType `protobuf:"varint,4,opt,name=image_type,json=imageType,proto3,enum=google.apps.card.v1.Widget_ImageType" json:"image_type,omitempty"`
+}
+
+func (x *Icon) Reset() {
+	*x = Icon{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_apps_card_v1_card_proto_msgTypes[12]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *Icon) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Icon) ProtoMessage() {}
+
+func (x *Icon) ProtoReflect() protoreflect.Message {
+	mi := &file_google_apps_card_v1_card_proto_msgTypes[12]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use Icon.ProtoReflect.Descriptor instead.
+func (*Icon) Descriptor() ([]byte, []int) {
+	return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{12}
+}
+
+func (m *Icon) GetIcons() isIcon_Icons {
+	if m != nil {
+		return m.Icons
+	}
+	return nil
+}
+
+func (x *Icon) GetKnownIcon() string {
+	if x, ok := x.GetIcons().(*Icon_KnownIcon); ok {
+		return x.KnownIcon
+	}
+	return ""
+}
+
+func (x *Icon) GetIconUrl() string {
+	if x, ok := x.GetIcons().(*Icon_IconUrl); ok {
+		return x.IconUrl
+	}
+	return ""
+}
+
+func (x *Icon) GetMaterialIcon() *MaterialIcon {
+	if x, ok := x.GetIcons().(*Icon_MaterialIcon); ok {
+		return x.MaterialIcon
+	}
+	return nil
+}
+
+func (x *Icon) GetAltText() string {
+	if x != nil {
+		return x.AltText
+	}
+	return ""
+}
+
+func (x *Icon) GetImageType() Widget_ImageType {
+	if x != nil {
+		return x.ImageType
+	}
+	return Widget_SQUARE
+}
+
+type isIcon_Icons interface {
+	isIcon_Icons()
+}
+
+type Icon_KnownIcon struct {
+	// Display one of the built-in icons provided by Google Workspace.
+	//
+	// For example, to display an airplane icon, specify `AIRPLANE`.
+	// For a bus, specify `BUS`.
+	//
+	// For a full list of supported icons, see [built-in
+	// icons](https://developers.google.com/workspace/chat/format-messages#builtinicons).
+	KnownIcon string `protobuf:"bytes,1,opt,name=known_icon,json=knownIcon,proto3,oneof"`
+}
+
+type Icon_IconUrl struct {
+	// Display a custom icon hosted at an HTTPS URL.
+	//
+	// For example:
+	//
+	// ```
+	// "iconUrl":
+	// "https://developers.google.com/workspace/chat/images/quickstart-app-avatar.png"
+	// ```
+	//
+	// Supported file types include `.png` and `.jpg`.
+	IconUrl string `protobuf:"bytes,2,opt,name=icon_url,json=iconUrl,proto3,oneof"`
+}
+
+type Icon_MaterialIcon struct {
+	// Display one of the [Google Material
+	// Icons](https://fonts.google.com/icons).
+	//
+	// For example, to display a [checkbox
+	// icon](https://fonts.google.com/icons?selected=Material%20Symbols%20Outlined%3Acheck_box%3AFILL%400%3Bwght%40400%3BGRAD%400%3Bopsz%4048),
+	// use
+	// ```
+	//
+	//	"material_icon": {
+	//	  "name": "check_box"
+	//	}
+	//
+	// ```
+	//
+	// [Google Chat apps](https://developers.google.com/workspace/chat):
+	MaterialIcon *MaterialIcon `protobuf:"bytes,5,opt,name=material_icon,json=materialIcon,proto3,oneof"`
+}
+
+func (*Icon_KnownIcon) isIcon_Icons() {}
+
+func (*Icon_IconUrl) isIcon_Icons() {}
+
+func (*Icon_MaterialIcon) isIcon_Icons() {}
+
+// A [Google Material Icon](https://fonts.google.com/icons), which includes over
+// 2500+ options.
+//
+// For example, to display a [checkbox
+// icon](https://fonts.google.com/icons?selected=Material%20Symbols%20Outlined%3Acheck_box%3AFILL%400%3Bwght%40400%3BGRAD%400%3Bopsz%4048)
+// with customized weight and grade, write the following:
+//
+// ```
+//
+//	{
+//	  "name": "check_box",
+//	  "fill": true,
+//	  "weight": 300,
+//	  "grade": -25
+//	}
+//
+// ```
+//
+// [Google Chat apps](https://developers.google.com/workspace/chat):
+type MaterialIcon struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// The icon name defined in the [Google Material
+	// Icon](https://fonts.google.com/icons), for example, `check_box`. Any
+	// invalid names are abandoned and replaced with empty string and
+	// results in the icon failing to render.
+	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	// Whether the icon renders as filled. Default value is false.
+	//
+	// To preview different icon settings, go to
+	// [Google Font Icons](https://fonts.google.com/icons) and adjust the
+	// settings under **Customize**.
+	Fill bool `protobuf:"varint,2,opt,name=fill,proto3" json:"fill,omitempty"`
+	// The stroke weight of the icon. Choose from {100, 200, 300, 400,
+	// 500, 600, 700}. If absent, default value is 400. If any other value is
+	// specified, the default value is used.
+	//
+	// To preview different icon settings, go to
+	// [Google Font Icons](https://fonts.google.com/icons) and adjust the
+	// settings under **Customize**.
+	Weight int32 `protobuf:"varint,3,opt,name=weight,proto3" json:"weight,omitempty"`
+	// Weight and grade affect a symbol’s thickness. Adjustments to grade are more
+	// granular than adjustments to weight and have a small impact on the size of
+	// the symbol. Choose from {-25, 0, 200}. If absent, default value is 0. If
+	// any other value is specified, the default value is used.
+	//
+	// To preview different icon settings, go to
+	// [Google Font Icons](https://fonts.google.com/icons) and adjust the
+	// settings under **Customize**.
+	Grade int32 `protobuf:"varint,4,opt,name=grade,proto3" json:"grade,omitempty"`
+}
+
+func (x *MaterialIcon) Reset() {
+	*x = MaterialIcon{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_apps_card_v1_card_proto_msgTypes[13]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *MaterialIcon) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*MaterialIcon) ProtoMessage() {}
+
+func (x *MaterialIcon) ProtoReflect() protoreflect.Message {
+	mi := &file_google_apps_card_v1_card_proto_msgTypes[13]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use MaterialIcon.ProtoReflect.Descriptor instead.
+func (*MaterialIcon) Descriptor() ([]byte, []int) {
+	return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{13}
+}
+
+func (x *MaterialIcon) GetName() string {
+	if x != nil {
+		return x.Name
+	}
+	return ""
+}
+
+func (x *MaterialIcon) GetFill() bool {
+	if x != nil {
+		return x.Fill
+	}
+	return false
+}
+
+func (x *MaterialIcon) GetWeight() int32 {
+	if x != nil {
+		return x.Weight
+	}
+	return 0
+}
+
+func (x *MaterialIcon) GetGrade() int32 {
+	if x != nil {
+		return x.Grade
+	}
+	return 0
+}
+
+// Represents the crop style applied to an image.
+//
+// [Google Workspace Add-ons and
+// Chat apps](https://developers.google.com/workspace/extend):
+//
+// For example, here's how to apply a 16:9 aspect ratio:
+//
+// ```
+//
+//	cropStyle {
+//	 "type": "RECTANGLE_CUSTOM",
+//	 "aspectRatio": 16/9
+//	}
+//
+// ```
+type ImageCropStyle struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// The crop type.
+	Type ImageCropStyle_ImageCropType `protobuf:"varint,1,opt,name=type,proto3,enum=google.apps.card.v1.ImageCropStyle_ImageCropType" json:"type,omitempty"`
+	// The aspect ratio to use if the crop type is `RECTANGLE_CUSTOM`.
+	//
+	// For example, here's how to apply a 16:9 aspect ratio:
+	//
+	// ```
+	//
+	//	cropStyle {
+	//	 "type": "RECTANGLE_CUSTOM",
+	//	 "aspectRatio": 16/9
+	//	}
+	//
+	// ```
+	AspectRatio float64 `protobuf:"fixed64,2,opt,name=aspect_ratio,json=aspectRatio,proto3" json:"aspect_ratio,omitempty"`
+}
+
+func (x *ImageCropStyle) Reset() {
+	*x = ImageCropStyle{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_apps_card_v1_card_proto_msgTypes[14]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ImageCropStyle) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ImageCropStyle) ProtoMessage() {}
+
+func (x *ImageCropStyle) ProtoReflect() protoreflect.Message {
+	mi := &file_google_apps_card_v1_card_proto_msgTypes[14]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use ImageCropStyle.ProtoReflect.Descriptor instead.
+func (*ImageCropStyle) Descriptor() ([]byte, []int) {
+	return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{14}
+}
+
+func (x *ImageCropStyle) GetType() ImageCropStyle_ImageCropType {
+	if x != nil {
+		return x.Type
+	}
+	return ImageCropStyle_IMAGE_CROP_TYPE_UNSPECIFIED
+}
+
+func (x *ImageCropStyle) GetAspectRatio() float64 {
+	if x != nil {
+		return x.AspectRatio
+	}
+	return 0
+}
+
+// The style options for the border of a card or widget, including the border
+// type and color.
+//
+// [Google Workspace Add-ons and Chat
+// apps](https://developers.google.com/workspace/extend):
+type BorderStyle struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// The border type.
+	Type BorderStyle_BorderType `protobuf:"varint,1,opt,name=type,proto3,enum=google.apps.card.v1.BorderStyle_BorderType" json:"type,omitempty"`
+	// The colors to use when the type is `BORDER_TYPE_STROKE`.
+	StrokeColor *color.Color `protobuf:"bytes,2,opt,name=stroke_color,json=strokeColor,proto3" json:"stroke_color,omitempty"`
+	// The corner radius for the border.
+	CornerRadius int32 `protobuf:"varint,3,opt,name=corner_radius,json=cornerRadius,proto3" json:"corner_radius,omitempty"`
+}
+
+func (x *BorderStyle) Reset() {
+	*x = BorderStyle{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_apps_card_v1_card_proto_msgTypes[15]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *BorderStyle) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*BorderStyle) ProtoMessage() {}
+
+func (x *BorderStyle) ProtoReflect() protoreflect.Message {
+	mi := &file_google_apps_card_v1_card_proto_msgTypes[15]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use BorderStyle.ProtoReflect.Descriptor instead.
+func (*BorderStyle) Descriptor() ([]byte, []int) {
+	return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{15}
+}
+
+func (x *BorderStyle) GetType() BorderStyle_BorderType {
+	if x != nil {
+		return x.Type
+	}
+	return BorderStyle_BORDER_TYPE_UNSPECIFIED
+}
+
+func (x *BorderStyle) GetStrokeColor() *color.Color {
+	if x != nil {
+		return x.StrokeColor
+	}
+	return nil
+}
+
+func (x *BorderStyle) GetCornerRadius() int32 {
+	if x != nil {
+		return x.CornerRadius
+	}
+	return 0
+}
+
+// Represents an image.
+//
+// [Google Workspace Add-ons and Chat
+// apps](https://developers.google.com/workspace/extend):
+type ImageComponent struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// The image URL.
+	ImageUri string `protobuf:"bytes,1,opt,name=image_uri,json=imageUri,proto3" json:"image_uri,omitempty"`
+	// The accessibility label for the image.
+	AltText string `protobuf:"bytes,2,opt,name=alt_text,json=altText,proto3" json:"alt_text,omitempty"`
+	// The crop style to apply to the image.
+	CropStyle *ImageCropStyle `protobuf:"bytes,3,opt,name=crop_style,json=cropStyle,proto3" json:"crop_style,omitempty"`
+	// The border style to apply to the image.
+	BorderStyle *BorderStyle `protobuf:"bytes,4,opt,name=border_style,json=borderStyle,proto3" json:"border_style,omitempty"`
+}
+
+func (x *ImageComponent) Reset() {
+	*x = ImageComponent{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_apps_card_v1_card_proto_msgTypes[16]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ImageComponent) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ImageComponent) ProtoMessage() {}
+
+func (x *ImageComponent) ProtoReflect() protoreflect.Message {
+	mi := &file_google_apps_card_v1_card_proto_msgTypes[16]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use ImageComponent.ProtoReflect.Descriptor instead.
+func (*ImageComponent) Descriptor() ([]byte, []int) {
+	return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{16}
+}
+
+func (x *ImageComponent) GetImageUri() string {
+	if x != nil {
+		return x.ImageUri
+	}
+	return ""
+}
+
+func (x *ImageComponent) GetAltText() string {
+	if x != nil {
+		return x.AltText
+	}
+	return ""
+}
+
+func (x *ImageComponent) GetCropStyle() *ImageCropStyle {
+	if x != nil {
+		return x.CropStyle
+	}
+	return nil
+}
+
+func (x *ImageComponent) GetBorderStyle() *BorderStyle {
+	if x != nil {
+		return x.BorderStyle
+	}
+	return nil
+}
+
+// Displays a grid with a collection of items. Items can only include text or
+// images. For responsive columns, or to include more than text or images, use
+// [`Columns`][google.apps.card.v1.Columns]. For an example in Google Chat apps,
+// see [Display a Grid with a collection of
+// items](https://developers.google.com/workspace/chat/format-structure-card-dialog#display_a_grid_with_a_collection_of_items).
+//
+// A grid supports any number of columns and items. The number of rows is
+// determined by items divided by columns. A grid with
+// 10 items and 2 columns has 5 rows. A grid with 11 items and 2 columns
+// has 6 rows.
+//
+// [Google Workspace Add-ons and Chat
+// apps](https://developers.google.com/workspace/extend):
+//
+// For example, the following JSON creates a 2 column grid with a single
+// item:
+//
+// ```
+//
+//	"grid": {
+//	  "title": "A fine collection of items",
+//	  "columnCount": 2,
+//	  "borderStyle": {
+//	    "type": "STROKE",
+//	    "cornerRadius": 4
+//	  },
+//	  "items": [
+//	    {
+//	      "image": {
+//	        "imageUri": "https://www.example.com/image.png",
+//	        "cropStyle": {
+//	          "type": "SQUARE"
+//	        },
+//	        "borderStyle": {
+//	          "type": "STROKE"
+//	        }
+//	      },
+//	      "title": "An item",
+//	      "textAlignment": "CENTER"
+//	    }
+//	  ],
+//	  "onClick": {
+//	    "openLink": {
+//	      "url": "https://www.example.com"
+//	    }
+//	  }
+//	}
+//
+// ```
+type Grid struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// The text that displays in the grid header.
+	Title string `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"`
+	// The items to display in the grid.
+	Items []*Grid_GridItem `protobuf:"bytes,2,rep,name=items,proto3" json:"items,omitempty"`
+	// The border style to apply to each grid item.
+	BorderStyle *BorderStyle `protobuf:"bytes,3,opt,name=border_style,json=borderStyle,proto3" json:"border_style,omitempty"`
+	// The number of columns to display in the grid. A default value
+	// is used if this field isn't specified, and that default value is
+	// different depending on where the grid is shown (dialog versus companion).
+	ColumnCount int32 `protobuf:"varint,4,opt,name=column_count,json=columnCount,proto3" json:"column_count,omitempty"`
+	// This callback is reused by each individual grid item, but with the
+	// item's identifier and index in the items list added to the callback's
+	// parameters.
+	OnClick *OnClick `protobuf:"bytes,5,opt,name=on_click,json=onClick,proto3" json:"on_click,omitempty"`
+}
+
+func (x *Grid) Reset() {
+	*x = Grid{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_apps_card_v1_card_proto_msgTypes[17]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *Grid) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Grid) ProtoMessage() {}
+
+func (x *Grid) ProtoReflect() protoreflect.Message {
+	mi := &file_google_apps_card_v1_card_proto_msgTypes[17]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use Grid.ProtoReflect.Descriptor instead.
+func (*Grid) Descriptor() ([]byte, []int) {
+	return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{17}
+}
+
+func (x *Grid) GetTitle() string {
+	if x != nil {
+		return x.Title
+	}
+	return ""
+}
+
+func (x *Grid) GetItems() []*Grid_GridItem {
+	if x != nil {
+		return x.Items
+	}
+	return nil
+}
+
+func (x *Grid) GetBorderStyle() *BorderStyle {
+	if x != nil {
+		return x.BorderStyle
+	}
+	return nil
+}
+
+func (x *Grid) GetColumnCount() int32 {
+	if x != nil {
+		return x.ColumnCount
+	}
+	return 0
+}
+
+func (x *Grid) GetOnClick() *OnClick {
+	if x != nil {
+		return x.OnClick
+	}
+	return nil
+}
+
+// The `Columns` widget displays up to 2 columns in a card or dialog. You can
+// add widgets to each column; the widgets appear in the order that they are
+// specified. For an example in Google Chat apps, see
+// [Display cards and dialogs in
+// columns](https://developers.google.com/workspace/chat/format-structure-card-dialog#display_cards_and_dialogs_in_columns).
+//
+// The height of each column is determined by the taller column. For example, if
+// the first column is taller than the second column, both columns have the
+// height of the first column. Because each column can contain a different
+// number of widgets, you can't define rows or align widgets between the
+// columns.
+//
+// Columns are displayed side-by-side. You can customize the width of each
+// column using the `HorizontalSizeStyle` field. If the user's
+// screen width is too narrow, the second column wraps below the first:
+//
+//   - On web, the second column wraps if the screen width is less than or equal
+//     to 480 pixels.
+//   - On iOS devices, the second column wraps if the screen width is
+//     less than or equal to 300 pt.
+//   - On Android devices, the second column wraps if the screen width is
+//     less than or equal to 320 dp.
+//
+// To include more than 2 columns, or to use rows, use the
+// [`Grid`][google.apps.card.v1.Grid] widget.
+//
+// [Google Workspace Add-ons and Chat
+// apps](https://developers.google.com/workspace/extend):
+// Columns for Google Workspace Add-ons are in
+// Developer Preview.
+type Columns struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// An array of columns. You can include up to 2 columns in a card or dialog.
+	ColumnItems []*Columns_Column `protobuf:"bytes,2,rep,name=column_items,json=columnItems,proto3" json:"column_items,omitempty"`
+}
+
+func (x *Columns) Reset() {
+	*x = Columns{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_apps_card_v1_card_proto_msgTypes[18]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *Columns) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Columns) ProtoMessage() {}
+
+func (x *Columns) ProtoReflect() protoreflect.Message {
+	mi := &file_google_apps_card_v1_card_proto_msgTypes[18]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use Columns.ProtoReflect.Descriptor instead.
+func (*Columns) Descriptor() ([]byte, []int) {
+	return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{18}
+}
+
+func (x *Columns) GetColumnItems() []*Columns_Column {
+	if x != nil {
+		return x.ColumnItems
+	}
+	return nil
+}
+
+// Represents how to respond when users click an interactive element on
+// a card, such as a button.
+//
+// [Google Workspace Add-ons and Chat
+// apps](https://developers.google.com/workspace/extend):
+type OnClick struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// Types that are assignable to Data:
+	//
+	//	*OnClick_Action
+	//	*OnClick_OpenLink
+	//	*OnClick_OpenDynamicLinkAction
+	//	*OnClick_Card
+	Data isOnClick_Data `protobuf_oneof:"data"`
+}
+
+func (x *OnClick) Reset() {
+	*x = OnClick{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_apps_card_v1_card_proto_msgTypes[19]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *OnClick) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*OnClick) ProtoMessage() {}
+
+func (x *OnClick) ProtoReflect() protoreflect.Message {
+	mi := &file_google_apps_card_v1_card_proto_msgTypes[19]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use OnClick.ProtoReflect.Descriptor instead.
+func (*OnClick) Descriptor() ([]byte, []int) {
+	return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{19}
+}
+
+func (m *OnClick) GetData() isOnClick_Data {
+	if m != nil {
+		return m.Data
+	}
+	return nil
+}
+
+func (x *OnClick) GetAction() *Action {
+	if x, ok := x.GetData().(*OnClick_Action); ok {
+		return x.Action
+	}
+	return nil
+}
+
+func (x *OnClick) GetOpenLink() *OpenLink {
+	if x, ok := x.GetData().(*OnClick_OpenLink); ok {
+		return x.OpenLink
+	}
+	return nil
+}
+
+func (x *OnClick) GetOpenDynamicLinkAction() *Action {
+	if x, ok := x.GetData().(*OnClick_OpenDynamicLinkAction); ok {
+		return x.OpenDynamicLinkAction
+	}
+	return nil
+}
+
+func (x *OnClick) GetCard() *Card {
+	if x, ok := x.GetData().(*OnClick_Card); ok {
+		return x.Card
+	}
+	return nil
+}
+
+type isOnClick_Data interface {
+	isOnClick_Data()
+}
+
+type OnClick_Action struct {
+	// If specified, an action is triggered by this `onClick`.
+	Action *Action `protobuf:"bytes,1,opt,name=action,proto3,oneof"`
+}
+
+type OnClick_OpenLink struct {
+	// If specified, this `onClick` triggers an open link action.
+	OpenLink *OpenLink `protobuf:"bytes,2,opt,name=open_link,json=openLink,proto3,oneof"`
+}
+
+type OnClick_OpenDynamicLinkAction struct {
+	// An add-on triggers this action when the action needs to open a
+	// link. This differs from the `open_link` above in that this needs to talk
+	// to server to get the link. Thus some preparation work is required for
+	// web client to do before the open link action response comes back.
+	//
+	// [Google Workspace
+	// Add-ons](https://developers.google.com/workspace/add-ons):
+	OpenDynamicLinkAction *Action `protobuf:"bytes,3,opt,name=open_dynamic_link_action,json=openDynamicLinkAction,proto3,oneof"`
+}
+
+type OnClick_Card struct {
+	// A new card is pushed to the card stack after clicking if specified.
+	//
+	// [Google Workspace
+	// Add-ons](https://developers.google.com/workspace/add-ons):
+	Card *Card `protobuf:"bytes,4,opt,name=card,proto3,oneof"`
+}
+
+func (*OnClick_Action) isOnClick_Data() {}
+
+func (*OnClick_OpenLink) isOnClick_Data() {}
+
+func (*OnClick_OpenDynamicLinkAction) isOnClick_Data() {}
+
+func (*OnClick_Card) isOnClick_Data() {}
+
+// Represents an `onClick` event that opens a hyperlink.
+//
+// [Google Workspace Add-ons and Chat
+// apps](https://developers.google.com/workspace/extend):
+type OpenLink struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// The URL to open.
+	Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"`
+	// How to open a link.
+	//
+	// [Google Workspace
+	// Add-ons](https://developers.google.com/workspace/add-ons):
+	OpenAs OpenLink_OpenAs `protobuf:"varint,2,opt,name=open_as,json=openAs,proto3,enum=google.apps.card.v1.OpenLink_OpenAs" json:"open_as,omitempty"`
+	// Whether the client forgets about a link after opening it, or observes it
+	// until the window closes.
+	//
+	// [Google Workspace
+	// Add-ons](https://developers.google.com/workspace/add-ons):
+	OnClose OpenLink_OnClose `protobuf:"varint,3,opt,name=on_close,json=onClose,proto3,enum=google.apps.card.v1.OpenLink_OnClose" json:"on_close,omitempty"`
+}
+
+func (x *OpenLink) Reset() {
+	*x = OpenLink{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_apps_card_v1_card_proto_msgTypes[20]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *OpenLink) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*OpenLink) ProtoMessage() {}
+
+func (x *OpenLink) ProtoReflect() protoreflect.Message {
+	mi := &file_google_apps_card_v1_card_proto_msgTypes[20]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use OpenLink.ProtoReflect.Descriptor instead.
+func (*OpenLink) Descriptor() ([]byte, []int) {
+	return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{20}
+}
+
+func (x *OpenLink) GetUrl() string {
+	if x != nil {
+		return x.Url
+	}
+	return ""
+}
+
+func (x *OpenLink) GetOpenAs() OpenLink_OpenAs {
+	if x != nil {
+		return x.OpenAs
+	}
+	return OpenLink_FULL_SIZE
+}
+
+func (x *OpenLink) GetOnClose() OpenLink_OnClose {
+	if x != nil {
+		return x.OnClose
+	}
+	return OpenLink_NOTHING
+}
+
+// An action that describes the behavior when the form is submitted.
+// For example, you can invoke an Apps Script script to handle the form.
+// If the action is triggered, the form values are sent to the server.
+//
+// [Google Workspace Add-ons and Chat
+// apps](https://developers.google.com/workspace/extend):
+type Action struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// A custom function to invoke when the containing element is
+	// clicked or othrwise activated.
+	//
+	// For example usage, see [Read form
+	// data](https://developers.google.com/workspace/chat/read-form-data).
+	Function string `protobuf:"bytes,1,opt,name=function,proto3" json:"function,omitempty"`
+	// List of action parameters.
+	Parameters []*Action_ActionParameter `protobuf:"bytes,2,rep,name=parameters,proto3" json:"parameters,omitempty"`
+	// Specifies the loading indicator that the action displays while
+	// making the call to the action.
+	LoadIndicator Action_LoadIndicator `protobuf:"varint,3,opt,name=load_indicator,json=loadIndicator,proto3,enum=google.apps.card.v1.Action_LoadIndicator" json:"load_indicator,omitempty"`
+	// Indicates whether form values persist after the action. The default value
+	// is `false`.
+	//
+	// If `true`, form values remain after the action is triggered. To let the
+	// user make changes while the action is being processed, set
+	// [`LoadIndicator`](https://developers.google.com/workspace/add-ons/reference/rpc/google.apps.card.v1#loadindicator)
+	// to `NONE`. For [card
+	// messages](https://developers.google.com/workspace/chat/api/guides/v1/messages/create#create)
+	// in Chat apps, you must also set the action's
+	// [`ResponseType`](https://developers.google.com/workspace/chat/api/reference/rest/v1/spaces.messages#responsetype)
+	// to `UPDATE_MESSAGE` and use the same
+	// [`card_id`](https://developers.google.com/workspace/chat/api/reference/rest/v1/spaces.messages#CardWithId)
+	// from the card that contained the action.
+	//
+	// If `false`, the form values are cleared when the action is triggered.
+	// To prevent the user from making changes while the action is being
+	// processed, set
+	// [`LoadIndicator`](https://developers.google.com/workspace/add-ons/reference/rpc/google.apps.card.v1#loadindicator)
+	// to `SPINNER`.
+	PersistValues bool `protobuf:"varint,4,opt,name=persist_values,json=persistValues,proto3" json:"persist_values,omitempty"`
+	// Optional. Required when opening a
+	// [dialog](https://developers.google.com/workspace/chat/dialogs).
+	//
+	// What to do in response to an interaction with a user, such as a user
+	// clicking a button in a card message.
+	//
+	// If unspecified, the app responds by executing an `action`—like opening a
+	// link or running a function—as normal.
+	//
+	// By specifying an `interaction`, the app can respond in special interactive
+	// ways. For example, by setting `interaction` to `OPEN_DIALOG`, the app can
+	// open a [dialog](https://developers.google.com/workspace/chat/dialogs). When
+	// specified, a loading indicator isn't shown. If specified for
+	// an add-on, the entire card is stripped and nothing is shown in the client.
+	//
+	// [Google Chat apps](https://developers.google.com/workspace/chat):
+	Interaction Action_Interaction `protobuf:"varint,5,opt,name=interaction,proto3,enum=google.apps.card.v1.Action_Interaction" json:"interaction,omitempty"`
+}
+
+func (x *Action) Reset() {
+	*x = Action{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_apps_card_v1_card_proto_msgTypes[21]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *Action) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Action) ProtoMessage() {}
+
+func (x *Action) ProtoReflect() protoreflect.Message {
+	mi := &file_google_apps_card_v1_card_proto_msgTypes[21]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use Action.ProtoReflect.Descriptor instead.
+func (*Action) Descriptor() ([]byte, []int) {
+	return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{21}
+}
+
+func (x *Action) GetFunction() string {
+	if x != nil {
+		return x.Function
+	}
+	return ""
+}
+
+func (x *Action) GetParameters() []*Action_ActionParameter {
+	if x != nil {
+		return x.Parameters
+	}
+	return nil
+}
+
+func (x *Action) GetLoadIndicator() Action_LoadIndicator {
+	if x != nil {
+		return x.LoadIndicator
+	}
+	return Action_SPINNER
+}
+
+func (x *Action) GetPersistValues() bool {
+	if x != nil {
+		return x.PersistValues
+	}
+	return false
+}
+
+func (x *Action) GetInteraction() Action_Interaction {
+	if x != nil {
+		return x.Interaction
+	}
+	return Action_INTERACTION_UNSPECIFIED
+}
+
+// Represents a card header. For an example in Google Chat apps, see [Add a
+// header](https://developers.google.com/workspace/chat/design-components-card-dialog#add_a_header).
+//
+// [Google Workspace Add-ons and Chat
+// apps](https://developers.google.com/workspace/extend):
+type Card_CardHeader struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// Required. The title of the card header.
+	// The header has a fixed height: if both a
+	// title and subtitle are specified, each takes up one line. If only the
+	// title is specified, it takes up both lines.
+	Title string `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"`
+	// The subtitle of the card header. If specified, appears on its own line
+	// below the `title`.
+	Subtitle string `protobuf:"bytes,2,opt,name=subtitle,proto3" json:"subtitle,omitempty"`
+	// The shape used to crop the image.
+	//
+	// [Google Workspace Add-ons and Chat
+	// apps](https://developers.google.com/workspace/extend):
+	ImageType Widget_ImageType `protobuf:"varint,3,opt,name=image_type,json=imageType,proto3,enum=google.apps.card.v1.Widget_ImageType" json:"image_type,omitempty"`
+	// The HTTPS URL of the image in the card header.
+	ImageUrl string `protobuf:"bytes,4,opt,name=image_url,json=imageUrl,proto3" json:"image_url,omitempty"`
+	// The alternative text of this image that's used for accessibility.
+	ImageAltText string `protobuf:"bytes,5,opt,name=image_alt_text,json=imageAltText,proto3" json:"image_alt_text,omitempty"`
+}
+
+func (x *Card_CardHeader) Reset() {
+	*x = Card_CardHeader{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_apps_card_v1_card_proto_msgTypes[22]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *Card_CardHeader) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Card_CardHeader) ProtoMessage() {}
+
+func (x *Card_CardHeader) ProtoReflect() protoreflect.Message {
+	mi := &file_google_apps_card_v1_card_proto_msgTypes[22]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use Card_CardHeader.ProtoReflect.Descriptor instead.
+func (*Card_CardHeader) Descriptor() ([]byte, []int) {
+	return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{0, 0}
+}
+
+func (x *Card_CardHeader) GetTitle() string {
+	if x != nil {
+		return x.Title
+	}
+	return ""
+}
+
+func (x *Card_CardHeader) GetSubtitle() string {
+	if x != nil {
+		return x.Subtitle
+	}
+	return ""
+}
+
+func (x *Card_CardHeader) GetImageType() Widget_ImageType {
+	if x != nil {
+		return x.ImageType
+	}
+	return Widget_SQUARE
+}
+
+func (x *Card_CardHeader) GetImageUrl() string {
+	if x != nil {
+		return x.ImageUrl
+	}
+	return ""
+}
+
+func (x *Card_CardHeader) GetImageAltText() string {
+	if x != nil {
+		return x.ImageAltText
+	}
+	return ""
+}
+
+// A section contains a collection of widgets that are rendered
+// vertically in the order that they're specified.
+//
+// [Google Workspace Add-ons and Chat
+// apps](https://developers.google.com/workspace/extend):
+type Card_Section struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// Text that appears at the top of a section.
+	// Supports simple HTML formatted text. For more information
+	// about formatting text, see
+	// [Formatting text in Google Chat
+	// apps](https://developers.google.com/workspace/chat/format-messages#card-formatting)
+	// and
+	// [Formatting
+	// text in Google Workspace
+	// Add-ons](https://developers.google.com/apps-script/add-ons/concepts/widgets#text_formatting).
+	Header string `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"`
+	// All the widgets in the section.
+	// Must contain at least one widget.
+	Widgets []*Widget `protobuf:"bytes,2,rep,name=widgets,proto3" json:"widgets,omitempty"`
+	// Indicates whether this section is collapsible.
+	//
+	// Collapsible sections hide some or all widgets, but users can expand the
+	// section to reveal the hidden widgets by clicking **Show more**. Users
+	// can hide the widgets again by clicking **Show less**.
+	//
+	// To determine which widgets are hidden, specify
+	// `uncollapsibleWidgetsCount`.
+	Collapsible bool `protobuf:"varint,5,opt,name=collapsible,proto3" json:"collapsible,omitempty"`
+	// The number of uncollapsible widgets which remain visible even when a
+	// section is collapsed.
+	//
+	// For example, when a section
+	// contains five widgets and the `uncollapsibleWidgetsCount` is set to `2`,
+	// the first two widgets are always shown and the last three are collapsed
+	// by default. The `uncollapsibleWidgetsCount` is taken into account only
+	// when `collapsible` is `true`.
+	UncollapsibleWidgetsCount int32 `protobuf:"varint,6,opt,name=uncollapsible_widgets_count,json=uncollapsibleWidgetsCount,proto3" json:"uncollapsible_widgets_count,omitempty"`
+}
+
+func (x *Card_Section) Reset() {
+	*x = Card_Section{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_apps_card_v1_card_proto_msgTypes[23]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *Card_Section) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Card_Section) ProtoMessage() {}
+
+func (x *Card_Section) ProtoReflect() protoreflect.Message {
+	mi := &file_google_apps_card_v1_card_proto_msgTypes[23]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use Card_Section.ProtoReflect.Descriptor instead.
+func (*Card_Section) Descriptor() ([]byte, []int) {
+	return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{0, 1}
+}
+
+func (x *Card_Section) GetHeader() string {
+	if x != nil {
+		return x.Header
+	}
+	return ""
+}
+
+func (x *Card_Section) GetWidgets() []*Widget {
+	if x != nil {
+		return x.Widgets
+	}
+	return nil
+}
+
+func (x *Card_Section) GetCollapsible() bool {
+	if x != nil {
+		return x.Collapsible
+	}
+	return false
+}
+
+func (x *Card_Section) GetUncollapsibleWidgetsCount() int32 {
+	if x != nil {
+		return x.UncollapsibleWidgetsCount
+	}
+	return 0
+}
+
+// A card action is the action associated with the card. For example,
+// an invoice card might include actions such as delete invoice, email
+// invoice, or open the invoice in a browser.
+//
+// [Google Workspace
+// Add-ons](https://developers.google.com/workspace/add-ons):
+type Card_CardAction struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// The label that displays as the action menu item.
+	ActionLabel string `protobuf:"bytes,1,opt,name=action_label,json=actionLabel,proto3" json:"action_label,omitempty"`
+	// The `onClick` action for this action item.
+	OnClick *OnClick `protobuf:"bytes,2,opt,name=on_click,json=onClick,proto3" json:"on_click,omitempty"`
+}
+
+func (x *Card_CardAction) Reset() {
+	*x = Card_CardAction{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_apps_card_v1_card_proto_msgTypes[24]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *Card_CardAction) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Card_CardAction) ProtoMessage() {}
+
+func (x *Card_CardAction) ProtoReflect() protoreflect.Message {
+	mi := &file_google_apps_card_v1_card_proto_msgTypes[24]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use Card_CardAction.ProtoReflect.Descriptor instead.
+func (*Card_CardAction) Descriptor() ([]byte, []int) {
+	return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{0, 2}
+}
+
+func (x *Card_CardAction) GetActionLabel() string {
+	if x != nil {
+		return x.ActionLabel
+	}
+	return ""
+}
+
+func (x *Card_CardAction) GetOnClick() *OnClick {
+	if x != nil {
+		return x.OnClick
+	}
+	return nil
+}
+
+// A persistent (sticky) footer that that appears at the bottom of the card.
+//
+// Setting `fixedFooter` without specifying a `primaryButton` or a
+// `secondaryButton` causes an error.
+//
+// For Chat apps, you can use fixed footers in
+// [dialogs](https://developers.google.com/workspace/chat/dialogs), but not
+// [card
+// messages](https://developers.google.com/workspace/chat/create-messages#create).
+// For an example in Google Chat apps, see [Add a persistent
+// footer](https://developers.google.com/workspace/chat/design-components-card-dialog#add_a_persistent_footer).
+//
+// [Google Workspace Add-ons and Chat
+// apps](https://developers.google.com/workspace/extend):
+type Card_CardFixedFooter struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// The primary button of the fixed footer. The button must be a text button
+	// with text and color set.
+	PrimaryButton *Button `protobuf:"bytes,1,opt,name=primary_button,json=primaryButton,proto3" json:"primary_button,omitempty"`
+	// The secondary button of the fixed footer.  The button must be a text
+	// button with text and color set.
+	// If `secondaryButton` is set, you must also set `primaryButton`.
+	SecondaryButton *Button `protobuf:"bytes,2,opt,name=secondary_button,json=secondaryButton,proto3" json:"secondary_button,omitempty"`
+}
+
+func (x *Card_CardFixedFooter) Reset() {
+	*x = Card_CardFixedFooter{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_apps_card_v1_card_proto_msgTypes[25]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *Card_CardFixedFooter) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Card_CardFixedFooter) ProtoMessage() {}
+
+func (x *Card_CardFixedFooter) ProtoReflect() protoreflect.Message {
+	mi := &file_google_apps_card_v1_card_proto_msgTypes[25]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use Card_CardFixedFooter.ProtoReflect.Descriptor instead.
+func (*Card_CardFixedFooter) Descriptor() ([]byte, []int) {
+	return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{0, 3}
+}
+
+func (x *Card_CardFixedFooter) GetPrimaryButton() *Button {
+	if x != nil {
+		return x.PrimaryButton
+	}
+	return nil
+}
+
+func (x *Card_CardFixedFooter) GetSecondaryButton() *Button {
+	if x != nil {
+		return x.SecondaryButton
+	}
+	return nil
+}
+
+// Either a toggle-style switch or a checkbox inside a `decoratedText` widget.
+//
+// [Google Workspace Add-ons and Chat
+// apps](https://developers.google.com/workspace/extend):
+//
+// Only supported in the `decoratedText` widget.
+type DecoratedText_SwitchControl struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// The name by which the switch widget is identified in a form input event.
+	//
+	// For details about working with form inputs, see [Receive form
+	// data](https://developers.google.com/workspace/chat/read-form-data).
+	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	// The value entered by a user, returned as part of a form input event.
+	//
+	// For details about working with form inputs, see [Receive form
+	// data](https://developers.google.com/workspace/chat/read-form-data).
+	Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
+	// When `true`, the switch is selected.
+	Selected bool `protobuf:"varint,3,opt,name=selected,proto3" json:"selected,omitempty"`
+	// The action to perform when the switch state is changed, such as what
+	//
+	//	function to run.
+	OnChangeAction *Action `protobuf:"bytes,4,opt,name=on_change_action,json=onChangeAction,proto3" json:"on_change_action,omitempty"`
+	// How the switch appears in the user interface.
+	//
+	// [Google Workspace Add-ons
+	// and Chat apps](https://developers.google.com/workspace/extend):
+	ControlType DecoratedText_SwitchControl_ControlType `protobuf:"varint,5,opt,name=control_type,json=controlType,proto3,enum=google.apps.card.v1.DecoratedText_SwitchControl_ControlType" json:"control_type,omitempty"`
+}
+
+func (x *DecoratedText_SwitchControl) Reset() {
+	*x = DecoratedText_SwitchControl{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_apps_card_v1_card_proto_msgTypes[26]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *DecoratedText_SwitchControl) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DecoratedText_SwitchControl) ProtoMessage() {}
+
+func (x *DecoratedText_SwitchControl) ProtoReflect() protoreflect.Message {
+	mi := &file_google_apps_card_v1_card_proto_msgTypes[26]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use DecoratedText_SwitchControl.ProtoReflect.Descriptor instead.
+func (*DecoratedText_SwitchControl) Descriptor() ([]byte, []int) {
+	return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{5, 0}
+}
+
+func (x *DecoratedText_SwitchControl) GetName() string {
+	if x != nil {
+		return x.Name
+	}
+	return ""
+}
+
+func (x *DecoratedText_SwitchControl) GetValue() string {
+	if x != nil {
+		return x.Value
+	}
+	return ""
+}
+
+func (x *DecoratedText_SwitchControl) GetSelected() bool {
+	if x != nil {
+		return x.Selected
+	}
+	return false
+}
+
+func (x *DecoratedText_SwitchControl) GetOnChangeAction() *Action {
+	if x != nil {
+		return x.OnChangeAction
+	}
+	return nil
+}
+
+func (x *DecoratedText_SwitchControl) GetControlType() DecoratedText_SwitchControl_ControlType {
+	if x != nil {
+		return x.ControlType
+	}
+	return DecoratedText_SwitchControl_SWITCH
+}
+
+// One suggested value that users can enter in a text input field.
+//
+// [Google Workspace Add-ons and Chat
+// apps](https://developers.google.com/workspace/extend):
+type Suggestions_SuggestionItem struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// Types that are assignable to Content:
+	//
+	//	*Suggestions_SuggestionItem_Text
+	Content isSuggestions_SuggestionItem_Content `protobuf_oneof:"content"`
+}
+
+func (x *Suggestions_SuggestionItem) Reset() {
+	*x = Suggestions_SuggestionItem{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_apps_card_v1_card_proto_msgTypes[27]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *Suggestions_SuggestionItem) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Suggestions_SuggestionItem) ProtoMessage() {}
+
+func (x *Suggestions_SuggestionItem) ProtoReflect() protoreflect.Message {
+	mi := &file_google_apps_card_v1_card_proto_msgTypes[27]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use Suggestions_SuggestionItem.ProtoReflect.Descriptor instead.
+func (*Suggestions_SuggestionItem) Descriptor() ([]byte, []int) {
+	return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{7, 0}
+}
+
+func (m *Suggestions_SuggestionItem) GetContent() isSuggestions_SuggestionItem_Content {
+	if m != nil {
+		return m.Content
+	}
+	return nil
+}
+
+func (x *Suggestions_SuggestionItem) GetText() string {
+	if x, ok := x.GetContent().(*Suggestions_SuggestionItem_Text); ok {
+		return x.Text
+	}
+	return ""
+}
+
+type isSuggestions_SuggestionItem_Content interface {
+	isSuggestions_SuggestionItem_Content()
+}
+
+type Suggestions_SuggestionItem_Text struct {
+	// The value of a suggested input to a text input field. This is
+	// equivalent to what users enter themselves.
+	Text string `protobuf:"bytes,1,opt,name=text,proto3,oneof"`
+}
+
+func (*Suggestions_SuggestionItem_Text) isSuggestions_SuggestionItem_Content() {}
+
+// An item that users can select in a selection input, such as a checkbox
+// or switch.
+//
+// [Google Workspace Add-ons and Chat
+// apps](https://developers.google.com/workspace/extend):
+type SelectionInput_SelectionItem struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// The text that identifies or describes the item to users.
+	Text string `protobuf:"bytes,1,opt,name=text,proto3" json:"text,omitempty"`
+	// The value associated with this item. The client should use this as a form
+	// input value.
+	//
+	// For details about working with form inputs, see [Receive form
+	// data](https://developers.google.com/workspace/chat/read-form-data).
+	Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
+	// Whether the item is selected by default. If the selection input only
+	// accepts one value (such as for radio buttons or a dropdown menu), only
+	// set this field for one item.
+	Selected bool `protobuf:"varint,3,opt,name=selected,proto3" json:"selected,omitempty"`
+	// For multiselect menus, the URL for the icon displayed next to
+	// the item's `text` field. Supports PNG and JPEG files. Must be an `HTTPS`
+	// URL. For example,
+	// `https://developers.google.com/workspace/chat/images/quickstart-app-avatar.png`.
+	StartIconUri string `protobuf:"bytes,4,opt,name=start_icon_uri,json=startIconUri,proto3" json:"start_icon_uri,omitempty"`
+	// For multiselect menus, a text description or label that's
+	// displayed below the item's `text` field.
+	BottomText string `protobuf:"bytes,5,opt,name=bottom_text,json=bottomText,proto3" json:"bottom_text,omitempty"`
+}
+
+func (x *SelectionInput_SelectionItem) Reset() {
+	*x = SelectionInput_SelectionItem{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_apps_card_v1_card_proto_msgTypes[28]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *SelectionInput_SelectionItem) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SelectionInput_SelectionItem) ProtoMessage() {}
+
+func (x *SelectionInput_SelectionItem) ProtoReflect() protoreflect.Message {
+	mi := &file_google_apps_card_v1_card_proto_msgTypes[28]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use SelectionInput_SelectionItem.ProtoReflect.Descriptor instead.
+func (*SelectionInput_SelectionItem) Descriptor() ([]byte, []int) {
+	return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{9, 0}
+}
+
+func (x *SelectionInput_SelectionItem) GetText() string {
+	if x != nil {
+		return x.Text
+	}
+	return ""
+}
+
+func (x *SelectionInput_SelectionItem) GetValue() string {
+	if x != nil {
+		return x.Value
+	}
+	return ""
+}
+
+func (x *SelectionInput_SelectionItem) GetSelected() bool {
+	if x != nil {
+		return x.Selected
+	}
+	return false
+}
+
+func (x *SelectionInput_SelectionItem) GetStartIconUri() string {
+	if x != nil {
+		return x.StartIconUri
+	}
+	return ""
+}
+
+func (x *SelectionInput_SelectionItem) GetBottomText() string {
+	if x != nil {
+		return x.BottomText
+	}
+	return ""
+}
+
+// For a
+// [`SelectionInput`][google.apps.card.v1.SelectionInput] widget that uses a
+// multiselect menu, a data source from Google Workspace. Used to populate
+// items in a multiselect menu.
+//
+// [Google Chat apps](https://developers.google.com/workspace/chat):
+type SelectionInput_PlatformDataSource struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// The data source.
+	//
+	// Types that are assignable to DataSource:
+	//
+	//	*SelectionInput_PlatformDataSource_CommonDataSource_
+	DataSource isSelectionInput_PlatformDataSource_DataSource `protobuf_oneof:"data_source"`
+}
+
+func (x *SelectionInput_PlatformDataSource) Reset() {
+	*x = SelectionInput_PlatformDataSource{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_apps_card_v1_card_proto_msgTypes[29]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *SelectionInput_PlatformDataSource) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SelectionInput_PlatformDataSource) ProtoMessage() {}
+
+func (x *SelectionInput_PlatformDataSource) ProtoReflect() protoreflect.Message {
+	mi := &file_google_apps_card_v1_card_proto_msgTypes[29]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use SelectionInput_PlatformDataSource.ProtoReflect.Descriptor instead.
+func (*SelectionInput_PlatformDataSource) Descriptor() ([]byte, []int) {
+	return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{9, 1}
+}
+
+func (m *SelectionInput_PlatformDataSource) GetDataSource() isSelectionInput_PlatformDataSource_DataSource {
+	if m != nil {
+		return m.DataSource
+	}
+	return nil
+}
+
+func (x *SelectionInput_PlatformDataSource) GetCommonDataSource() SelectionInput_PlatformDataSource_CommonDataSource {
+	if x, ok := x.GetDataSource().(*SelectionInput_PlatformDataSource_CommonDataSource_); ok {
+		return x.CommonDataSource
+	}
+	return SelectionInput_PlatformDataSource_UNKNOWN
+}
+
+type isSelectionInput_PlatformDataSource_DataSource interface {
+	isSelectionInput_PlatformDataSource_DataSource()
+}
+
+type SelectionInput_PlatformDataSource_CommonDataSource_ struct {
+	// A data source shared by all Google Workspace applications, such as
+	// users in a Google Workspace organization.
+	CommonDataSource SelectionInput_PlatformDataSource_CommonDataSource `protobuf:"varint,1,opt,name=common_data_source,json=commonDataSource,proto3,enum=google.apps.card.v1.SelectionInput_PlatformDataSource_CommonDataSource,oneof"`
+}
+
+func (*SelectionInput_PlatformDataSource_CommonDataSource_) isSelectionInput_PlatformDataSource_DataSource() {
+}
+
+// Represents an item in a grid layout. Items can contain text, an image, or
+// both text and an image.
+//
+// [Google Workspace Add-ons and Chat
+// apps](https://developers.google.com/workspace/extend):
+type Grid_GridItem struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// A user-specified identifier for this grid item. This identifier is
+	// returned in the parent grid's `onClick` callback parameters.
+	Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+	// The image that displays in the grid item.
+	Image *ImageComponent `protobuf:"bytes,2,opt,name=image,proto3" json:"image,omitempty"`
+	// The grid item's title.
+	Title string `protobuf:"bytes,3,opt,name=title,proto3" json:"title,omitempty"`
+	// The grid item's subtitle.
+	Subtitle string `protobuf:"bytes,4,opt,name=subtitle,proto3" json:"subtitle,omitempty"`
+	// The layout to use for the grid item.
+	Layout Grid_GridItem_GridItemLayout `protobuf:"varint,9,opt,name=layout,proto3,enum=google.apps.card.v1.Grid_GridItem_GridItemLayout" json:"layout,omitempty"`
+}
+
+func (x *Grid_GridItem) Reset() {
+	*x = Grid_GridItem{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_apps_card_v1_card_proto_msgTypes[30]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *Grid_GridItem) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Grid_GridItem) ProtoMessage() {}
+
+func (x *Grid_GridItem) ProtoReflect() protoreflect.Message {
+	mi := &file_google_apps_card_v1_card_proto_msgTypes[30]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use Grid_GridItem.ProtoReflect.Descriptor instead.
+func (*Grid_GridItem) Descriptor() ([]byte, []int) {
+	return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{17, 0}
+}
+
+func (x *Grid_GridItem) GetId() string {
+	if x != nil {
+		return x.Id
+	}
+	return ""
+}
+
+func (x *Grid_GridItem) GetImage() *ImageComponent {
+	if x != nil {
+		return x.Image
+	}
+	return nil
+}
+
+func (x *Grid_GridItem) GetTitle() string {
+	if x != nil {
+		return x.Title
+	}
+	return ""
+}
+
+func (x *Grid_GridItem) GetSubtitle() string {
+	if x != nil {
+		return x.Subtitle
+	}
+	return ""
+}
+
+func (x *Grid_GridItem) GetLayout() Grid_GridItem_GridItemLayout {
+	if x != nil {
+		return x.Layout
+	}
+	return Grid_GridItem_GRID_ITEM_LAYOUT_UNSPECIFIED
+}
+
+// A column.
+//
+// [Google Workspace Add-ons and Chat
+// apps](https://developers.google.com/workspace/extend):
+// Columns for Google Workspace Add-ons are in
+// Developer Preview.
+type Columns_Column struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// Specifies how a column fills the width of the card.
+	HorizontalSizeStyle Columns_Column_HorizontalSizeStyle `protobuf:"varint,1,opt,name=horizontal_size_style,json=horizontalSizeStyle,proto3,enum=google.apps.card.v1.Columns_Column_HorizontalSizeStyle" json:"horizontal_size_style,omitempty"`
+	// Specifies whether widgets align to the left, right, or center of a
+	// column.
+	HorizontalAlignment Widget_HorizontalAlignment `protobuf:"varint,2,opt,name=horizontal_alignment,json=horizontalAlignment,proto3,enum=google.apps.card.v1.Widget_HorizontalAlignment" json:"horizontal_alignment,omitempty"`
+	// Specifies whether widgets align to the top, bottom, or center of a
+	// column.
+	VerticalAlignment Columns_Column_VerticalAlignment `protobuf:"varint,3,opt,name=vertical_alignment,json=verticalAlignment,proto3,enum=google.apps.card.v1.Columns_Column_VerticalAlignment" json:"vertical_alignment,omitempty"`
+	// An array of widgets included in a column. Widgets appear in the order
+	// that they are specified.
+	Widgets []*Columns_Column_Widgets `protobuf:"bytes,4,rep,name=widgets,proto3" json:"widgets,omitempty"`
+}
+
+func (x *Columns_Column) Reset() {
+	*x = Columns_Column{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_apps_card_v1_card_proto_msgTypes[31]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *Columns_Column) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Columns_Column) ProtoMessage() {}
+
+func (x *Columns_Column) ProtoReflect() protoreflect.Message {
+	mi := &file_google_apps_card_v1_card_proto_msgTypes[31]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use Columns_Column.ProtoReflect.Descriptor instead.
+func (*Columns_Column) Descriptor() ([]byte, []int) {
+	return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{18, 0}
+}
+
+func (x *Columns_Column) GetHorizontalSizeStyle() Columns_Column_HorizontalSizeStyle {
+	if x != nil {
+		return x.HorizontalSizeStyle
+	}
+	return Columns_Column_HORIZONTAL_SIZE_STYLE_UNSPECIFIED
+}
+
+func (x *Columns_Column) GetHorizontalAlignment() Widget_HorizontalAlignment {
+	if x != nil {
+		return x.HorizontalAlignment
+	}
+	return Widget_HORIZONTAL_ALIGNMENT_UNSPECIFIED
+}
+
+func (x *Columns_Column) GetVerticalAlignment() Columns_Column_VerticalAlignment {
+	if x != nil {
+		return x.VerticalAlignment
+	}
+	return Columns_Column_VERTICAL_ALIGNMENT_UNSPECIFIED
+}
+
+func (x *Columns_Column) GetWidgets() []*Columns_Column_Widgets {
+	if x != nil {
+		return x.Widgets
+	}
+	return nil
+}
+
+// The supported widgets that you can include in a column.
+//
+// [Google Workspace Add-ons and Chat
+// apps](https://developers.google.com/workspace/extend):
+// Columns for Google Workspace Add-ons are in
+// Developer Preview.
+type Columns_Column_Widgets struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// Types that are assignable to Data:
+	//
+	//	*Columns_Column_Widgets_TextParagraph
+	//	*Columns_Column_Widgets_Image
+	//	*Columns_Column_Widgets_DecoratedText
+	//	*Columns_Column_Widgets_ButtonList
+	//	*Columns_Column_Widgets_TextInput
+	//	*Columns_Column_Widgets_SelectionInput
+	//	*Columns_Column_Widgets_DateTimePicker
+	Data isColumns_Column_Widgets_Data `protobuf_oneof:"data"`
+}
+
+func (x *Columns_Column_Widgets) Reset() {
+	*x = Columns_Column_Widgets{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_apps_card_v1_card_proto_msgTypes[32]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *Columns_Column_Widgets) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Columns_Column_Widgets) ProtoMessage() {}
+
+func (x *Columns_Column_Widgets) ProtoReflect() protoreflect.Message {
+	mi := &file_google_apps_card_v1_card_proto_msgTypes[32]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use Columns_Column_Widgets.ProtoReflect.Descriptor instead.
+func (*Columns_Column_Widgets) Descriptor() ([]byte, []int) {
+	return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{18, 0, 0}
+}
+
+func (m *Columns_Column_Widgets) GetData() isColumns_Column_Widgets_Data {
+	if m != nil {
+		return m.Data
+	}
+	return nil
+}
+
+func (x *Columns_Column_Widgets) GetTextParagraph() *TextParagraph {
+	if x, ok := x.GetData().(*Columns_Column_Widgets_TextParagraph); ok {
+		return x.TextParagraph
+	}
+	return nil
+}
+
+func (x *Columns_Column_Widgets) GetImage() *Image {
+	if x, ok := x.GetData().(*Columns_Column_Widgets_Image); ok {
+		return x.Image
+	}
+	return nil
+}
+
+func (x *Columns_Column_Widgets) GetDecoratedText() *DecoratedText {
+	if x, ok := x.GetData().(*Columns_Column_Widgets_DecoratedText); ok {
+		return x.DecoratedText
+	}
+	return nil
+}
+
+func (x *Columns_Column_Widgets) GetButtonList() *ButtonList {
+	if x, ok := x.GetData().(*Columns_Column_Widgets_ButtonList); ok {
+		return x.ButtonList
+	}
+	return nil
+}
+
+func (x *Columns_Column_Widgets) GetTextInput() *TextInput {
+	if x, ok := x.GetData().(*Columns_Column_Widgets_TextInput); ok {
+		return x.TextInput
+	}
+	return nil
+}
+
+func (x *Columns_Column_Widgets) GetSelectionInput() *SelectionInput {
+	if x, ok := x.GetData().(*Columns_Column_Widgets_SelectionInput); ok {
+		return x.SelectionInput
+	}
+	return nil
+}
+
+func (x *Columns_Column_Widgets) GetDateTimePicker() *DateTimePicker {
+	if x, ok := x.GetData().(*Columns_Column_Widgets_DateTimePicker); ok {
+		return x.DateTimePicker
+	}
+	return nil
+}
+
+type isColumns_Column_Widgets_Data interface {
+	isColumns_Column_Widgets_Data()
+}
+
+type Columns_Column_Widgets_TextParagraph struct {
+	// [TextParagraph][google.apps.card.v1.TextParagraph] widget.
+	TextParagraph *TextParagraph `protobuf:"bytes,1,opt,name=text_paragraph,json=textParagraph,proto3,oneof"`
+}
+
+type Columns_Column_Widgets_Image struct {
+	// [Image][google.apps.card.v1.Image] widget.
+	Image *Image `protobuf:"bytes,2,opt,name=image,proto3,oneof"`
+}
+
+type Columns_Column_Widgets_DecoratedText struct {
+	// [DecoratedText][google.apps.card.v1.DecoratedText] widget.
+	DecoratedText *DecoratedText `protobuf:"bytes,3,opt,name=decorated_text,json=decoratedText,proto3,oneof"`
+}
+
+type Columns_Column_Widgets_ButtonList struct {
+	// [ButtonList][google.apps.card.v1.ButtonList] widget.
+	ButtonList *ButtonList `protobuf:"bytes,4,opt,name=button_list,json=buttonList,proto3,oneof"`
+}
+
+type Columns_Column_Widgets_TextInput struct {
+	// [TextInput][google.apps.card.v1.TextInput] widget.
+	TextInput *TextInput `protobuf:"bytes,5,opt,name=text_input,json=textInput,proto3,oneof"`
+}
+
+type Columns_Column_Widgets_SelectionInput struct {
+	// [SelectionInput][google.apps.card.v1.SelectionInput] widget.
+	SelectionInput *SelectionInput `protobuf:"bytes,6,opt,name=selection_input,json=selectionInput,proto3,oneof"`
+}
+
+type Columns_Column_Widgets_DateTimePicker struct {
+	// [DateTimePicker][google.apps.card.v1.DateTimePicker] widget.
+	DateTimePicker *DateTimePicker `protobuf:"bytes,7,opt,name=date_time_picker,json=dateTimePicker,proto3,oneof"`
+}
+
+func (*Columns_Column_Widgets_TextParagraph) isColumns_Column_Widgets_Data() {}
+
+func (*Columns_Column_Widgets_Image) isColumns_Column_Widgets_Data() {}
+
+func (*Columns_Column_Widgets_DecoratedText) isColumns_Column_Widgets_Data() {}
+
+func (*Columns_Column_Widgets_ButtonList) isColumns_Column_Widgets_Data() {}
+
+func (*Columns_Column_Widgets_TextInput) isColumns_Column_Widgets_Data() {}
+
+func (*Columns_Column_Widgets_SelectionInput) isColumns_Column_Widgets_Data() {}
+
+func (*Columns_Column_Widgets_DateTimePicker) isColumns_Column_Widgets_Data() {}
+
+// List of string parameters to supply when the action method is invoked.
+// For example, consider three snooze buttons: snooze now, snooze one day,
+// or snooze next week. You might use `action method = snooze()`, passing the
+// snooze type and snooze time in the list of string parameters.
+//
+// To learn more, see
+// [`CommonEventObject`](https://developers.google.com/workspace/chat/api/reference/rest/v1/Event#commoneventobject).
+//
+// [Google Workspace Add-ons and Chat
+// apps](https://developers.google.com/workspace/extend):
+type Action_ActionParameter struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// The name of the parameter for the action script.
+	Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
+	// The value of the parameter.
+	Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
+}
+
+func (x *Action_ActionParameter) Reset() {
+	*x = Action_ActionParameter{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_google_apps_card_v1_card_proto_msgTypes[33]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *Action_ActionParameter) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Action_ActionParameter) ProtoMessage() {}
+
+func (x *Action_ActionParameter) ProtoReflect() protoreflect.Message {
+	mi := &file_google_apps_card_v1_card_proto_msgTypes[33]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use Action_ActionParameter.ProtoReflect.Descriptor instead.
+func (*Action_ActionParameter) Descriptor() ([]byte, []int) {
+	return file_google_apps_card_v1_card_proto_rawDescGZIP(), []int{21, 0}
+}
+
+func (x *Action_ActionParameter) GetKey() string {
+	if x != nil {
+		return x.Key
+	}
+	return ""
+}
+
+func (x *Action_ActionParameter) GetValue() string {
+	if x != nil {
+		return x.Value
+	}
+	return ""
+}
+
+var File_google_apps_card_v1_card_proto protoreflect.FileDescriptor
+
+var file_google_apps_card_v1_card_proto_rawDesc = []byte{
+	0x0a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x63, 0x61,
+	0x72, 0x64, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x12, 0x13, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61,
+	0x72, 0x64, 0x2e, 0x76, 0x31, 0x1a, 0x17, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x74, 0x79,
+	0x70, 0x65, 0x2f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xd0,
+	0x0a, 0x0a, 0x04, 0x43, 0x61, 0x72, 0x64, 0x12, 0x3c, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65,
+	0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
+	0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61,
+	0x72, 0x64, 0x2e, 0x43, 0x61, 0x72, 0x64, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x06, 0x68,
+	0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x3d, 0x0a, 0x08, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+	0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
+	0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61,
+	0x72, 0x64, 0x2e, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x73, 0x65, 0x63, 0x74,
+	0x69, 0x6f, 0x6e, 0x73, 0x12, 0x5a, 0x0a, 0x15, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f,
+	0x64, 0x69, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x18, 0x09, 0x20,
+	0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70,
+	0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x72, 0x64, 0x2e, 0x44,
+	0x69, 0x76, 0x69, 0x64, 0x65, 0x72, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x52, 0x13, 0x73, 0x65, 0x63,
+	0x74, 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x76, 0x69, 0x64, 0x65, 0x72, 0x53, 0x74, 0x79, 0x6c, 0x65,
+	0x12, 0x47, 0x0a, 0x0c, 0x63, 0x61, 0x72, 0x64, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73,
+	0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
+	0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x72,
+	0x64, 0x2e, 0x43, 0x61, 0x72, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x63, 0x61,
+	0x72, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d,
+	0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x4c, 0x0a,
+	0x0c, 0x66, 0x69, 0x78, 0x65, 0x64, 0x5f, 0x66, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x18, 0x05, 0x20,
+	0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70,
+	0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x72, 0x64, 0x2e, 0x43,
+	0x61, 0x72, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x46, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x52, 0x0b,
+	0x66, 0x69, 0x78, 0x65, 0x64, 0x46, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x12, 0x4b, 0x0a, 0x0d, 0x64,
+	0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x18, 0x06, 0x20, 0x01,
+	0x28, 0x0e, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73,
+	0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x72, 0x64, 0x2e, 0x44, 0x69,
+	0x73, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x52, 0x0c, 0x64, 0x69, 0x73, 0x70,
+	0x6c, 0x61, 0x79, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x12, 0x4e, 0x0a, 0x10, 0x70, 0x65, 0x65, 0x6b,
+	0x5f, 0x63, 0x61, 0x72, 0x64, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73,
+	0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x72, 0x64, 0x2e, 0x43, 0x61,
+	0x72, 0x64, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x0e, 0x70, 0x65, 0x65, 0x6b, 0x43, 0x61,
+	0x72, 0x64, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x1a, 0xc7, 0x01, 0x0a, 0x0a, 0x43, 0x61, 0x72,
+	0x64, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x1a, 0x0a,
+	0x08, 0x73, 0x75, 0x62, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x08, 0x73, 0x75, 0x62, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x44, 0x0a, 0x0a, 0x69, 0x6d, 0x61,
+	0x67, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e,
+	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64,
+	0x2e, 0x76, 0x31, 0x2e, 0x57, 0x69, 0x64, 0x67, 0x65, 0x74, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65,
+	0x54, 0x79, 0x70, 0x65, 0x52, 0x09, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12,
+	0x1b, 0x0a, 0x09, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x08, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x55, 0x72, 0x6c, 0x12, 0x24, 0x0a, 0x0e,
+	0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x61, 0x6c, 0x74, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x05,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x41, 0x6c, 0x74, 0x54, 0x65,
+	0x78, 0x74, 0x1a, 0xba, 0x01, 0x0a, 0x07, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16,
+	0x0a, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
+	0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x35, 0x0a, 0x07, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74,
+	0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
+	0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x69,
+	0x64, 0x67, 0x65, 0x74, 0x52, 0x07, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x73, 0x12, 0x20, 0x0a,
+	0x0b, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x70, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x18, 0x05, 0x20, 0x01,
+	0x28, 0x08, 0x52, 0x0b, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x70, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12,
+	0x3e, 0x0a, 0x1b, 0x75, 0x6e, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x70, 0x73, 0x69, 0x62, 0x6c, 0x65,
+	0x5f, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06,
+	0x20, 0x01, 0x28, 0x05, 0x52, 0x19, 0x75, 0x6e, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x70, 0x73, 0x69,
+	0x62, 0x6c, 0x65, 0x57, 0x69, 0x64, 0x67, 0x65, 0x74, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x1a,
+	0x68, 0x0a, 0x0a, 0x43, 0x61, 0x72, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a,
+	0x0c, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x61, 0x62, 0x65, 0x6c,
+	0x12, 0x37, 0x0a, 0x08, 0x6f, 0x6e, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73,
+	0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x6e, 0x43, 0x6c, 0x69, 0x63, 0x6b,
+	0x52, 0x07, 0x6f, 0x6e, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x1a, 0x9d, 0x01, 0x0a, 0x0f, 0x43, 0x61,
+	0x72, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x46, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x12, 0x42, 0x0a,
+	0x0e, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x5f, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61,
+	0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x75, 0x74, 0x74,
+	0x6f, 0x6e, 0x52, 0x0d, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x42, 0x75, 0x74, 0x74, 0x6f,
+	0x6e, 0x12, 0x46, 0x0a, 0x10, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x5f, 0x62,
+	0x75, 0x74, 0x74, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f,
+	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76,
+	0x31, 0x2e, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x52, 0x0f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64,
+	0x61, 0x72, 0x79, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x22, 0x50, 0x0a, 0x0c, 0x44, 0x69, 0x76,
+	0x69, 0x64, 0x65, 0x72, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x12, 0x1d, 0x0a, 0x19, 0x44, 0x49, 0x56,
+	0x49, 0x44, 0x45, 0x52, 0x5f, 0x53, 0x54, 0x59, 0x4c, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45,
+	0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x53, 0x4f, 0x4c, 0x49,
+	0x44, 0x5f, 0x44, 0x49, 0x56, 0x49, 0x44, 0x45, 0x52, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x4e,
+	0x4f, 0x5f, 0x44, 0x49, 0x56, 0x49, 0x44, 0x45, 0x52, 0x10, 0x02, 0x22, 0x44, 0x0a, 0x0c, 0x44,
+	0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x12, 0x1d, 0x0a, 0x19, 0x44,
+	0x49, 0x53, 0x50, 0x4c, 0x41, 0x59, 0x5f, 0x53, 0x54, 0x59, 0x4c, 0x45, 0x5f, 0x55, 0x4e, 0x53,
+	0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x50, 0x45,
+	0x45, 0x4b, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x45, 0x50, 0x4c, 0x41, 0x43, 0x45, 0x10,
+	0x02, 0x22, 0x8f, 0x07, 0x0a, 0x06, 0x57, 0x69, 0x64, 0x67, 0x65, 0x74, 0x12, 0x4b, 0x0a, 0x0e,
+	0x74, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x67, 0x72, 0x61, 0x70, 0x68, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70,
+	0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x50,
+	0x61, 0x72, 0x61, 0x67, 0x72, 0x61, 0x70, 0x68, 0x48, 0x00, 0x52, 0x0d, 0x74, 0x65, 0x78, 0x74,
+	0x50, 0x61, 0x72, 0x61, 0x67, 0x72, 0x61, 0x70, 0x68, 0x12, 0x32, 0x0a, 0x05, 0x69, 0x6d, 0x61,
+	0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
+	0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x49,
+	0x6d, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x4b, 0x0a,
+	0x0e, 0x64, 0x65, 0x63, 0x6f, 0x72, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18,
+	0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61,
+	0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x63, 0x6f,
+	0x72, 0x61, 0x74, 0x65, 0x64, 0x54, 0x65, 0x78, 0x74, 0x48, 0x00, 0x52, 0x0d, 0x64, 0x65, 0x63,
+	0x6f, 0x72, 0x61, 0x74, 0x65, 0x64, 0x54, 0x65, 0x78, 0x74, 0x12, 0x42, 0x0a, 0x0b, 0x62, 0x75,
+	0x74, 0x74, 0x6f, 0x6e, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61,
+	0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74,
+	0x48, 0x00, 0x52, 0x0a, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x3f,
+	0x0a, 0x0a, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x18, 0x05, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73,
+	0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x70,
+	0x75, 0x74, 0x48, 0x00, 0x52, 0x09, 0x74, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12,
+	0x4e, 0x0a, 0x0f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x70,
+	0x75, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
+	0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53,
+	0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x48, 0x00, 0x52,
+	0x0e, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12,
+	0x4f, 0x0a, 0x10, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x70, 0x69, 0x63,
+	0x6b, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
+	0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e,
+	0x44, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x50, 0x69, 0x63, 0x6b, 0x65, 0x72, 0x48, 0x00,
+	0x52, 0x0e, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x50, 0x69, 0x63, 0x6b, 0x65, 0x72,
+	0x12, 0x38, 0x0a, 0x07, 0x64, 0x69, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e,
+	0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x76, 0x69, 0x64, 0x65, 0x72, 0x48,
+	0x00, 0x52, 0x07, 0x64, 0x69, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x2f, 0x0a, 0x04, 0x67, 0x72,
+	0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
+	0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47,
+	0x72, 0x69, 0x64, 0x48, 0x00, 0x52, 0x04, 0x67, 0x72, 0x69, 0x64, 0x12, 0x38, 0x0a, 0x07, 0x63,
+	0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67,
+	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e,
+	0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x48, 0x00, 0x52, 0x07, 0x63, 0x6f,
+	0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x62, 0x0a, 0x14, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x6f, 0x6e,
+	0x74, 0x61, 0x6c, 0x5f, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x08, 0x20,
+	0x01, 0x28, 0x0e, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70,
+	0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x69, 0x64, 0x67, 0x65, 0x74,
+	0x2e, 0x48, 0x6f, 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x74, 0x61, 0x6c, 0x41, 0x6c, 0x69, 0x67, 0x6e,
+	0x6d, 0x65, 0x6e, 0x74, 0x52, 0x13, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x74, 0x61, 0x6c,
+	0x41, 0x6c, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x23, 0x0a, 0x09, 0x49, 0x6d, 0x61,
+	0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x51, 0x55, 0x41, 0x52, 0x45,
+	0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x49, 0x52, 0x43, 0x4c, 0x45, 0x10, 0x01, 0x22, 0x5b,
+	0x0a, 0x13, 0x48, 0x6f, 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x74, 0x61, 0x6c, 0x41, 0x6c, 0x69, 0x67,
+	0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x24, 0x0a, 0x20, 0x48, 0x4f, 0x52, 0x49, 0x5a, 0x4f, 0x4e,
+	0x54, 0x41, 0x4c, 0x5f, 0x41, 0x4c, 0x49, 0x47, 0x4e, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x55, 0x4e,
+	0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x53,
+	0x54, 0x41, 0x52, 0x54, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x45, 0x4e, 0x54, 0x45, 0x52,
+	0x10, 0x02, 0x12, 0x07, 0x0a, 0x03, 0x45, 0x4e, 0x44, 0x10, 0x03, 0x42, 0x06, 0x0a, 0x04, 0x64,
+	0x61, 0x74, 0x61, 0x22, 0x23, 0x0a, 0x0d, 0x54, 0x65, 0x78, 0x74, 0x50, 0x61, 0x72, 0x61, 0x67,
+	0x72, 0x61, 0x70, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0x78, 0x0a, 0x05, 0x49, 0x6d, 0x61, 0x67,
+	0x65, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x55, 0x72, 0x6c, 0x12, 0x37,
+	0x0a, 0x08, 0x6f, 0x6e, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63,
+	0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x6e, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x52, 0x07,
+	0x6f, 0x6e, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x6c, 0x74, 0x5f, 0x74,
+	0x65, 0x78, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x6c, 0x74, 0x54, 0x65,
+	0x78, 0x74, 0x22, 0x09, 0x0a, 0x07, 0x44, 0x69, 0x76, 0x69, 0x64, 0x65, 0x72, 0x22, 0xb3, 0x06,
+	0x0a, 0x0d, 0x44, 0x65, 0x63, 0x6f, 0x72, 0x61, 0x74, 0x65, 0x64, 0x54, 0x65, 0x78, 0x74, 0x12,
+	0x31, 0x0a, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e,
+	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64,
+	0x2e, 0x76, 0x31, 0x2e, 0x49, 0x63, 0x6f, 0x6e, 0x42, 0x02, 0x18, 0x01, 0x52, 0x04, 0x69, 0x63,
+	0x6f, 0x6e, 0x12, 0x38, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x69, 0x63, 0x6f, 0x6e,
+	0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
+	0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x63, 0x6f,
+	0x6e, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x49, 0x63, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x09,
+	0x74, 0x6f, 0x70, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x08, 0x74, 0x6f, 0x70, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78,
+	0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0x1b, 0x0a,
+	0x09, 0x77, 0x72, 0x61, 0x70, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08,
+	0x52, 0x08, 0x77, 0x72, 0x61, 0x70, 0x54, 0x65, 0x78, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x62, 0x6f,
+	0x74, 0x74, 0x6f, 0x6d, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x0b, 0x62, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x37, 0x0a,
+	0x08, 0x6f, 0x6e, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61,
+	0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x6e, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x52, 0x07, 0x6f,
+	0x6e, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x12, 0x35, 0x0a, 0x06, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e,
+	0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
+	0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x75, 0x74,
+	0x74, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x06, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x12, 0x59, 0x0a,
+	0x0e, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x18,
+	0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61,
+	0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x63, 0x6f,
+	0x72, 0x61, 0x74, 0x65, 0x64, 0x54, 0x65, 0x78, 0x74, 0x2e, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68,
+	0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x48, 0x00, 0x52, 0x0d, 0x73, 0x77, 0x69, 0x74, 0x63,
+	0x68, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x12, 0x36, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f,
+	0x69, 0x63, 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f,
+	0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31,
+	0x2e, 0x49, 0x63, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x49, 0x63, 0x6f, 0x6e,
+	0x1a, 0xb5, 0x02, 0x0a, 0x0d, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x74, 0x72,
+	0x6f, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,
+	0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1a, 0x0a, 0x08,
+	0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08,
+	0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x12, 0x45, 0x0a, 0x10, 0x6f, 0x6e, 0x5f, 0x63,
+	0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73,
+	0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52,
+	0x0e, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12,
+	0x5f, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18,
+	0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61,
+	0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x63, 0x6f,
+	0x72, 0x61, 0x74, 0x65, 0x64, 0x54, 0x65, 0x78, 0x74, 0x2e, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68,
+	0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x54,
+	0x79, 0x70, 0x65, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x54, 0x79, 0x70, 0x65,
+	0x22, 0x36, 0x0a, 0x0b, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x12,
+	0x0a, 0x0a, 0x06, 0x53, 0x57, 0x49, 0x54, 0x43, 0x48, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x43,
+	0x48, 0x45, 0x43, 0x4b, 0x42, 0x4f, 0x58, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x48, 0x45,
+	0x43, 0x4b, 0x5f, 0x42, 0x4f, 0x58, 0x10, 0x02, 0x42, 0x09, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74,
+	0x72, 0x6f, 0x6c, 0x22, 0xe1, 0x03, 0x0a, 0x09, 0x54, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x70, 0x75,
+	0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x02,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x1b, 0x0a, 0x09, 0x68,
+	0x69, 0x6e, 0x74, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08,
+	0x68, 0x69, 0x6e, 0x74, 0x54, 0x65, 0x78, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75,
+	0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x37,
+	0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x67,
+	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e,
+	0x76, 0x31, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x2e, 0x54, 0x79, 0x70,
+	0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x45, 0x0a, 0x10, 0x6f, 0x6e, 0x5f, 0x63, 0x68,
+	0x61, 0x6e, 0x67, 0x65, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e,
+	0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e,
+	0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x51,
+	0x0a, 0x13, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73,
+	0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x67, 0x6f,
+	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76,
+	0x31, 0x2e, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x12, 0x69,
+	0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e,
+	0x73, 0x12, 0x4d, 0x0a, 0x14, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65,
+	0x74, 0x65, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61,
+	0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x12, 0x61, 0x75,
+	0x74, 0x6f, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+	0x12, 0x29, 0x0a, 0x10, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x68, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x5f,
+	0x74, 0x65, 0x78, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x70, 0x6c, 0x61, 0x63,
+	0x65, 0x68, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x54, 0x65, 0x78, 0x74, 0x22, 0x2a, 0x0a, 0x04, 0x54,
+	0x79, 0x70, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x5f, 0x4c, 0x49,
+	0x4e, 0x45, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x50, 0x4c, 0x45,
+	0x5f, 0x4c, 0x49, 0x4e, 0x45, 0x10, 0x01, 0x22, 0x87, 0x01, 0x0a, 0x0b, 0x53, 0x75, 0x67, 0x67,
+	0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x45, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73,
+	0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
+	0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x67,
+	0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74,
+	0x69, 0x6f, 0x6e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x1a, 0x31,
+	0x0a, 0x0e, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x74, 0x65, 0x6d,
+	0x12, 0x14, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00,
+	0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x42, 0x09, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e,
+	0x74, 0x22, 0x43, 0x0a, 0x0a, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x12,
+	0x35, 0x0a, 0x07, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b,
+	0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63,
+	0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x52, 0x07, 0x62,
+	0x75, 0x74, 0x74, 0x6f, 0x6e, 0x73, 0x22, 0xb9, 0x08, 0x0a, 0x0e, 0x53, 0x65, 0x6c, 0x65, 0x63,
+	0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d,
+	0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a,
+	0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x61,
+	0x62, 0x65, 0x6c, 0x12, 0x45, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28,
+	0x0e, 0x32, 0x31, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e,
+	0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f,
+	0x6e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+	0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x47, 0x0a, 0x05, 0x69, 0x74,
+	0x65, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
+	0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e,
+	0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x2e, 0x53,
+	0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74,
+	0x65, 0x6d, 0x73, 0x12, 0x45, 0x0a, 0x10, 0x6f, 0x6e, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65,
+	0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e,
+	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64,
+	0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x6f, 0x6e, 0x43, 0x68,
+	0x61, 0x6e, 0x67, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x44, 0x0a, 0x1f, 0x6d, 0x75,
+	0x6c, 0x74, 0x69, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x73,
+	0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x06, 0x20,
+	0x01, 0x28, 0x05, 0x52, 0x1b, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74,
+	0x4d, 0x61, 0x78, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x73,
+	0x12, 0x40, 0x0a, 0x1d, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74,
+	0x5f, 0x6d, 0x69, 0x6e, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74,
+	0x68, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x19, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x53, 0x65,
+	0x6c, 0x65, 0x63, 0x74, 0x4d, 0x69, 0x6e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4c, 0x65, 0x6e, 0x67,
+	0x74, 0x68, 0x12, 0x4f, 0x0a, 0x14, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x64,
+	0x61, 0x74, 0x61, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63,
+	0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52,
+	0x12, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75,
+	0x72, 0x63, 0x65, 0x12, 0x6a, 0x0a, 0x14, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x5f,
+	0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x36, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e,
+	0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f,
+	0x6e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x44,
+	0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x00, 0x52, 0x12, 0x70, 0x6c, 0x61,
+	0x74, 0x66, 0x6f, 0x72, 0x6d, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x1a,
+	0x9c, 0x01, 0x0a, 0x0d, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x74, 0x65,
+	0x6d, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73,
+	0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x73,
+	0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x72, 0x74,
+	0x5f, 0x69, 0x63, 0x6f, 0x6e, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x0c, 0x73, 0x74, 0x61, 0x72, 0x74, 0x49, 0x63, 0x6f, 0x6e, 0x55, 0x72, 0x69, 0x12, 0x1f, 0x0a,
+	0x0b, 0x62, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x05, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x0a, 0x62, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x54, 0x65, 0x78, 0x74, 0x1a, 0xc7,
+	0x01, 0x0a, 0x12, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x44, 0x61, 0x74, 0x61, 0x53,
+	0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x77, 0x0a, 0x12, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f,
+	0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x0e, 0x32, 0x47, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e,
+	0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f,
+	0x6e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x44,
+	0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e,
+	0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x00, 0x52, 0x10, 0x63, 0x6f,
+	0x6d, 0x6d, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x29,
+	0x0a, 0x10, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72,
+	0x63, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12,
+	0x08, 0x0a, 0x04, 0x55, 0x53, 0x45, 0x52, 0x10, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x64, 0x61, 0x74,
+	0x61, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x5c, 0x0a, 0x0d, 0x53, 0x65, 0x6c, 0x65,
+	0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x48, 0x45,
+	0x43, 0x4b, 0x5f, 0x42, 0x4f, 0x58, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x52, 0x41, 0x44, 0x49,
+	0x4f, 0x5f, 0x42, 0x55, 0x54, 0x54, 0x4f, 0x4e, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x57,
+	0x49, 0x54, 0x43, 0x48, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x52, 0x4f, 0x50, 0x44, 0x4f,
+	0x57, 0x4e, 0x10, 0x03, 0x12, 0x10, 0x0a, 0x0c, 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x5f, 0x53, 0x45,
+	0x4c, 0x45, 0x43, 0x54, 0x10, 0x04, 0x42, 0x1a, 0x0a, 0x18, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x5f,
+	0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x6f, 0x75, 0x72,
+	0x63, 0x65, 0x22, 0xec, 0x02, 0x0a, 0x0e, 0x44, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x50,
+	0x69, 0x63, 0x6b, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x61, 0x62,
+	0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x12,
+	0x4a, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x36, 0x2e,
+	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64,
+	0x2e, 0x76, 0x31, 0x2e, 0x44, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x50, 0x69, 0x63, 0x6b,
+	0x65, 0x72, 0x2e, 0x44, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x50, 0x69, 0x63, 0x6b, 0x65,
+	0x72, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x76,
+	0x61, 0x6c, 0x75, 0x65, 0x5f, 0x6d, 0x73, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x04, 0x20,
+	0x01, 0x28, 0x03, 0x52, 0x0c, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x73, 0x45, 0x70, 0x6f, 0x63,
+	0x68, 0x12, 0x30, 0x0a, 0x14, 0x74, 0x69, 0x6d, 0x65, 0x7a, 0x6f, 0x6e, 0x65, 0x5f, 0x6f, 0x66,
+	0x66, 0x73, 0x65, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52,
+	0x12, 0x74, 0x69, 0x6d, 0x65, 0x7a, 0x6f, 0x6e, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x44,
+	0x61, 0x74, 0x65, 0x12, 0x45, 0x0a, 0x10, 0x6f, 0x6e, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65,
+	0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e,
+	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64,
+	0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x6f, 0x6e, 0x43, 0x68,
+	0x61, 0x6e, 0x67, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x45, 0x0a, 0x12, 0x44, 0x61,
+	0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x50, 0x69, 0x63, 0x6b, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65,
+	0x12, 0x11, 0x0a, 0x0d, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x41, 0x4e, 0x44, 0x5f, 0x54, 0x49, 0x4d,
+	0x45, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x4f, 0x4e, 0x4c, 0x59,
+	0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x49, 0x4d, 0x45, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10,
+	0x02, 0x22, 0xe5, 0x01, 0x0a, 0x06, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04,
+	0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74,
+	0x12, 0x2d, 0x0a, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19,
+	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72,
+	0x64, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x63, 0x6f, 0x6e, 0x52, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x12,
+	0x28, 0x0a, 0x05, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12,
+	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x43, 0x6f, 0x6c,
+	0x6f, 0x72, 0x52, 0x05, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x12, 0x37, 0x0a, 0x08, 0x6f, 0x6e, 0x5f,
+	0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f,
+	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76,
+	0x31, 0x2e, 0x4f, 0x6e, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x52, 0x07, 0x6f, 0x6e, 0x43, 0x6c, 0x69,
+	0x63, 0x6b, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x05,
+	0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x19,
+	0x0a, 0x08, 0x61, 0x6c, 0x74, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x07, 0x61, 0x6c, 0x74, 0x54, 0x65, 0x78, 0x74, 0x22, 0xf8, 0x01, 0x0a, 0x04, 0x49, 0x63,
+	0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0a, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x5f, 0x69, 0x63, 0x6f, 0x6e,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x09, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x49,
+	0x63, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x08, 0x69, 0x63, 0x6f, 0x6e, 0x5f, 0x75, 0x72, 0x6c, 0x18,
+	0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x07, 0x69, 0x63, 0x6f, 0x6e, 0x55, 0x72, 0x6c,
+	0x12, 0x48, 0x0a, 0x0d, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x63, 0x6f,
+	0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
+	0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x61,
+	0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x49, 0x63, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0c, 0x6d, 0x61,
+	0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x49, 0x63, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x6c,
+	0x74, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x6c,
+	0x74, 0x54, 0x65, 0x78, 0x74, 0x12, 0x44, 0x0a, 0x0a, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x74,
+	0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
+	0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e,
+	0x57, 0x69, 0x64, 0x67, 0x65, 0x74, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65,
+	0x52, 0x09, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x42, 0x07, 0x0a, 0x05, 0x69,
+	0x63, 0x6f, 0x6e, 0x73, 0x22, 0x64, 0x0a, 0x0c, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c,
+	0x49, 0x63, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x69, 0x6c, 0x6c,
+	0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x66, 0x69, 0x6c, 0x6c, 0x12, 0x16, 0x0a, 0x06,
+	0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x77, 0x65,
+	0x69, 0x67, 0x68, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x61, 0x64, 0x65, 0x18, 0x04, 0x20,
+	0x01, 0x28, 0x05, 0x52, 0x05, 0x67, 0x72, 0x61, 0x64, 0x65, 0x22, 0xed, 0x01, 0x0a, 0x0e, 0x49,
+	0x6d, 0x61, 0x67, 0x65, 0x43, 0x72, 0x6f, 0x70, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x12, 0x45, 0x0a,
+	0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x67, 0x6f,
+	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76,
+	0x31, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x72, 0x6f, 0x70, 0x53, 0x74, 0x79, 0x6c, 0x65,
+	0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x72, 0x6f, 0x70, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04,
+	0x74, 0x79, 0x70, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x73, 0x70, 0x65, 0x63, 0x74, 0x5f, 0x72,
+	0x61, 0x74, 0x69, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, 0x61, 0x73, 0x70, 0x65,
+	0x63, 0x74, 0x52, 0x61, 0x74, 0x69, 0x6f, 0x22, 0x71, 0x0a, 0x0d, 0x49, 0x6d, 0x61, 0x67, 0x65,
+	0x43, 0x72, 0x6f, 0x70, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x1b, 0x49, 0x4d, 0x41, 0x47,
+	0x45, 0x5f, 0x43, 0x52, 0x4f, 0x50, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50,
+	0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x51, 0x55,
+	0x41, 0x52, 0x45, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x49, 0x52, 0x43, 0x4c, 0x45, 0x10,
+	0x02, 0x12, 0x14, 0x0a, 0x10, 0x52, 0x45, 0x43, 0x54, 0x41, 0x4e, 0x47, 0x4c, 0x45, 0x5f, 0x43,
+	0x55, 0x53, 0x54, 0x4f, 0x4d, 0x10, 0x03, 0x12, 0x11, 0x0a, 0x0d, 0x52, 0x45, 0x43, 0x54, 0x41,
+	0x4e, 0x47, 0x4c, 0x45, 0x5f, 0x34, 0x5f, 0x33, 0x10, 0x04, 0x22, 0xf0, 0x01, 0x0a, 0x0b, 0x42,
+	0x6f, 0x72, 0x64, 0x65, 0x72, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x12, 0x3f, 0x0a, 0x04, 0x74, 0x79,
+	0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
+	0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x42,
+	0x6f, 0x72, 0x64, 0x65, 0x72, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x2e, 0x42, 0x6f, 0x72, 0x64, 0x65,
+	0x72, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x35, 0x0a, 0x0c, 0x73,
+	0x74, 0x72, 0x6f, 0x6b, 0x65, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x2e,
+	0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x43, 0x6f, 0x6c,
+	0x6f, 0x72, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x72, 0x6e, 0x65, 0x72, 0x5f, 0x72, 0x61, 0x64,
+	0x69, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x63, 0x6f, 0x72, 0x6e, 0x65,
+	0x72, 0x52, 0x61, 0x64, 0x69, 0x75, 0x73, 0x22, 0x44, 0x0a, 0x0a, 0x42, 0x6f, 0x72, 0x64, 0x65,
+	0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x17, 0x42, 0x4f, 0x52, 0x44, 0x45, 0x52, 0x5f,
+	0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44,
+	0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x4f, 0x5f, 0x42, 0x4f, 0x52, 0x44, 0x45, 0x52, 0x10,
+	0x01, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x54, 0x52, 0x4f, 0x4b, 0x45, 0x10, 0x02, 0x22, 0xd1, 0x01,
+	0x0a, 0x0e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74,
+	0x12, 0x1b, 0x0a, 0x09, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x55, 0x72, 0x69, 0x12, 0x19, 0x0a,
+	0x08, 0x61, 0x6c, 0x74, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x07, 0x61, 0x6c, 0x74, 0x54, 0x65, 0x78, 0x74, 0x12, 0x42, 0x0a, 0x0a, 0x63, 0x72, 0x6f, 0x70,
+	0x5f, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67,
+	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e,
+	0x76, 0x31, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x72, 0x6f, 0x70, 0x53, 0x74, 0x79, 0x6c,
+	0x65, 0x52, 0x09, 0x63, 0x72, 0x6f, 0x70, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x12, 0x43, 0x0a, 0x0c,
+	0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x20, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73,
+	0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x53,
+	0x74, 0x79, 0x6c, 0x65, 0x52, 0x0b, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x53, 0x74, 0x79, 0x6c,
+	0x65, 0x22, 0xa0, 0x04, 0x0a, 0x04, 0x47, 0x72, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69,
+	0x74, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65,
+	0x12, 0x38, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32,
+	0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61,
+	0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x69, 0x64, 0x2e, 0x47, 0x72, 0x69, 0x64, 0x49,
+	0x74, 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x43, 0x0a, 0x0c, 0x62, 0x6f,
+	0x72, 0x64, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x20, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63,
+	0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x53, 0x74, 0x79,
+	0x6c, 0x65, 0x52, 0x0b, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x12,
+	0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18,
+	0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x43, 0x6f, 0x75,
+	0x6e, 0x74, 0x12, 0x37, 0x0a, 0x08, 0x6f, 0x6e, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x05,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70,
+	0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x6e, 0x43, 0x6c, 0x69,
+	0x63, 0x6b, 0x52, 0x07, 0x6f, 0x6e, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x1a, 0xa6, 0x02, 0x0a, 0x08,
+	0x47, 0x72, 0x69, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x39, 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67,
+	0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
+	0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6d,
+	0x61, 0x67, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x52, 0x05, 0x69, 0x6d,
+	0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x75, 0x62,
+	0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x75, 0x62,
+	0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x49, 0x0a, 0x06, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x18,
+	0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61,
+	0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x69, 0x64,
+	0x2e, 0x47, 0x72, 0x69, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x2e, 0x47, 0x72, 0x69, 0x64, 0x49, 0x74,
+	0x65, 0x6d, 0x4c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x52, 0x06, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74,
+	0x22, 0x52, 0x0a, 0x0e, 0x47, 0x72, 0x69, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x4c, 0x61, 0x79, 0x6f,
+	0x75, 0x74, 0x12, 0x20, 0x0a, 0x1c, 0x47, 0x52, 0x49, 0x44, 0x5f, 0x49, 0x54, 0x45, 0x4d, 0x5f,
+	0x4c, 0x41, 0x59, 0x4f, 0x55, 0x54, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49,
+	0x45, 0x44, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x45, 0x58, 0x54, 0x5f, 0x42, 0x45, 0x4c,
+	0x4f, 0x57, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x45, 0x58, 0x54, 0x5f, 0x41, 0x42, 0x4f,
+	0x56, 0x45, 0x10, 0x02, 0x22, 0xac, 0x09, 0x0a, 0x07, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73,
+	0x12, 0x46, 0x0a, 0x0c, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73,
+	0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
+	0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c,
+	0x75, 0x6d, 0x6e, 0x73, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x52, 0x0b, 0x63, 0x6f, 0x6c,
+	0x75, 0x6d, 0x6e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x1a, 0xd8, 0x08, 0x0a, 0x06, 0x43, 0x6f, 0x6c,
+	0x75, 0x6d, 0x6e, 0x12, 0x6b, 0x0a, 0x15, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x74, 0x61,
+	0x6c, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x0e, 0x32, 0x37, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73,
+	0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73,
+	0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x2e, 0x48, 0x6f, 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x74,
+	0x61, 0x6c, 0x53, 0x69, 0x7a, 0x65, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x52, 0x13, 0x68, 0x6f, 0x72,
+	0x69, 0x7a, 0x6f, 0x6e, 0x74, 0x61, 0x6c, 0x53, 0x69, 0x7a, 0x65, 0x53, 0x74, 0x79, 0x6c, 0x65,
+	0x12, 0x62, 0x0a, 0x14, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x74, 0x61, 0x6c, 0x5f, 0x61,
+	0x6c, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2f,
+	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72,
+	0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x69, 0x64, 0x67, 0x65, 0x74, 0x2e, 0x48, 0x6f, 0x72, 0x69,
+	0x7a, 0x6f, 0x6e, 0x74, 0x61, 0x6c, 0x41, 0x6c, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52,
+	0x13, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x74, 0x61, 0x6c, 0x41, 0x6c, 0x69, 0x67, 0x6e,
+	0x6d, 0x65, 0x6e, 0x74, 0x12, 0x64, 0x0a, 0x12, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, 0x61, 0x6c,
+	0x5f, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e,
+	0x32, 0x35, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63,
+	0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x2e, 0x43,
+	0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x2e, 0x56, 0x65, 0x72, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x41, 0x6c,
+	0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x11, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, 0x61,
+	0x6c, 0x41, 0x6c, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x45, 0x0a, 0x07, 0x77, 0x69,
+	0x64, 0x67, 0x65, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f,
+	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76,
+	0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e,
+	0x2e, 0x57, 0x69, 0x64, 0x67, 0x65, 0x74, 0x73, 0x52, 0x07, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74,
+	0x73, 0x1a, 0x85, 0x04, 0x0a, 0x07, 0x57, 0x69, 0x64, 0x67, 0x65, 0x74, 0x73, 0x12, 0x4b, 0x0a,
+	0x0e, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x67, 0x72, 0x61, 0x70, 0x68, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61,
+	0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x78, 0x74,
+	0x50, 0x61, 0x72, 0x61, 0x67, 0x72, 0x61, 0x70, 0x68, 0x48, 0x00, 0x52, 0x0d, 0x74, 0x65, 0x78,
+	0x74, 0x50, 0x61, 0x72, 0x61, 0x67, 0x72, 0x61, 0x70, 0x68, 0x12, 0x32, 0x0a, 0x05, 0x69, 0x6d,
+	0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
+	0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e,
+	0x49, 0x6d, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x4b,
+	0x0a, 0x0e, 0x64, 0x65, 0x63, 0x6f, 0x72, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x65, 0x78, 0x74,
+	0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
+	0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x63,
+	0x6f, 0x72, 0x61, 0x74, 0x65, 0x64, 0x54, 0x65, 0x78, 0x74, 0x48, 0x00, 0x52, 0x0d, 0x64, 0x65,
+	0x63, 0x6f, 0x72, 0x61, 0x74, 0x65, 0x64, 0x54, 0x65, 0x78, 0x74, 0x12, 0x42, 0x0a, 0x0b, 0x62,
+	0x75, 0x74, 0x74, 0x6f, 0x6e, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63,
+	0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x4c, 0x69, 0x73,
+	0x74, 0x48, 0x00, 0x52, 0x0a, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x12,
+	0x3f, 0x0a, 0x0a, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x18, 0x05, 0x20,
+	0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70,
+	0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x49, 0x6e,
+	0x70, 0x75, 0x74, 0x48, 0x00, 0x52, 0x09, 0x74, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74,
+	0x12, 0x4e, 0x0a, 0x0f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e,
+	0x70, 0x75, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
+	0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e,
+	0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x48, 0x00,
+	0x52, 0x0e, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x70, 0x75, 0x74,
+	0x12, 0x4f, 0x0a, 0x10, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x70, 0x69,
+	0x63, 0x6b, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67, 0x6f, 0x6f,
+	0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31,
+	0x2e, 0x44, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x50, 0x69, 0x63, 0x6b, 0x65, 0x72, 0x48,
+	0x00, 0x52, 0x0e, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x50, 0x69, 0x63, 0x6b, 0x65,
+	0x72, 0x42, 0x06, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x6e, 0x0a, 0x13, 0x48, 0x6f, 0x72,
+	0x69, 0x7a, 0x6f, 0x6e, 0x74, 0x61, 0x6c, 0x53, 0x69, 0x7a, 0x65, 0x53, 0x74, 0x79, 0x6c, 0x65,
+	0x12, 0x25, 0x0a, 0x21, 0x48, 0x4f, 0x52, 0x49, 0x5a, 0x4f, 0x4e, 0x54, 0x41, 0x4c, 0x5f, 0x53,
+	0x49, 0x5a, 0x45, 0x5f, 0x53, 0x54, 0x59, 0x4c, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43,
+	0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x18, 0x0a, 0x14, 0x46, 0x49, 0x4c, 0x4c, 0x5f,
+	0x41, 0x56, 0x41, 0x49, 0x4c, 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x53, 0x50, 0x41, 0x43, 0x45, 0x10,
+	0x01, 0x12, 0x16, 0x0a, 0x12, 0x46, 0x49, 0x4c, 0x4c, 0x5f, 0x4d, 0x49, 0x4e, 0x49, 0x4d, 0x55,
+	0x4d, 0x5f, 0x53, 0x50, 0x41, 0x43, 0x45, 0x10, 0x02, 0x22, 0x58, 0x0a, 0x11, 0x56, 0x65, 0x72,
+	0x74, 0x69, 0x63, 0x61, 0x6c, 0x41, 0x6c, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x22,
+	0x0a, 0x1e, 0x56, 0x45, 0x52, 0x54, 0x49, 0x43, 0x41, 0x4c, 0x5f, 0x41, 0x4c, 0x49, 0x47, 0x4e,
+	0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44,
+	0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x10, 0x01, 0x12, 0x07,
+	0x0a, 0x03, 0x54, 0x4f, 0x50, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x42, 0x4f, 0x54, 0x54, 0x4f,
+	0x4d, 0x10, 0x03, 0x22, 0x8f, 0x02, 0x0a, 0x07, 0x4f, 0x6e, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x12,
+	0x35, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61,
+	0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x06,
+	0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3c, 0x0a, 0x09, 0x6f, 0x70, 0x65, 0x6e, 0x5f, 0x6c,
+	0x69, 0x6e, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
+	0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e,
+	0x4f, 0x70, 0x65, 0x6e, 0x4c, 0x69, 0x6e, 0x6b, 0x48, 0x00, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x6e,
+	0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x56, 0x0a, 0x18, 0x6f, 0x70, 0x65, 0x6e, 0x5f, 0x64, 0x79, 0x6e,
+	0x61, 0x6d, 0x69, 0x63, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+	0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
+	0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74,
+	0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x15, 0x6f, 0x70, 0x65, 0x6e, 0x44, 0x79, 0x6e, 0x61, 0x6d,
+	0x69, 0x63, 0x4c, 0x69, 0x6e, 0x6b, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2f, 0x0a, 0x04,
+	0x63, 0x61, 0x72, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f,
+	0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31,
+	0x2e, 0x43, 0x61, 0x72, 0x64, 0x48, 0x00, 0x52, 0x04, 0x63, 0x61, 0x72, 0x64, 0x42, 0x06, 0x0a,
+	0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xe7, 0x01, 0x0a, 0x08, 0x4f, 0x70, 0x65, 0x6e, 0x4c, 0x69,
+	0x6e, 0x6b, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x03, 0x75, 0x72, 0x6c, 0x12, 0x3d, 0x0a, 0x07, 0x6f, 0x70, 0x65, 0x6e, 0x5f, 0x61, 0x73, 0x18,
+	0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61,
+	0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x70, 0x65, 0x6e,
+	0x4c, 0x69, 0x6e, 0x6b, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x41, 0x73, 0x52, 0x06, 0x6f, 0x70, 0x65,
+	0x6e, 0x41, 0x73, 0x12, 0x40, 0x0a, 0x08, 0x6f, 0x6e, 0x5f, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x18,
+	0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61,
+	0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x70, 0x65, 0x6e,
+	0x4c, 0x69, 0x6e, 0x6b, 0x2e, 0x4f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x52, 0x07, 0x6f, 0x6e,
+	0x43, 0x6c, 0x6f, 0x73, 0x65, 0x22, 0x24, 0x0a, 0x06, 0x4f, 0x70, 0x65, 0x6e, 0x41, 0x73, 0x12,
+	0x0d, 0x0a, 0x09, 0x46, 0x55, 0x4c, 0x4c, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x10, 0x00, 0x12, 0x0b,
+	0x0a, 0x07, 0x4f, 0x56, 0x45, 0x52, 0x4c, 0x41, 0x59, 0x10, 0x01, 0x22, 0x22, 0x0a, 0x07, 0x4f,
+	0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x4e, 0x4f, 0x54, 0x48, 0x49, 0x4e,
+	0x47, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x52, 0x45, 0x4c, 0x4f, 0x41, 0x44, 0x10, 0x01, 0x22,
+	0xd5, 0x03, 0x0a, 0x06, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x75,
+	0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x75,
+	0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4b, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65,
+	0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f,
+	0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31,
+	0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61,
+	0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74,
+	0x65, 0x72, 0x73, 0x12, 0x50, 0x0a, 0x0e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x69, 0x6e, 0x64, 0x69,
+	0x63, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x67, 0x6f,
+	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64, 0x2e, 0x76,
+	0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x49, 0x6e, 0x64,
+	0x69, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x0d, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69,
+	0x63, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74,
+	0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x70,
+	0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x49, 0x0a, 0x0b,
+	0x69, 0x6e, 0x74, 0x65, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28,
+	0x0e, 0x32, 0x27, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e,
+	0x63, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x49,
+	0x6e, 0x74, 0x65, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x69, 0x6e, 0x74, 0x65,
+	0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x39, 0x0a, 0x0f, 0x41, 0x63, 0x74, 0x69, 0x6f,
+	0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65,
+	0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05,
+	0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c,
+	0x75, 0x65, 0x22, 0x26, 0x0a, 0x0d, 0x4c, 0x6f, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x61,
+	0x74, 0x6f, 0x72, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x50, 0x49, 0x4e, 0x4e, 0x45, 0x52, 0x10, 0x00,
+	0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x01, 0x22, 0x3b, 0x0a, 0x0b, 0x49, 0x6e,
+	0x74, 0x65, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x17, 0x49, 0x4e, 0x54,
+	0x45, 0x52, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49,
+	0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x4f, 0x50, 0x45, 0x4e, 0x5f, 0x44,
+	0x49, 0x41, 0x4c, 0x4f, 0x47, 0x10, 0x01, 0x42, 0xa4, 0x01, 0x0a, 0x17, 0x63, 0x6f, 0x6d, 0x2e,
+	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x73, 0x2e, 0x63, 0x61, 0x72, 0x64,
+	0x2e, 0x76, 0x31, 0x42, 0x09, 0x43, 0x61, 0x72, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01,
+	0x5a, 0x37, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e,
+	0x6f, 0x72, 0x67, 0x2f, 0x67, 0x65, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x6f,
+	0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x63, 0x61, 0x72,
+	0x64, 0x2f, 0x76, 0x31, 0x3b, 0x63, 0x61, 0x72, 0x64, 0xaa, 0x02, 0x13, 0x47, 0x6f, 0x6f, 0x67,
+	0x6c, 0x65, 0x2e, 0x41, 0x70, 0x70, 0x73, 0x2e, 0x43, 0x61, 0x72, 0x64, 0x2e, 0x56, 0x31, 0xca,
+	0x02, 0x13, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5c, 0x41, 0x70, 0x70, 0x73, 0x5c, 0x43, 0x61,
+	0x72, 0x64, 0x5c, 0x56, 0x31, 0xea, 0x02, 0x16, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x3a, 0x3a,
+	0x41, 0x70, 0x70, 0x73, 0x3a, 0x3a, 0x43, 0x61, 0x72, 0x64, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+	file_google_apps_card_v1_card_proto_rawDescOnce sync.Once
+	file_google_apps_card_v1_card_proto_rawDescData = file_google_apps_card_v1_card_proto_rawDesc
+)
+
+func file_google_apps_card_v1_card_proto_rawDescGZIP() []byte {
+	file_google_apps_card_v1_card_proto_rawDescOnce.Do(func() {
+		file_google_apps_card_v1_card_proto_rawDescData = protoimpl.X.CompressGZIP(file_google_apps_card_v1_card_proto_rawDescData)
+	})
+	return file_google_apps_card_v1_card_proto_rawDescData
+}
+
+var file_google_apps_card_v1_card_proto_enumTypes = make([]protoimpl.EnumInfo, 18)
+var file_google_apps_card_v1_card_proto_msgTypes = make([]protoimpl.MessageInfo, 34)
+var file_google_apps_card_v1_card_proto_goTypes = []interface{}{
+	(Card_DividerStyle)(0),                                  // 0: google.apps.card.v1.Card.DividerStyle
+	(Card_DisplayStyle)(0),                                  // 1: google.apps.card.v1.Card.DisplayStyle
+	(Widget_ImageType)(0),                                   // 2: google.apps.card.v1.Widget.ImageType
+	(Widget_HorizontalAlignment)(0),                         // 3: google.apps.card.v1.Widget.HorizontalAlignment
+	(DecoratedText_SwitchControl_ControlType)(0),            // 4: google.apps.card.v1.DecoratedText.SwitchControl.ControlType
+	(TextInput_Type)(0),                                     // 5: google.apps.card.v1.TextInput.Type
+	(SelectionInput_SelectionType)(0),                       // 6: google.apps.card.v1.SelectionInput.SelectionType
+	(SelectionInput_PlatformDataSource_CommonDataSource)(0), // 7: google.apps.card.v1.SelectionInput.PlatformDataSource.CommonDataSource
+	(DateTimePicker_DateTimePickerType)(0),                  // 8: google.apps.card.v1.DateTimePicker.DateTimePickerType
+	(ImageCropStyle_ImageCropType)(0),                       // 9: google.apps.card.v1.ImageCropStyle.ImageCropType
+	(BorderStyle_BorderType)(0),                             // 10: google.apps.card.v1.BorderStyle.BorderType
+	(Grid_GridItem_GridItemLayout)(0),                       // 11: google.apps.card.v1.Grid.GridItem.GridItemLayout
+	(Columns_Column_HorizontalSizeStyle)(0),                 // 12: google.apps.card.v1.Columns.Column.HorizontalSizeStyle
+	(Columns_Column_VerticalAlignment)(0),                   // 13: google.apps.card.v1.Columns.Column.VerticalAlignment
+	(OpenLink_OpenAs)(0),                                    // 14: google.apps.card.v1.OpenLink.OpenAs
+	(OpenLink_OnClose)(0),                                   // 15: google.apps.card.v1.OpenLink.OnClose
+	(Action_LoadIndicator)(0),                               // 16: google.apps.card.v1.Action.LoadIndicator
+	(Action_Interaction)(0),                                 // 17: google.apps.card.v1.Action.Interaction
+	(*Card)(nil),                                            // 18: google.apps.card.v1.Card
+	(*Widget)(nil),                                          // 19: google.apps.card.v1.Widget
+	(*TextParagraph)(nil),                                   // 20: google.apps.card.v1.TextParagraph
+	(*Image)(nil),                                           // 21: google.apps.card.v1.Image
+	(*Divider)(nil),                                         // 22: google.apps.card.v1.Divider
+	(*DecoratedText)(nil),                                   // 23: google.apps.card.v1.DecoratedText
+	(*TextInput)(nil),                                       // 24: google.apps.card.v1.TextInput
+	(*Suggestions)(nil),                                     // 25: google.apps.card.v1.Suggestions
+	(*ButtonList)(nil),                                      // 26: google.apps.card.v1.ButtonList
+	(*SelectionInput)(nil),                                  // 27: google.apps.card.v1.SelectionInput
+	(*DateTimePicker)(nil),                                  // 28: google.apps.card.v1.DateTimePicker
+	(*Button)(nil),                                          // 29: google.apps.card.v1.Button
+	(*Icon)(nil),                                            // 30: google.apps.card.v1.Icon
+	(*MaterialIcon)(nil),                                    // 31: google.apps.card.v1.MaterialIcon
+	(*ImageCropStyle)(nil),                                  // 32: google.apps.card.v1.ImageCropStyle
+	(*BorderStyle)(nil),                                     // 33: google.apps.card.v1.BorderStyle
+	(*ImageComponent)(nil),                                  // 34: google.apps.card.v1.ImageComponent
+	(*Grid)(nil),                                            // 35: google.apps.card.v1.Grid
+	(*Columns)(nil),                                         // 36: google.apps.card.v1.Columns
+	(*OnClick)(nil),                                         // 37: google.apps.card.v1.OnClick
+	(*OpenLink)(nil),                                        // 38: google.apps.card.v1.OpenLink
+	(*Action)(nil),                                          // 39: google.apps.card.v1.Action
+	(*Card_CardHeader)(nil),                                 // 40: google.apps.card.v1.Card.CardHeader
+	(*Card_Section)(nil),                                    // 41: google.apps.card.v1.Card.Section
+	(*Card_CardAction)(nil),                                 // 42: google.apps.card.v1.Card.CardAction
+	(*Card_CardFixedFooter)(nil),                            // 43: google.apps.card.v1.Card.CardFixedFooter
+	(*DecoratedText_SwitchControl)(nil),                     // 44: google.apps.card.v1.DecoratedText.SwitchControl
+	(*Suggestions_SuggestionItem)(nil),                      // 45: google.apps.card.v1.Suggestions.SuggestionItem
+	(*SelectionInput_SelectionItem)(nil),                    // 46: google.apps.card.v1.SelectionInput.SelectionItem
+	(*SelectionInput_PlatformDataSource)(nil),               // 47: google.apps.card.v1.SelectionInput.PlatformDataSource
+	(*Grid_GridItem)(nil),                                   // 48: google.apps.card.v1.Grid.GridItem
+	(*Columns_Column)(nil),                                  // 49: google.apps.card.v1.Columns.Column
+	(*Columns_Column_Widgets)(nil),                          // 50: google.apps.card.v1.Columns.Column.Widgets
+	(*Action_ActionParameter)(nil),                          // 51: google.apps.card.v1.Action.ActionParameter
+	(*color.Color)(nil),                                     // 52: google.type.Color
+}
+var file_google_apps_card_v1_card_proto_depIdxs = []int32{
+	40, // 0: google.apps.card.v1.Card.header:type_name -> google.apps.card.v1.Card.CardHeader
+	41, // 1: google.apps.card.v1.Card.sections:type_name -> google.apps.card.v1.Card.Section
+	0,  // 2: google.apps.card.v1.Card.section_divider_style:type_name -> google.apps.card.v1.Card.DividerStyle
+	42, // 3: google.apps.card.v1.Card.card_actions:type_name -> google.apps.card.v1.Card.CardAction
+	43, // 4: google.apps.card.v1.Card.fixed_footer:type_name -> google.apps.card.v1.Card.CardFixedFooter
+	1,  // 5: google.apps.card.v1.Card.display_style:type_name -> google.apps.card.v1.Card.DisplayStyle
+	40, // 6: google.apps.card.v1.Card.peek_card_header:type_name -> google.apps.card.v1.Card.CardHeader
+	20, // 7: google.apps.card.v1.Widget.text_paragraph:type_name -> google.apps.card.v1.TextParagraph
+	21, // 8: google.apps.card.v1.Widget.image:type_name -> google.apps.card.v1.Image
+	23, // 9: google.apps.card.v1.Widget.decorated_text:type_name -> google.apps.card.v1.DecoratedText
+	26, // 10: google.apps.card.v1.Widget.button_list:type_name -> google.apps.card.v1.ButtonList
+	24, // 11: google.apps.card.v1.Widget.text_input:type_name -> google.apps.card.v1.TextInput
+	27, // 12: google.apps.card.v1.Widget.selection_input:type_name -> google.apps.card.v1.SelectionInput
+	28, // 13: google.apps.card.v1.Widget.date_time_picker:type_name -> google.apps.card.v1.DateTimePicker
+	22, // 14: google.apps.card.v1.Widget.divider:type_name -> google.apps.card.v1.Divider
+	35, // 15: google.apps.card.v1.Widget.grid:type_name -> google.apps.card.v1.Grid
+	36, // 16: google.apps.card.v1.Widget.columns:type_name -> google.apps.card.v1.Columns
+	3,  // 17: google.apps.card.v1.Widget.horizontal_alignment:type_name -> google.apps.card.v1.Widget.HorizontalAlignment
+	37, // 18: google.apps.card.v1.Image.on_click:type_name -> google.apps.card.v1.OnClick
+	30, // 19: google.apps.card.v1.DecoratedText.icon:type_name -> google.apps.card.v1.Icon
+	30, // 20: google.apps.card.v1.DecoratedText.start_icon:type_name -> google.apps.card.v1.Icon
+	37, // 21: google.apps.card.v1.DecoratedText.on_click:type_name -> google.apps.card.v1.OnClick
+	29, // 22: google.apps.card.v1.DecoratedText.button:type_name -> google.apps.card.v1.Button
+	44, // 23: google.apps.card.v1.DecoratedText.switch_control:type_name -> google.apps.card.v1.DecoratedText.SwitchControl
+	30, // 24: google.apps.card.v1.DecoratedText.end_icon:type_name -> google.apps.card.v1.Icon
+	5,  // 25: google.apps.card.v1.TextInput.type:type_name -> google.apps.card.v1.TextInput.Type
+	39, // 26: google.apps.card.v1.TextInput.on_change_action:type_name -> google.apps.card.v1.Action
+	25, // 27: google.apps.card.v1.TextInput.initial_suggestions:type_name -> google.apps.card.v1.Suggestions
+	39, // 28: google.apps.card.v1.TextInput.auto_complete_action:type_name -> google.apps.card.v1.Action
+	45, // 29: google.apps.card.v1.Suggestions.items:type_name -> google.apps.card.v1.Suggestions.SuggestionItem
+	29, // 30: google.apps.card.v1.ButtonList.buttons:type_name -> google.apps.card.v1.Button
+	6,  // 31: google.apps.card.v1.SelectionInput.type:type_name -> google.apps.card.v1.SelectionInput.SelectionType
+	46, // 32: google.apps.card.v1.SelectionInput.items:type_name -> google.apps.card.v1.SelectionInput.SelectionItem
+	39, // 33: google.apps.card.v1.SelectionInput.on_change_action:type_name -> google.apps.card.v1.Action
+	39, // 34: google.apps.card.v1.SelectionInput.external_data_source:type_name -> google.apps.card.v1.Action
+	47, // 35: google.apps.card.v1.SelectionInput.platform_data_source:type_name -> google.apps.card.v1.SelectionInput.PlatformDataSource
+	8,  // 36: google.apps.card.v1.DateTimePicker.type:type_name -> google.apps.card.v1.DateTimePicker.DateTimePickerType
+	39, // 37: google.apps.card.v1.DateTimePicker.on_change_action:type_name -> google.apps.card.v1.Action
+	30, // 38: google.apps.card.v1.Button.icon:type_name -> google.apps.card.v1.Icon
+	52, // 39: google.apps.card.v1.Button.color:type_name -> google.type.Color
+	37, // 40: google.apps.card.v1.Button.on_click:type_name -> google.apps.card.v1.OnClick
+	31, // 41: google.apps.card.v1.Icon.material_icon:type_name -> google.apps.card.v1.MaterialIcon
+	2,  // 42: google.apps.card.v1.Icon.image_type:type_name -> google.apps.card.v1.Widget.ImageType
+	9,  // 43: google.apps.card.v1.ImageCropStyle.type:type_name -> google.apps.card.v1.ImageCropStyle.ImageCropType
+	10, // 44: google.apps.card.v1.BorderStyle.type:type_name -> google.apps.card.v1.BorderStyle.BorderType
+	52, // 45: google.apps.card.v1.BorderStyle.stroke_color:type_name -> google.type.Color
+	32, // 46: google.apps.card.v1.ImageComponent.crop_style:type_name -> google.apps.card.v1.ImageCropStyle
+	33, // 47: google.apps.card.v1.ImageComponent.border_style:type_name -> google.apps.card.v1.BorderStyle
+	48, // 48: google.apps.card.v1.Grid.items:type_name -> google.apps.card.v1.Grid.GridItem
+	33, // 49: google.apps.card.v1.Grid.border_style:type_name -> google.apps.card.v1.BorderStyle
+	37, // 50: google.apps.card.v1.Grid.on_click:type_name -> google.apps.card.v1.OnClick
+	49, // 51: google.apps.card.v1.Columns.column_items:type_name -> google.apps.card.v1.Columns.Column
+	39, // 52: google.apps.card.v1.OnClick.action:type_name -> google.apps.card.v1.Action
+	38, // 53: google.apps.card.v1.OnClick.open_link:type_name -> google.apps.card.v1.OpenLink
+	39, // 54: google.apps.card.v1.OnClick.open_dynamic_link_action:type_name -> google.apps.card.v1.Action
+	18, // 55: google.apps.card.v1.OnClick.card:type_name -> google.apps.card.v1.Card
+	14, // 56: google.apps.card.v1.OpenLink.open_as:type_name -> google.apps.card.v1.OpenLink.OpenAs
+	15, // 57: google.apps.card.v1.OpenLink.on_close:type_name -> google.apps.card.v1.OpenLink.OnClose
+	51, // 58: google.apps.card.v1.Action.parameters:type_name -> google.apps.card.v1.Action.ActionParameter
+	16, // 59: google.apps.card.v1.Action.load_indicator:type_name -> google.apps.card.v1.Action.LoadIndicator
+	17, // 60: google.apps.card.v1.Action.interaction:type_name -> google.apps.card.v1.Action.Interaction
+	2,  // 61: google.apps.card.v1.Card.CardHeader.image_type:type_name -> google.apps.card.v1.Widget.ImageType
+	19, // 62: google.apps.card.v1.Card.Section.widgets:type_name -> google.apps.card.v1.Widget
+	37, // 63: google.apps.card.v1.Card.CardAction.on_click:type_name -> google.apps.card.v1.OnClick
+	29, // 64: google.apps.card.v1.Card.CardFixedFooter.primary_button:type_name -> google.apps.card.v1.Button
+	29, // 65: google.apps.card.v1.Card.CardFixedFooter.secondary_button:type_name -> google.apps.card.v1.Button
+	39, // 66: google.apps.card.v1.DecoratedText.SwitchControl.on_change_action:type_name -> google.apps.card.v1.Action
+	4,  // 67: google.apps.card.v1.DecoratedText.SwitchControl.control_type:type_name -> google.apps.card.v1.DecoratedText.SwitchControl.ControlType
+	7,  // 68: google.apps.card.v1.SelectionInput.PlatformDataSource.common_data_source:type_name -> google.apps.card.v1.SelectionInput.PlatformDataSource.CommonDataSource
+	34, // 69: google.apps.card.v1.Grid.GridItem.image:type_name -> google.apps.card.v1.ImageComponent
+	11, // 70: google.apps.card.v1.Grid.GridItem.layout:type_name -> google.apps.card.v1.Grid.GridItem.GridItemLayout
+	12, // 71: google.apps.card.v1.Columns.Column.horizontal_size_style:type_name -> google.apps.card.v1.Columns.Column.HorizontalSizeStyle
+	3,  // 72: google.apps.card.v1.Columns.Column.horizontal_alignment:type_name -> google.apps.card.v1.Widget.HorizontalAlignment
+	13, // 73: google.apps.card.v1.Columns.Column.vertical_alignment:type_name -> google.apps.card.v1.Columns.Column.VerticalAlignment
+	50, // 74: google.apps.card.v1.Columns.Column.widgets:type_name -> google.apps.card.v1.Columns.Column.Widgets
+	20, // 75: google.apps.card.v1.Columns.Column.Widgets.text_paragraph:type_name -> google.apps.card.v1.TextParagraph
+	21, // 76: google.apps.card.v1.Columns.Column.Widgets.image:type_name -> google.apps.card.v1.Image
+	23, // 77: google.apps.card.v1.Columns.Column.Widgets.decorated_text:type_name -> google.apps.card.v1.DecoratedText
+	26, // 78: google.apps.card.v1.Columns.Column.Widgets.button_list:type_name -> google.apps.card.v1.ButtonList
+	24, // 79: google.apps.card.v1.Columns.Column.Widgets.text_input:type_name -> google.apps.card.v1.TextInput
+	27, // 80: google.apps.card.v1.Columns.Column.Widgets.selection_input:type_name -> google.apps.card.v1.SelectionInput
+	28, // 81: google.apps.card.v1.Columns.Column.Widgets.date_time_picker:type_name -> google.apps.card.v1.DateTimePicker
+	82, // [82:82] is the sub-list for method output_type
+	82, // [82:82] is the sub-list for method input_type
+	82, // [82:82] is the sub-list for extension type_name
+	82, // [82:82] is the sub-list for extension extendee
+	0,  // [0:82] is the sub-list for field type_name
+}
+
+func init() { file_google_apps_card_v1_card_proto_init() }
+func file_google_apps_card_v1_card_proto_init() {
+	if File_google_apps_card_v1_card_proto != nil {
+		return
+	}
+	if !protoimpl.UnsafeEnabled {
+		file_google_apps_card_v1_card_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*Card); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_google_apps_card_v1_card_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*Widget); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_google_apps_card_v1_card_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*TextParagraph); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_google_apps_card_v1_card_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*Image); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_google_apps_card_v1_card_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*Divider); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_google_apps_card_v1_card_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*DecoratedText); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_google_apps_card_v1_card_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*TextInput); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_google_apps_card_v1_card_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*Suggestions); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_google_apps_card_v1_card_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ButtonList); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_google_apps_card_v1_card_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*SelectionInput); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_google_apps_card_v1_card_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*DateTimePicker); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_google_apps_card_v1_card_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*Button); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_google_apps_card_v1_card_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*Icon); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_google_apps_card_v1_card_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*MaterialIcon); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_google_apps_card_v1_card_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ImageCropStyle); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_google_apps_card_v1_card_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*BorderStyle); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_google_apps_card_v1_card_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ImageComponent); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_google_apps_card_v1_card_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*Grid); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_google_apps_card_v1_card_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*Columns); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_google_apps_card_v1_card_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*OnClick); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_google_apps_card_v1_card_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*OpenLink); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_google_apps_card_v1_card_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*Action); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_google_apps_card_v1_card_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*Card_CardHeader); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_google_apps_card_v1_card_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*Card_Section); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_google_apps_card_v1_card_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*Card_CardAction); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_google_apps_card_v1_card_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*Card_CardFixedFooter); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_google_apps_card_v1_card_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*DecoratedText_SwitchControl); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_google_apps_card_v1_card_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*Suggestions_SuggestionItem); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_google_apps_card_v1_card_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*SelectionInput_SelectionItem); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_google_apps_card_v1_card_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*SelectionInput_PlatformDataSource); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_google_apps_card_v1_card_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*Grid_GridItem); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_google_apps_card_v1_card_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*Columns_Column); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_google_apps_card_v1_card_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*Columns_Column_Widgets); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_google_apps_card_v1_card_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*Action_ActionParameter); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+	}
+	file_google_apps_card_v1_card_proto_msgTypes[1].OneofWrappers = []interface{}{
+		(*Widget_TextParagraph)(nil),
+		(*Widget_Image)(nil),
+		(*Widget_DecoratedText)(nil),
+		(*Widget_ButtonList)(nil),
+		(*Widget_TextInput)(nil),
+		(*Widget_SelectionInput)(nil),
+		(*Widget_DateTimePicker)(nil),
+		(*Widget_Divider)(nil),
+		(*Widget_Grid)(nil),
+		(*Widget_Columns)(nil),
+	}
+	file_google_apps_card_v1_card_proto_msgTypes[5].OneofWrappers = []interface{}{
+		(*DecoratedText_Button)(nil),
+		(*DecoratedText_SwitchControl_)(nil),
+		(*DecoratedText_EndIcon)(nil),
+	}
+	file_google_apps_card_v1_card_proto_msgTypes[9].OneofWrappers = []interface{}{
+		(*SelectionInput_ExternalDataSource)(nil),
+		(*SelectionInput_PlatformDataSource_)(nil),
+	}
+	file_google_apps_card_v1_card_proto_msgTypes[12].OneofWrappers = []interface{}{
+		(*Icon_KnownIcon)(nil),
+		(*Icon_IconUrl)(nil),
+		(*Icon_MaterialIcon)(nil),
+	}
+	file_google_apps_card_v1_card_proto_msgTypes[19].OneofWrappers = []interface{}{
+		(*OnClick_Action)(nil),
+		(*OnClick_OpenLink)(nil),
+		(*OnClick_OpenDynamicLinkAction)(nil),
+		(*OnClick_Card)(nil),
+	}
+	file_google_apps_card_v1_card_proto_msgTypes[27].OneofWrappers = []interface{}{
+		(*Suggestions_SuggestionItem_Text)(nil),
+	}
+	file_google_apps_card_v1_card_proto_msgTypes[29].OneofWrappers = []interface{}{
+		(*SelectionInput_PlatformDataSource_CommonDataSource_)(nil),
+	}
+	file_google_apps_card_v1_card_proto_msgTypes[32].OneofWrappers = []interface{}{
+		(*Columns_Column_Widgets_TextParagraph)(nil),
+		(*Columns_Column_Widgets_Image)(nil),
+		(*Columns_Column_Widgets_DecoratedText)(nil),
+		(*Columns_Column_Widgets_ButtonList)(nil),
+		(*Columns_Column_Widgets_TextInput)(nil),
+		(*Columns_Column_Widgets_SelectionInput)(nil),
+		(*Columns_Column_Widgets_DateTimePicker)(nil),
+	}
+	type x struct{}
+	out := protoimpl.TypeBuilder{
+		File: protoimpl.DescBuilder{
+			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+			RawDescriptor: file_google_apps_card_v1_card_proto_rawDesc,
+			NumEnums:      18,
+			NumMessages:   34,
+			NumExtensions: 0,
+			NumServices:   0,
+		},
+		GoTypes:           file_google_apps_card_v1_card_proto_goTypes,
+		DependencyIndexes: file_google_apps_card_v1_card_proto_depIdxs,
+		EnumInfos:         file_google_apps_card_v1_card_proto_enumTypes,
+		MessageInfos:      file_google_apps_card_v1_card_proto_msgTypes,
+	}.Build()
+	File_google_apps_card_v1_card_proto = out.File
+	file_google_apps_card_v1_card_proto_rawDesc = nil
+	file_google_apps_card_v1_card_proto_goTypes = nil
+	file_google_apps_card_v1_card_proto_depIdxs = nil
+}
diff --git a/regen.txt b/regen.txt
index 631a229..8b5940d 100644
--- a/regen.txt
+++ b/regen.txt
@@ -1 +1 @@
-1cbeafa1527735b8c0cec1112be169b146892c48
\ No newline at end of file
+436a34a5da04978e98859afe7487ce93d08e9c03
\ No newline at end of file