Repository: GoogleContainerTools/skaffold
Pull request #7556 (2022-06-15 21:56:36)

Feat: Implement Services Port Forwarding for Cloud Run
<!-- Thank you for your contribution! -->

<!-- Include if applicable: -->
Fixes: #7429


**Description**
Feat: Support Port Forwarding with the Cloud Run deployer

The feature relies on gcloud being present on the user's machine and on the path. It can forward requests for services that are using IAM authentication if the currently logged in user has permission to access the service and the service is set to allow ingress from external sources.

**User facing changes (remove if N/A)**
The Cloud Run deployer now works with the --port-forward flag. Since Cloud Run only exposes a single port, only the service port is forwarded, not debug ports or user-defined ports.


codecov[bot]: # [Codecov](https://codecov.io/gh/GoogleContainerTools/skaffold/pull/7556?src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=GoogleContainerTools) Report
> Merging [#7556](https://codecov.io/gh/GoogleContainerTools/skaffold/pull/7556?src=pr&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=GoogleContainerTools) (87c9047) into [main](https://codecov.io/gh/GoogleContainerTools/skaffold/commit/290280e8c6c19231e9ed5b5c027f2c01d22f75be?el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=GoogleContainerTools) (290280e) will **decrease** coverage by `4.19%`.
> The diff coverage is `54.07%`.

```diff
@@            Coverage Diff             @@
##             main    #7556      +/-   ##
==========================================
- Coverage   70.48%   66.28%   -4.20%     
==========================================
  Files         515      580      +65     
  Lines       23150    27847    +4697     
==========================================
+ Hits        16317    18459    +2142     
- Misses       5776     8035    +2259     
- Partials     1057     1353     +296     
```


| [Impacted Files](https://codecov.io/gh/GoogleContainerTools/skaffold/pull/7556?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=GoogleContainerTools) | Coverage Δ | |
|---|---|---|
| [cmd/skaffold/app/cmd/credits/export.go](https://codecov.io/gh/GoogleContainerTools/skaffold/pull/7556/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=GoogleContainerTools#diff-Y21kL3NrYWZmb2xkL2FwcC9jbWQvY3JlZGl0cy9leHBvcnQuZ28=) | `0.00% <0.00%> (ø)` | |
| [cmd/skaffold/app/cmd/deploy.go](https://codecov.io/gh/GoogleContainerTools/skaffold/pull/7556/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=GoogleContainerTools#diff-Y21kL3NrYWZmb2xkL2FwcC9jbWQvZGVwbG95Lmdv) | `50.00% <0.00%> (-3.85%)` | :arrow_down: |
| [cmd/skaffold/app/cmd/test.go](https://codecov.io/gh/GoogleContainerTools/skaffold/pull/7556/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=GoogleContainerTools#diff-Y21kL3NrYWZmb2xkL2FwcC9jbWQvdGVzdC5nbw==) | `44.44% <0.00%> (ø)` | |
| [cmd/skaffold/skaffold.go](https://codecov.io/gh/GoogleContainerTools/skaffold/pull/7556/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=GoogleContainerTools#diff-Y21kL3NrYWZmb2xkL3NrYWZmb2xkLmdv) | `0.00% <0.00%> (ø)` | |
| [cmd/skaffold/app/cmd/render.go](https://codecov.io/gh/GoogleContainerTools/skaffold/pull/7556/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=GoogleContainerTools#diff-Y21kL3NrYWZmb2xkL2FwcC9jbWQvcmVuZGVyLmdv) | `35.48% <11.11%> (-5.90%)` | :arrow_down: |
| [cmd/skaffold/app/cmd/inspect\_tests.go](https://codecov.io/gh/GoogleContainerTools/skaffold/pull/7556/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=GoogleContainerTools#diff-Y21kL3NrYWZmb2xkL2FwcC9jbWQvaW5zcGVjdF90ZXN0cy5nbw==) | `62.50% <14.28%> (-1.14%)` | :arrow_down: |
| [cmd/skaffold/app/cmd/lsp.go](https://codecov.io/gh/GoogleContainerTools/skaffold/pull/7556/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=GoogleContainerTools#diff-Y21kL3NrYWZmb2xkL2FwcC9jbWQvbHNwLmdv) | `28.12% <28.12%> (ø)` | |
| [cmd/skaffold/app/cmd/run.go](https://codecov.io/gh/GoogleContainerTools/skaffold/pull/7556/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=GoogleContainerTools#diff-Y21kL3NrYWZmb2xkL2FwcC9jbWQvcnVuLmdv) | `64.28% <33.33%> (-9.63%)` | :arrow_down: |
| [cmd/skaffold/app/cmd/fix.go](https://codecov.io/gh/GoogleContainerTools/skaffold/pull/7556/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=GoogleContainerTools#diff-Y21kL3NrYWZmb2xkL2FwcC9jbWQvZml4Lmdv) | `55.93% <38.88%> (-20.54%)` | :arrow_down: |
| [cmd/skaffold/app/cmd/verify.go](https://codecov.io/gh/GoogleContainerTools/skaffold/pull/7556/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=GoogleContainerTools#diff-Y21kL3NrYWZmb2xkL2FwcC9jbWQvdmVyaWZ5Lmdv) | `41.17% <41.17%> (ø)` | |
| ... and [316 more](https://codecov.io/gh/GoogleContainerTools/skaffold/pull/7556/diff?src=pr&el=tree-more&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=GoogleContainerTools) | |

:mega: Codecov can now indicate which changes are the most critical in Pull Requests. [Learn more](https://about.codecov.io/product/feature/runtime-insights/?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=GoogleContainerTools)


Patch:
diff --git a/docs-v2/content/en/api-v2/skaffold.swagger.json b/docs-v2/content/en/api-v2/skaffold.swagger.json
index cb5aa1685..7bfb89863 100644
--- a/docs-v2/content/en/api-v2/skaffold.swagger.json
+++ b/docs-v2/content/en/api-v2/skaffold.swagger.json
@@ -748,6 +748,12 @@
         },
         "actionableErr": {
           "$ref": "#/definitions/v2ActionableErr"
+        },
+        "hostPlatform": {
+          "type": "string"
+        },
+        "targetPlatforms": {
+          "type": "string"
         }
       },
       "description": "`BuildSubtaskvent` describes the build status per artifact, and will be emitted by Skaffold anytime a build starts or finishes, successfully or not.\nIf the build fails, an error will be attached to the event."
diff --git a/docs-v2/content/en/api/skaffold.swagger.json b/docs-v2/content/en/api/skaffold.swagger.json
index 220b6378e..1baf7a217 100644
--- a/docs-v2/content/en/api/skaffold.swagger.json
+++ b/docs-v2/content/en/api/skaffold.swagger.json
@@ -549,6 +549,18 @@
             "required": false,
             "type": "string"
           },
+          {
+            "name": "event.buildEvent.hostPlatform",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "event.buildEvent.targetPlatforms",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
           {
             "name": "event.deployEvent.status",
             "in": "query",
@@ -3508,6 +3520,12 @@
         },
         "actionableErr": {
           "$ref": "#/definitions/protoActionableErr"
+        },
+        "hostPlatform": {
+          "type": "string"
+        },
+        "targetPlatforms": {
+          "type": "string"
         }
       },
       "description": "`BuildEvent` describes the build status per artifact, and will be emitted by Skaffold anytime a build starts or finishes, successfully or not.\nIf the build fails, an error will be attached to the event."
diff --git a/docs-v2/content/en/docs/references/api-v2/grpc.md b/docs-v2/content/en/docs/references/api-v2/grpc.md
index cf23b2243..3dc09f9e7 100644
--- a/docs-v2/content/en/docs/references/api-v2/grpc.md
+++ b/docs-v2/content/en/docs/references/api-v2/grpc.md
@@ -186,6 +186,8 @@ If the build fails, an error will be attached to the event.
 | step | [string](#string) |  | which step of the build for the artifact oneof: Cache, Build, Push |
 | status | [string](#string) |  | artifact build status oneof: InProgress, Completed, Failed |
 | actionableErr | [ActionableErr](#proto.v2.ActionableErr) |  | actionable error message |
+| hostPlatform | [string](#string) |  | platform of the host machine. For example `linux/amd64` |
+| targetPlatforms | [string](#string) |  | comma-delimited list of build target platforms. For example `linux/amd64,linux/arm64` |
 
 
 
diff --git a/docs-v2/content/en/docs/references/api/grpc.md b/docs-v2/content/en/docs/references/api/grpc.md
index 6395b6433..eecb61e00 100644
--- a/docs-v2/content/en/docs/references/api/grpc.md
+++ b/docs-v2/content/en/docs/references/api/grpc.md
@@ -82,6 +82,8 @@ If the build fails, an error will be attached to the event.
 | err | [string](#string) |  | Deprecated. Use actionableErr.message. error when build status is Failed. |
 | errCode | [enums.StatusCode](#proto.enums.StatusCode) |  | Deprecated. Use actionableErr.errCode. status code representing success or failure |
 | actionableErr | [ActionableErr](#proto.ActionableErr) |  | actionable error message |
+| hostPlatform | [string](#string) |  | architecture of the host machine. For example `linux/amd64` |
+| targetPlatforms | [string](#string) |  | comma-delimited list of build target architectures. For example `linux/amd64,linux/arm64` |
 
 
 
diff --git a/docs/content/en/api-v2/skaffold.swagger.json b/docs/content/en/api-v2/skaffold.swagger.json
index cb5aa1685..7bfb89863 100644
--- a/docs/content/en/api-v2/skaffold.swagger.json
+++ b/docs/content/en/api-v2/skaffold.swagger.json
@@ -748,6 +748,12 @@
         },
         "actionableErr": {
           "$ref": "#/definitions/v2ActionableErr"
+        },
+        "hostPlatform": {
+          "type": "string"
+        },
+        "targetPlatforms": {
+          "type": "string"
         }
       },
       "description": "`BuildSubtaskvent` describes the build status per artifact, and will be emitted by Skaffold anytime a build starts or finishes, successfully or not.\nIf the build fails, an error will be attached to the event."
diff --git a/docs/content/en/api/skaffold.swagger.json b/docs/content/en/api/skaffold.swagger.json
index 220b6378e..a6a534532 100644
--- a/docs/content/en/api/skaffold.swagger.json
+++ b/docs/content/en/api/skaffold.swagger.json
@@ -342,7 +342,9 @@
               "INSPECT_UNKNOWN_ERR",
               "INSPECT_BUILD_ENV_ALREADY_EXISTS_ERR",
               "INSPECT_BUILD_ENV_INCORRECT_TYPE_ERR",
-              "INSPECT_PROFILE_NOT_FOUND_ERR"
+              "INSPECT_PROFILE_NOT_FOUND_ERR",
+              "PORT_FORWARD_RUN_GCLOUD_NOT_FOUND",
+              "PORT_FORWARD_RUN_PROXY_START_ERROR"
             ],
             "default": "OK"
           },
@@ -539,7 +541,9 @@
               "INSPECT_UNKNOWN_ERR",
               "INSPECT_BUILD_ENV_ALREADY_EXISTS_ERR",
               "INSPECT_BUILD_ENV_INCORRECT_TYPE_ERR",
-              "INSPECT_PROFILE_NOT_FOUND_ERR"
+              "INSPECT_PROFILE_NOT_FOUND_ERR",
+              "PORT_FORWARD_RUN_GCLOUD_NOT_FOUND",
+              "PORT_FORWARD_RUN_PROXY_START_ERROR"
             ],
             "default": "OK"
           },
@@ -549,6 +553,18 @@
             "required": false,
             "type": "string"
           },
+          {
+            "name": "event.buildEvent.hostPlatform",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "event.buildEvent.targetPlatforms",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
           {
             "name": "event.deployEvent.status",
             "in": "query",
@@ -754,7 +770,9 @@
               "INSPECT_UNKNOWN_ERR",
               "INSPECT_BUILD_ENV_ALREADY_EXISTS_ERR",
               "INSPECT_BUILD_ENV_INCORRECT_TYPE_ERR",
-              "INSPECT_PROFILE_NOT_FOUND_ERR"
+              "INSPECT_PROFILE_NOT_FOUND_ERR",
+              "PORT_FORWARD_RUN_GCLOUD_NOT_FOUND",
+              "PORT_FORWARD_RUN_PROXY_START_ERROR"
             ],
             "default": "OK"
           },
@@ -951,7 +969,9 @@
               "INSPECT_UNKNOWN_ERR",
               "INSPECT_BUILD_ENV_ALREADY_EXISTS_ERR",
               "INSPECT_BUILD_ENV_INCORRECT_TYPE_ERR",
-              "INSPECT_PROFILE_NOT_FOUND_ERR"
+              "INSPECT_PROFILE_NOT_FOUND_ERR",
+              "PORT_FORWARD_RUN_GCLOUD_NOT_FOUND",
+              "PORT_FORWARD_RUN_PROXY_START_ERROR"
             ],
             "default": "OK"
           },
@@ -1248,7 +1268,9 @@
               "INSPECT_UNKNOWN_ERR",
               "INSPECT_BUILD_ENV_ALREADY_EXISTS_ERR",
               "INSPECT_BUILD_ENV_INCORRECT_TYPE_ERR",
-              "INSPECT_PROFILE_NOT_FOUND_ERR"
+              "INSPECT_PROFILE_NOT_FOUND_ERR",
+              "PORT_FORWARD_RUN_GCLOUD_NOT_FOUND",
+              "PORT_FORWARD_RUN_PROXY_START_ERROR"
             ],
             "default": "OK"
           },
@@ -1445,7 +1467,9 @@
               "INSPECT_UNKNOWN_ERR",
               "INSPECT_BUILD_ENV_ALREADY_EXISTS_ERR",
               "INSPECT_BUILD_ENV_INCORRECT_TYPE_ERR",
-              "INSPECT_PROFILE_NOT_FOUND_ERR"
+              "INSPECT_PROFILE_NOT_FOUND_ERR",
+              "PORT_FORWARD_RUN_GCLOUD_NOT_FOUND",
+              "PORT_FORWARD_RUN_PROXY_START_ERROR"
             ],
             "default": "OK"
           },
@@ -1672,7 +1696,9 @@
               "INSPECT_UNKNOWN_ERR",
               "INSPECT_BUILD_ENV_ALREADY_EXISTS_ERR",
               "INSPECT_BUILD_ENV_INCORRECT_TYPE_ERR",
-              "INSPECT_PROFILE_NOT_FOUND_ERR"
+              "INSPECT_PROFILE_NOT_FOUND_ERR",
+              "PORT_FORWARD_RUN_GCLOUD_NOT_FOUND",
+              "PORT_FORWARD_RUN_PROXY_START_ERROR"
             ],
             "default": "OK"
           },
@@ -1869,7 +1895,9 @@
               "INSPECT_UNKNOWN_ERR",
               "INSPECT_BUILD_ENV_ALREADY_EXISTS_ERR",
               "INSPECT_BUILD_ENV_INCORRECT_TYPE_ERR",
-              "INSPECT_PROFILE_NOT_FOUND_ERR"
+              "INSPECT_PROFILE_NOT_FOUND_ERR",
+              "PORT_FORWARD_RUN_GCLOUD_NOT_FOUND",
+              "PORT_FORWARD_RUN_PROXY_START_ERROR"
             ],
             "default": "OK"
           },
@@ -2097,7 +2125,9 @@
               "INSPECT_UNKNOWN_ERR",
               "INSPECT_BUILD_ENV_ALREADY_EXISTS_ERR",
               "INSPECT_BUILD_ENV_INCORRECT_TYPE_ERR",
-              "INSPECT_PROFILE_NOT_FOUND_ERR"
+              "INSPECT_PROFILE_NOT_FOUND_ERR",
+              "PORT_FORWARD_RUN_GCLOUD_NOT_FOUND",
+              "PORT_FORWARD_RUN_PROXY_START_ERROR"
             ],
             "default": "OK"
           },
@@ -2294,7 +2324,9 @@
               "INSPECT_UNKNOWN_ERR",
               "INSPECT_BUILD_ENV_ALREADY_EXISTS_ERR",
               "INSPECT_BUILD_ENV_INCORRECT_TYPE_ERR",
-              "INSPECT_PROFILE_NOT_FOUND_ERR"
+              "INSPECT_PROFILE_NOT_FOUND_ERR",
+              "PORT_FORWARD_RUN_GCLOUD_NOT_FOUND",
+              "PORT_FORWARD_RUN_PROXY_START_ERROR"
             ],
             "default": "OK"
           },
@@ -2552,7 +2584,9 @@
               "INSPECT_UNKNOWN_ERR",
               "INSPECT_BUILD_ENV_ALREADY_EXISTS_ERR",
               "INSPECT_BUILD_ENV_INCORRECT_TYPE_ERR",
-              "INSPECT_PROFILE_NOT_FOUND_ERR"
+              "INSPECT_PROFILE_NOT_FOUND_ERR",
+              "PORT_FORWARD_RUN_GCLOUD_NOT_FOUND",
+              "PORT_FORWARD_RUN_PROXY_START_ERROR"
             ],
             "default": "OK"
           },
@@ -2761,7 +2795,9 @@
               "INSPECT_UNKNOWN_ERR",
               "INSPECT_BUILD_ENV_ALREADY_EXISTS_ERR",
               "INSPECT_BUILD_ENV_INCORRECT_TYPE_ERR",
-              "INSPECT_PROFILE_NOT_FOUND_ERR"
+              "INSPECT_PROFILE_NOT_FOUND_ERR",
+              "PORT_FORWARD_RUN_GCLOUD_NOT_FOUND",
+              "PORT_FORWARD_RUN_PROXY_START_ERROR"
             ],
             "default": "OK"
           },
@@ -2970,7 +3006,9 @@
               "INSPECT_UNKNOWN_ERR",
               "INSPECT_BUILD_ENV_ALREADY_EXISTS_ERR",
               "INSPECT_BUILD_ENV_INCORRECT_TYPE_ERR",
-              "INSPECT_PROFILE_NOT_FOUND_ERR"
+              "INSPECT_PROFILE_NOT_FOUND_ERR",
+              "PORT_FORWARD_RUN_GCLOUD_NOT_FOUND",
+              "PORT_FORWARD_RUN_PROXY_START_ERROR"
             ],
             "default": "OK"
           },
@@ -3383,7 +3421,9 @@
         "INSPECT_UNKNOWN_ERR",
         "INSPECT_BUILD_ENV_ALREADY_EXISTS_ERR",
         "INSPECT_BUILD_ENV_INCORRECT_TYPE_ERR",
-        "INSPECT_PROFILE_NOT_FOUND_ERR"
+        "INSPECT_PROFILE_NOT_FOUND_ERR",
+        "PORT_FORWARD_RUN_GCLOUD_NOT_FOUND",
+        "PORT_FORWARD_RUN_PROXY_START_ERROR"
       ],
       "default": "OK",
       "description": "Enum for Status codes<br>\nThese error codes are prepended by Phase Name e.g.\nINIT, BUILD, TEST, DEPLOY, STATUSCHECK, DEVINIT<br>\nFor Success Error codes, use range 200 to 250.<br>\nFor Unknown error codes, use range 500 to 600.<br>\nFor Cancelled Error code, use range 800 to 850.<br>\n- OK: A default status code for events that do not have an associated phase.\nTypically seen with the DevEndEvent event on success.\n - STATUSCHECK_SUCCESS: Status Check Success\n - BUILD_SUCCESS: Build Success\n - RENDER_SUCCESS: Render Success\n - DEPLOY_SUCCESS: Deploy Success\n - TEST_SUCCESS: Test Success\n - BUILD_PUSH_ACCESS_DENIED: Build error due to push access denied\n - BUILD_PROJECT_NOT_FOUND: Build error due to GCP project not found.\n - BUILD_DOCKER_DAEMON_NOT_RUNNING: Docker build error due to docker daemon not running\n - BUILD_USER_ERROR: Build error due to user application code, e.g. compilation error, dockerfile error etc\n - BUILD_DOCKER_UNAVAILABLE: Build error due to docker not available\n - BUILD_DOCKER_UNAUTHORIZED: Docker build error due to user not authorized to perform the action\n - BUILD_DOCKER_SYSTEM_ERR: Docker system build error\n - BUILD_DOCKER_NOT_MODIFIED_ERR: Docker build error due to Docker build container is already in the desired state\n - BUILD_DOCKER_NOT_IMPLEMENTED_ERR: Docker build error indicating a feature not supported\n - BUILD_DOCKER_DATA_LOSS_ERR: Docker build error indicates that for given build, data was lost or there is data corruption\n - BUILD_DOCKER_FORBIDDEN_ERR: Docker build error indicates user is forbidden to perform the build or step/action.\n - BUILD_DOCKER_CONFLICT_ERR: Docker build error due to some internal error and docker container state conflicts with the requested action and can't be performed\n - BUILD_DOCKER_ERROR_NOT_FOUND: Docker build error indicates the requested object does not exist\n - BUILD_DOCKER_INVALID_PARAM_ERR: Docker build error indication invalid parameter sent to docker command\n - BUILD_DOCKERFILE_NOT_FOUND: Docker build failed due to dockerfile not found\n - BUILD_DOCKER_CACHE_FROM_PULL_ERR: Docker build failed due `cacheFrom` user config error\n - BUILD_DOCKER_GET_DIGEST_ERR: Build error due to digest for built artifact could not be retrieved from docker daemon.\n - BUILD_DOCKER_NO_SPACE_ERR: Build error due no space left in docker.\n - BUILD_REGISTRY_GET_DIGEST_ERR: Build error due to digest for built artifact could not be retrieved from registry.\n - BUILD_UNKNOWN_JIB_PLUGIN_TYPE: Build error indicating unknown Jib plugin type. Should be one of [maven, gradle]\n - BUILD_JIB_GRADLE_DEP_ERR: Build error determining dependency for jib gradle project.\n - BUILD_JIB_MAVEN_DEP_ERR: Build error determining dependency for jib gradle project.\n - INIT_DOCKER_NETWORK_LISTING_CONTAINERS: Docker build error when listing containers.\n - INIT_DOCKER_NETWORK_INVALID_CONTAINER_NAME: Docker build error indicating an invalid container name (or id).\n - INIT_DOCKER_NETWORK_CONTAINER_DOES_NOT_EXIST: Docker build error indicating the container referenced does not exists in the docker context used.\n - INIT_DOCKER_NETWORK_INVALID_MODE: Docker Network invalid mode\n - INIT_DOCKER_NETWORK_PARSE_ERR: Error parsing Docker Network mode\n - BUILD_GCB_CREATE_BUILD_ERR: GCB Create Build Error\n - BUILD_GCB_GET_BUILD_ID_ERR: GCB error indicating an error to fetch build id.\n - BUILD_GCB_GET_BUILD_STATUS_ERR: GCB error indicating an error to fetch build status.\n - BUILD_GCB_GET_BUILD_LOG_ERR: GCB error indicating an error to fetch build logs.\n - BUILD_GCB_COPY_BUILD_LOG_ERR: GCB error indicating an error to fetch build status.\n - BUILD_GCB_GET_BUILT_IMAGE_ERR: GCB error indicating an error retrieving the built image id.\n - BUILD_GCB_BUILD_FAILED: GCB error indicating build failure.\n - BUILD_GCB_BUILD_INTERNAL_ERR: GCB error indicating build failure due to internal errror.\n - BUILD_GCB_BUILD_TIMEOUT: GCB error indicating build failure due to timeout.\n - BUILD_GCB_GENERATE_BUILD_DESCRIPTOR_ERR: GCB error to generate the build descriptor.\n - BUILD_GCB_UPLOAD_TO_GCS_ERR: GCB error to upload to GCS.\n - BUILD_GCB_JIB_DEPENDENCY_ERR: GCB error to fetch jib artifact dependency.\n - BUILD_GCB_GET_DEPENDENCY_ERR: GCB error to fetch artifact dependency.\n - BUILD_GCB_GET_GCS_BUCKET_ERR: GCB error to get GCS bucket.\n - BUILD_GCB_CREATE_BUCKET_ERR: GCB error to create a GCS bucket.\n - BUILD_GCB_EXTRACT_PROJECT_ID: GCB error to extract Project ID.\n - BUILD_GET_CLOUD_STORAGE_CLIENT_ERR: GCB error to get cloud storage client to perform GCS operation.\n - BUILD_GET_CLOUD_BUILD_CLIENT_ERR: GCB error to get cloud build client to perform GCB operations.\n - BUILD_UNKNOWN_PLATFORM_FLAG: Value provided to --platform flag cannot be parsed\n - STATUSCHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUSCHECK_CONTAINER_CREATING: Container creating error\n - STATUSCHECK_RUN_CONTAINER_ERR: Container run error\n - STATUSCHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUSCHECK_DEPLOYMENT_ROLLOUT_PENDING: Deployment waiting for rollout\n - STATUSCHECK_STANDALONE_PODS_PENDING: Standalone pods pending to stabilize\n - STATUSCHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUSCHECK_UNHEALTHY: Readiness probe failed\n - STATUSCHECK_CONTAINER_EXEC_ERROR: Executable binary format error\n - STATUSCHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUSCHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUSCHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUSCHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUSCHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUSCHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUSCHECK_NODE_NOT_READY: Node not ready error\n - STATUSCHECK_FAILED_SCHEDULING: Scheduler failure error\n - STATUSCHECK_KUBECTL_CONNECTION_ERR: Kubectl connection error\n - STATUSCHECK_KUBECTL_PID_KILLED: Kubectl process killed error\n - STATUSCHECK_KUBECTL_CLIENT_FETCH_ERR: Kubectl client fetch err\n - STATUSCHECK_POD_INITIALIZING: Pod Initializing\n - STATUSCHECK_CONFIG_CONNECTOR_IN_PROGRESS: The actual state of the resource has not yet reached the desired state\n - STATUSCHECK_CONFIG_CONNECTOR_FAILED: The process of reconciling the actual state with the desired state has encountered an error\n - STATUSCHECK_CONFIG_CONNECTOR_TERMINATING: The resource is in the process of being deleted\n - STATUSCHECK_CONFIG_CONNECTOR_NOT_FOUND: The resource does not exist\n - UNKNOWN_ERROR: Could not determine error and phase\n - STATUSCHECK_UNKNOWN: Status Check error unknown\n - STATUSCHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUSCHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - STATUSCHECK_UNKNOWN_EVENT: Container event reason unknown\n - STATUSCHECK_INTERNAL_ERROR: Status Check internal error\n - DEPLOY_UNKNOWN: Deploy failed due to unknown reason\n - SYNC_UNKNOWN: SYNC failed due to known reason\n - BUILD_UNKNOWN: Build failed due to unknown reason\n - DEVINIT_UNKNOWN: Dev Init failed due to unknown reason\n - CLEANUP_UNKNOWN: Cleanup failed due to unknown reason\n - INIT_UNKNOWN: Initialization of the Skaffold session failed due to unknown reason(s)\n - BUILD_DOCKER_UNKNOWN: Build failed due to docker unknown error\n - TEST_UNKNOWN: Test failed due to unknown reason\n - BUILD_GCB_BUILD_UNKNOWN_STATUS: GCB error indicating build failed due to unknown status.\n - SYNC_INIT_ERROR: File Sync Initialize failure\n - DEVINIT_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEVINIT_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEVINIT_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEVINIT_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file.\n - DEVINIT_UNSUPPORTED_V1_MANIFEST: Failed to configure watcher for build dependencies for a base image with v1 manifest.\n - DEVINIT_REGISTER_RENDER_DEPS: Failed to configure watcher for render dependencies in dev loop\n - STATUSCHECK_USER_CANCELLED: User cancelled the skaffold dev run\n - STATUSCHECK_DEADLINE_EXCEEDED: Deadline for status check exceeded\n - BUILD_CANCELLED: Build Cancelled\n - DEPLOY_CANCELLED: Deploy cancelled due to user cancellation or one or more deployers failed.\n - BUILD_DOCKER_CANCELLED: Docker build cancelled.\n - BUILD_DOCKER_DEADLINE: Build error due to docker deadline was reached before the docker action completed\n - BUILD_GCB_BUILD_CANCELLED: GCB Build cancelled.\n - INIT_CREATE_TAGGER_ERROR: Skaffold was unable to create the configured tagger\n - INIT_MINIKUBE_PAUSED_ERROR: Skaffold was unable to start as Minikube appears to be paused\n - INIT_MINIKUBE_NOT_RUNNING_ERROR: Skaffold was unable to start as Minikube appears to be stopped\n - INIT_CREATE_BUILDER_ERROR: Skaffold was unable to create a configured image builder\n - INIT_CREATE_DEPLOYER_ERROR: Skaffold was unable to create a configured deployer\n - INIT_CREATE_TEST_DEP_ERROR: Skaffold was unable to create a configured test\n - INIT_CACHE_ERROR: Skaffold encountered an error validating the artifact cache\n - INIT_CREATE_WATCH_TRIGGER_ERROR: Skaffold encountered an error when configuring file watching\n - INIT_CREATE_ARTIFACT_DEP_ERROR: Skaffold encountered an error when evaluating artifact dependencies\n - DEPLOY_CLUSTER_CONNECTION_ERR: Unable to connect to cluster\n - DEPLOY_DEBUG_HELPER_RETRIEVE_ERR: Could not retrieve debug helpers.\n - DEPLOY_CLEANUP_ERR: Deploy clean up error\n - DEPLOY_HELM_APPLY_LABELS: Unable to apply helm labels.\n - DEPLOY_HELM_USER_ERR: Deploy error due to user deploy config for helm deployer\n - DEPLOY_NO_MATCHING_BUILD: An image was referenced with no matching build result\n - DEPLOY_HELM_VERSION_ERR: Unable to get helm client version\n - DEPLOY_HELM_MIN_VERSION_ERR: Helm version not supported.\n - DEPLOY_KUBECTL_VERSION_ERR: Unable to retrieve kubectl version\n - DEPLOY_KUBECTL_OFFLINE_MODE_ERR: User specified offline mode for rendering but remote manifests presents.\n - DEPLOY_ERR_WAITING_FOR_DELETION: Error waiting for previous version deletion before next version is active.\n - DEPLOY_READ_MANIFEST_ERR: Error reading manifests\n - DEPLOY_READ_REMOTE_MANIFEST_ERR: Error reading remote manifests\n - DEPLOY_LIST_MANIFEST_ERR: Errors listing manifests\n - DEPLOY_KUBECTL_USER_ERR: Deploy error due to user deploy config for kubectl deployer\n - DEPLOY_KUSTOMIZE_USER_ERR: Deploy error due to user deploy config for kustomize deployer\n - DEPLOY_REPLACE_IMAGE_ERR: Error replacing a built artifact in the manifests\n - DEPLOY_TRANSFORM_MANIFEST_ERR: Error transforming a manifest during skaffold debug\n - DEPLOY_SET_LABEL_ERR: Error setting user specified additional labels.\n - DEPLOY_MANIFEST_WRITE_ERR: Error writing hydrated kubernetes manifests.\n - DEPLOY_PARSE_MANIFEST_IMAGES_ERR: Error getting images from a kubernetes manifest.\n - DEPLOY_HELM_CREATE_NS_NOT_AVAILABLE: Helm config `createNamespace` not available\n - DEPLOY_CLUSTER_INTERNAL_SYSTEM_ERR: Kubernetes cluster reported an internal system error\n - DEPLOY_KPTFILE_INIT_ERR: The Kptfile cannot be created via `kpt live init`.\n - DEPLOY_KPT_SOURCE_ERR: The `kpt fn source` cannot read the given manifests.\n - DEPLOY_KPTFILE_INVALID_YAML_ERR: The Kptfile exists but cannot be opened or parsed.\n - DEPLOY_KPT_APPLY_ERR: kpt fails to live apply the manifests to the cluster.\n - DEPLOY_GET_CLOUD_RUN_CLIENT_ERR: The Cloud Run Client could not be created\n - DEPLOY_CLOUD_RUN_GET_SERVICE_ERR: The Cloud Run Client could not get details about the service.\n - DEPLOY_CLOUD_RUN_UPDATE_SERVICE_ERR: The Cloud Run Client was unable to update the service.\n - DEPLOY_CLOUD_RUN_DELETE_SERVICE_ERR: The Cloud Run Client was unable to delete the service.\n - TEST_USER_CONFIG_ERR: Error expanding paths\n - TEST_CST_USER_ERR: Error running container-structure-test\n - TEST_IMG_PULL_ERR: Unable to docker pull image\n - TEST_CUSTOM_CMD_PARSE_ERR: Unable to parse test command\n - TEST_CUSTOM_CMD_RUN_NON_ZERO_EXIT_ERR: Command returned non-zero exit code\n - TEST_CUSTOM_CMD_RUN_TIMEDOUT_ERR: command cancelled or timed out\n - TEST_CUSTOM_CMD_RUN_CANCELLED_ERR: command cancelled or timed out\n - TEST_CUSTOM_CMD_RUN_EXECUTION_ERR: command context error\n - TEST_CUSTOM_CMD_RUN_EXITED_ERR: command exited\n - TEST_CUSTOM_CMD_RUN_ERR: error running cmd\n - TEST_CUSTOM_DEPENDENCIES_CMD_ERR: Error getting dependencies from command\n - TEST_CUSTOM_DEPENDENCIES_UNMARSHALL_ERR: Unmarshalling dependency output error\n - TEST_CUSTOM_CMD_RETRIEVE_ERR: Error retrieving the command\n - RENDER_KPTFILE_INIT_ERR: Render errors\nThe Kptfile cannot be created via `kpt pkg init`.\n - RENDER_KPTFILE_INVALID_YAML_ERR: The Kptfile is not a valid yaml file\n - RENDER_KPTFILE_INVALID_SCHEMA_ERR: The Kptfile is not a valid API schema\n - CONFIG_FILE_PARSING_ERR: Catch-all configuration file parsing error\n - CONFIG_FILE_NOT_FOUND_ERR: Main configuration file not found\n - CONFIG_DEPENDENCY_NOT_FOUND_ERR: Dependency configuration file not found\n - CONFIG_DUPLICATE_NAMES_SAME_FILE_ERR: Duplicate config names in the same configuration file\n - CONFIG_DUPLICATE_NAMES_ACROSS_FILES_ERR: Duplicate config names in two configuration files\n - CONFIG_BAD_FILTER_ERR: No configs matching configs filter\n - CONFIG_ZERO_FOUND_ERR: No configs parsed from current file\n - CONFIG_APPLY_PROFILES_ERR: Failed to apply profiles to config\n - CONFIG_DEFAULT_VALUES_ERR: Failed to set default config values\n - CONFIG_FILE_PATHS_SUBSTITUTION_ERR: Failed to substitute absolute file paths in config\n - CONFIG_MULTI_IMPORT_PROFILE_CONFLICT_ERR: Same config imported at least twice with different set of profiles\n - CONFIG_PROFILES_NOT_FOUND_ERR: Profile selection did not match known profile names\n - CONFIG_UNKNOWN_API_VERSION_ERR: Config API version not found\n - CONFIG_UNKNOWN_VALIDATOR: The validator is not allowed in skaffold-managed mode.\n - CONFIG_UNKNOWN_TRANSFORMER: The transformer is not allowed in skaffold-managed mode.\n - CONFIG_MISSING_MANIFEST_FILE_ERR: Manifest file not found\n - CONFIG_REMOTE_REPO_CACHE_NOT_FOUND_ERR: Remote config repository cache not found and sync disabled\n - INSPECT_UNKNOWN_ERR: Catch-all `skaffold inspect` command error\n - INSPECT_BUILD_ENV_ALREADY_EXISTS_ERR: Trying to add new build environment that already exists\n - INSPECT_BUILD_ENV_INCORRECT_TYPE_ERR: Trying to modify build environment that doesn't exist\n - INSPECT_PROFILE_NOT_FOUND_ERR: Trying to modify a profile that doesn't exist"
@@ -3508,6 +3548,12 @@
         },
         "actionableErr": {
           "$ref": "#/definitions/protoActionableErr"
+        },
+        "hostPlatform": {
+          "type": "string"
+        },
+        "targetPlatforms": {
+          "type": "string"
         }
       },
       "description": "`BuildEvent` describes the build status per artifact, and will be emitted by Skaffold anytime a build starts or finishes, successfully or not.\nIf the build fails, an error will be attached to the event."
diff --git a/docs/content/en/docs/references/api-v2/grpc.md b/docs/content/en/docs/references/api-v2/grpc.md
index cf23b2243..3dc09f9e7 100644
--- a/docs/content/en/docs/references/api-v2/grpc.md
+++ b/docs/content/en/docs/references/api-v2/grpc.md
@@ -186,6 +186,8 @@ If the build fails, an error will be attached to the event.
 | step | [string](#string) |  | which step of the build for the artifact oneof: Cache, Build, Push |
 | status | [string](#string) |  | artifact build status oneof: InProgress, Completed, Failed |
 | actionableErr | [ActionableErr](#proto.v2.ActionableErr) |  | actionable error message |
+| hostPlatform | [string](#string) |  | platform of the host machine. For example `linux/amd64` |
+| targetPlatforms | [string](#string) |  | comma-delimited list of build target platforms. For example `linux/amd64,linux/arm64` |
 
 
 
diff --git a/docs/content/en/docs/references/api/grpc.md b/docs/content/en/docs/references/api/grpc.md
index 6395b6433..3196f84da 100644
--- a/docs/content/en/docs/references/api/grpc.md
+++ b/docs/content/en/docs/references/api/grpc.md
@@ -82,6 +82,8 @@ If the build fails, an error will be attached to the event.
 | err | [string](#string) |  | Deprecated. Use actionableErr.message. error when build status is Failed. |
 | errCode | [enums.StatusCode](#proto.enums.StatusCode) |  | Deprecated. Use actionableErr.errCode. status code representing success or failure |
 | actionableErr | [ActionableErr](#proto.ActionableErr) |  | actionable error message |
+| hostPlatform | [string](#string) |  | architecture of the host machine. For example `linux/amd64` |
+| targetPlatforms | [string](#string) |  | comma-delimited list of build target architectures. For example `linux/amd64,linux/arm64` |
 
 
 
@@ -1082,6 +1084,8 @@ For Cancelled Error code, use range 800 to 850.<br>
 | INSPECT_BUILD_ENV_ALREADY_EXISTS_ERR | 1302 | Trying to add new build environment that already exists |
 | INSPECT_BUILD_ENV_INCORRECT_TYPE_ERR | 1303 | Trying to modify build environment that doesn't exist |
 | INSPECT_PROFILE_NOT_FOUND_ERR | 1304 | Trying to modify a profile that doesn't exist |
+| PORT_FORWARD_RUN_GCLOUD_NOT_FOUND | 1601 |  |
+| PORT_FORWARD_RUN_PROXY_START_ERROR | 1602 |  |
 
 
 
diff --git a/pkg/skaffold/build/cache/retrieve.go b/pkg/skaffold/build/cache/retrieve.go
index 7d5f72418..f7c816426 100644
--- a/pkg/skaffold/build/cache/retrieve.go
+++ b/pkg/skaffold/build/cache/retrieve.go
@@ -61,7 +61,7 @@ func (c *cache) Build(ctx context.Context, out io.Writer, tags tag.ImageTags, ar
 	var needToBuild []*latest.Artifact
 	var alreadyBuilt []graph.Artifact
 	for i, artifact := range artifacts {
-		eventV2.CacheCheckInProgress(artifact.ImageName)
+		eventV2.CacheCheckInProgress(artifact.ImageName, platforms.GetPlatforms(artifact.ImageName).String())
 		out, ctx := output.WithEventContext(ctx, out, constants.Build, artifact.ImageName)
 		output.Default.Fprintf(out, " - %s: ", artifact.ImageName)
 
@@ -73,14 +73,14 @@ func (c *cache) Build(ctx context.Context, out io.Writer, tags tag.ImageTags, ar
 			return nil, result.err
 
 		case needsBuilding:
-			eventV2.CacheCheckMiss(artifact.ImageName)
+			eventV2.CacheCheckMiss(artifact.ImageName, platforms.GetPlatforms(artifact.ImageName).String())
 			output.Yellow.Fprintln(out, "Not found. Building")
 			hashByName[artifact.ImageName] = result.Hash()
 			needToBuild = append(needToBuild, artifact)
 			continue
 
 		case needsTagging:
-			eventV2.CacheCheckHit(artifact.ImageName)
+			eventV2.CacheCheckHit(artifact.ImageName, platforms.GetPlatforms(artifact.ImageName).String())
 			output.Green.Fprintln(out, "Found. Tagging")
 			if err := result.Tag(ctx, c, platforms); err != nil {
 				endTrace(instrumentation.TraceEndError(err))
@@ -88,7 +88,7 @@ func (c *cache) Build(ctx context.Context, out io.Writer, tags tag.ImageTags, ar
 			}
 
 		case needsPushing:
-			eventV2.CacheCheckHit(artifact.ImageName)
+			eventV2.CacheCheckHit(artifact.ImageName, platforms.GetPlatforms(artifact.ImageName).String())
 			output.Green.Fprintln(out, "Found. Pushing")
 			if err := result.Push(ctx, out, c); err != nil {
 				endTrace(instrumentation.TraceEndError(err))
@@ -97,7 +97,7 @@ func (c *cache) Build(ctx context.Context, out io.Writer, tags tag.ImageTags, ar
 			}
 
 		default:
-			eventV2.CacheCheckHit(artifact.ImageName)
+			eventV2.CacheCheckHit(artifact.ImageName, platforms.GetPlatforms(artifact.ImageName).String())
 			isLocal, err := c.isLocalImage(artifact.ImageName)
 			if err != nil {
 				endTrace(instrumentation.TraceEndError(err))
diff --git a/pkg/skaffold/build/scheduler.go b/pkg/skaffold/build/scheduler.go
index 787af82d0..0edf680f1 100644
--- a/pkg/skaffold/build/scheduler.go
+++ b/pkg/skaffold/build/scheduler.go
@@ -92,15 +92,15 @@ func (s *scheduler) build(ctx context.Context, tags tag.ImageTags, platforms pla
 	err := n.waitForDependencies(ctx)
 	if err != nil {
 		// `waitForDependencies` only returns `context.Canceled` error
-		event.BuildCanceled(a.ImageName)
-		eventV2.BuildCanceled(a.ImageName, err)
+		event.BuildCanceled(a.ImageName, platforms.GetPlatforms(a.ImageName).String())
+		eventV2.BuildCanceled(a.ImageName, platforms.GetPlatforms(a.ImageName).String(), err)
 		return err
 	}
 	release := s.concurrencySem.acquire()
 	defer release()
 
-	event.BuildInProgress(a.ImageName)
-	eventV2.BuildInProgress(a.ImageName)
+	event.BuildInProgress(a.ImageName, platforms.GetPlatforms(a.ImageName).String())
+	eventV2.BuildInProgress(a.ImageName, platforms.GetPlatforms(a.ImageName).String())
 	ctx, endTrace := instrumentation.StartTrace(ctx, "build_BuildInProgress", map[string]string{
 		"ArtifactNumber": strconv.Itoa(i),
 		"ImageName":      instrumentation.PII(a.ImageName),
@@ -109,8 +109,8 @@ func (s *scheduler) build(ctx context.Context, tags tag.ImageTags, platforms pla
 
 	w, closeFn, err := s.logger.GetWriter(ctx)
 	if err != nil {
-		event.BuildFailed(a.ImageName, err)
-		eventV2.BuildFailed(a.ImageName, err)
+		event.BuildFailed(a.ImageName, platforms.GetPlatforms(a.ImageName).String(), err)
+		eventV2.BuildFailed(a.ImageName, platforms.GetPlatforms(a.ImageName).String(), err)
 		endTrace(instrumentation.TraceEndError(err))
 		return err
 	}
@@ -120,25 +120,25 @@ func (s *scheduler) build(ctx context.Context, tags tag.ImageTags, platforms pla
 	output.Default.Fprintf(w, "Building [%s]...\n", a.ImageName)
 	finalTag, err := performBuild(ctx, w, tags, platforms, a, s.artifactBuilder)
 	if err != nil {
-		event.BuildFailed(a.ImageName, err)
+		event.BuildFailed(a.ImageName, platforms.GetPlatforms(a.ImageName).String(), err)
 		endTrace(instrumentation.TraceEndError(err))
 		if errors.Is(ctx.Err(), context.Canceled) {
 			output.Yellow.Fprintf(w, "Build [%s] was canceled\n", a.ImageName)
-			eventV2.BuildCanceled(a.ImageName, err)
+			eventV2.BuildCanceled(a.ImageName, platforms.GetPlatforms(a.ImageName).String(), err)
 			return err
 		}
 		if s.reportFailure {
 			output.Red.Fprintf(w, "Build [%s] failed: %v\n", a.ImageName, err)
 		}
-		eventV2.BuildFailed(a.ImageName, err)
+		eventV2.BuildFailed(a.ImageName, platforms.GetPlatforms(a.ImageName).String(), err)
 		return fmt.Errorf("build [%s] failed: %w", a.ImageName, err)
 	}
 
 	output.Default.Fprintf(w, "Build [%s] succeeded\n", a.ImageName)
 	s.results.Record(a, finalTag)
 	n.markComplete()
-	event.BuildComplete(a.ImageName)
-	eventV2.BuildSucceeded(a.ImageName)
+	event.BuildComplete(a.ImageName, platforms.GetPlatforms(a.ImageName).String())
+	eventV2.BuildSucceeded(a.ImageName, platforms.GetPlatforms(a.ImageName).String())
 	return nil
 }
 
diff --git a/pkg/skaffold/deploy/cloudrun/accessor.go b/pkg/skaffold/deploy/cloudrun/accessor.go
new file mode 100644
index 000000000..a53911b3d
--- /dev/null
+++ b/pkg/skaffold/deploy/cloudrun/accessor.go
@@ -0,0 +1,184 @@
+/*
+Copyright 2022 The Skaffold Authors
+
+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.
+*/
+package cloudrun
+
+import (
+	"context"
+	"fmt"
+	"io"
+	"os/exec"
+	"strconv"
+
+	"golang.org/x/sync/singleflight"
+
+	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/constants"
+	sErrors "github.com/GoogleContainerTools/skaffold/pkg/skaffold/errors"
+	eventV2 "github.com/GoogleContainerTools/skaffold/pkg/skaffold/event/v2"
+	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/output"
+	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/schema/latest"
+	schemautil "github.com/GoogleContainerTools/skaffold/pkg/skaffold/schema/util"
+	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/util"
+	"github.com/GoogleContainerTools/skaffold/proto/v1"
+)
+
+var (
+	retrieveAvailablePort = util.GetAvailablePort
+	gcloudInstalled       = findGcloud
+)
+
+type resourceTracker struct {
+	resources          []forwardedResource
+	configuredForwards []*latest.PortForwardResource
+	forwardedPorts     *util.PortSet
+}
+
+type forwardedResource struct {
+	name    RunResourceName
+	cancel  context.CancelFunc
+	started bool
+	port    int
+}
+
+type forwarder interface {
+	// Start initiates the forwarder's operation. It should not return until any ports have been allocated.
+	Start(ctx context.Context, out io.Writer) error
+	Stop()
+}
+
+// RunAccessor is an access.Accessor for Cloud Run resources
+// It uses `gcloud run proxy``to enable port forwarding for Cloud Run. This makes it easier to call IAM-protected Cloud Run services
+// by going through localhost. In order to set up forwarding, the services must have their ingress setting set to "all", gcloud  must be
+// installed and on the path, and the currently configured gcloud user has run.services.invoke permission on the services being proxied
+type RunAccessor struct {
+	resources  *resourceTracker
+	forwarders []forwarder
+	singleRun  singleflight.Group
+	label      string
+}
+
+// NewAccessor creates a new RunAccessor to port forward Cloud Run services
+func NewAccessor(cfg Config, label string) *RunAccessor {
+	var forwarders []forwarder
+	resources := &resourceTracker{forwardedPorts: &util.PortSet{}, configuredForwards: cfg.PortForwardResources()}
+	options := cfg.PortForwardOptions()
+
+	if options.ForwardServices(cfg.Mode()) {
+		forwarders = append(forwarders, &runProxyForwarder{resources: resources})
+	}
+	return &RunAccessor{
+		resources: resources, forwarders: forwarders, label: label, singleRun: singleflight.Group{}}
+}
+
+// AddResource tracks an additional resource to port forward
+func (r *RunAccessor) AddResource(resource RunResourceName) {
+	port := 0
+	for _, forward := range r.resources.configuredForwards {
+		if forward.Type == "service" && forward.Name == resource.Service {
+			port = forward.LocalPort
+		}
+	}
+	r.resources.resources = append(r.resources.resources, forwardedResource{name: resource, started: false, port: port})
+}
+
+// Start begins port forwarding for the tracked Cloud Run services.
+func (r *RunAccessor) Start(ctx context.Context, out io.Writer) error {
+	if r == nil {
+		return nil
+	}
+	_, err, _ := r.singleRun.Do(r.label, func() (interface{}, error) {
+		return struct{}{}, r.start(ctx, out)
+	})
+	return err
+}
+
+func (r *RunAccessor) start(ctx context.Context, out io.Writer) error {
+	for _, forwarder := range r.forwarders {
+		if err := forwarder.Start(ctx, out); err != nil {
+			return err
+		}
+	}
+	return nil
+}
+
+// Stop terminates port forwarding for all tracked Cloud Run resources.
+func (r *RunAccessor) Stop() {
+	for _, forwarder := range r.forwarders {
+		forwarder.Stop()
+	}
+}
+
+func findGcloud() bool {
+	cmd := exec.Command("gcloud", "--version")
+	return cmd.Run() == nil
+}
+
+type runProxyForwarder struct {
+	resources *resourceTracker
+}
+
+func (r *runProxyForwarder) Start(ctx context.Context, out io.Writer) error {
+	if !gcloudInstalled() {
+		output.Red.Fprintln(out, "gcloud not found on path. Unable to set up Cloud Run port forwarding")
+		return sErrors.NewError(fmt.Errorf("gcloud not found"), &proto.ActionableErr{ErrCode: proto.StatusCode_PORT_FORWARD_RUN_GCLOUD_NOT_FOUND})
+	}
+	for _, resource := range r.resources.resources {
+		if resource.port == 0 {
+			port := retrieveAvailablePort("localhost", 8080, r.resources.forwardedPorts)
+			resource.port = port
+		}
+		if !resource.started {
+			eventV2.TaskInProgress(constants.PortForward, "port forward URLs")
+			// has not been started yet
+			cctx, cancel := context.WithCancel(ctx)
+			output.Yellow.Fprintf(out, "Forwarding service %s to local port %d\n", resource.name.String(), resource.port)
+			cmd := exec.CommandContext(cctx, "gcloud", getGcloudProxyArgs(resource.name, resource.port)...)
+			cmd.Stdout = out
+			cmd.Stderr = out
+			resource.cancel = cancel
+			if err := cmd.Start(); err != nil {
+				eventV2.TaskFailed(constants.PortForward, err)
+				return sErrors.NewError(fmt.Errorf("unable to start port forward: %w", err), &proto.ActionableErr{ErrCode: proto.StatusCode_PORT_FORWARD_RUN_PROXY_START_ERROR})
+			}
+			go func() {
+				err := cmd.Wait()
+				if err != nil {
+					output.Red.Fprintf(out, "Port forward of %s quit unsuccessfuly: %v", resource.name.String(), err)
+					eventV2.TaskFailed(constants.PortForward, err)
+				} else {
+					eventV2.TaskSucceeded(constants.PortForward)
+				}
+			}()
+			eventV2.PortForwarded(int32(resource.port), schemautil.FromInt(443), "", "", resource.name.Project, "", "run-service", resource.name.Service, resource.name.String())
+			resource.started = true
+		}
+	}
+	return nil
+}
+
+func getGcloudProxyArgs(resource RunResourceName, port int) []string {
+	return []string{"beta", "run", "services", "proxy", "--project", resource.Project, "--region", resource.Region, "--port", strconv.Itoa(port), resource.Service}
+}
+
+// Stop terminates port forwarding for all tracked Cloud Run resources.
+func (r *runProxyForwarder) Stop() {
+	for _, resource := range r.resources.resources {
+		if resource.cancel != nil {
+			resource.cancel()
+			resource.cancel = nil
+			resource.started = false
+		}
+	}
+}
diff --git a/pkg/skaffold/deploy/cloudrun/cloudrun.go b/pkg/skaffold/deploy/cloudrun/cloudrun.go
new file mode 100644
index 000000000..4b9320693
--- /dev/null
+++ b/pkg/skaffold/deploy/cloudrun/cloudrun.go
@@ -0,0 +1,30 @@
+/*
+Copyright 2022 The Skaffold Authors
+
+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.
+*/
+package cloudrun
+
+import "fmt"
+
+// RunResourceName represents a Cloud Run Service
+type RunResourceName struct {
+	Project string
+	Region  string
+	Service string
+}
+
+// String returns the path representation of a Cloud Run Service.
+func (n RunResourceName) String() string {
+	return fmt.Sprintf("projects/%s/locations/%s/services/%s", n.Project, n.Region, n.Service)
+}
diff --git a/pkg/skaffold/deploy/cloudrun/deploy.go b/pkg/skaffold/deploy/cloudrun/deploy.go
index 6d0330fa0..22f6f6b16 100644
--- a/pkg/skaffold/deploy/cloudrun/deploy.go
+++ b/pkg/skaffold/deploy/cloudrun/deploy.go
@@ -27,9 +27,9 @@ import (
 	k8syaml "sigs.k8s.io/yaml"
 
 	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/access"
+	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/config"
 	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/debug"
 	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/deploy/label"
-	deploy "github.com/GoogleContainerTools/skaffold/pkg/skaffold/deploy/types"
 	sErrors "github.com/GoogleContainerTools/skaffold/pkg/skaffold/errors"
 	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/gcp"
 	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/graph"
@@ -42,29 +42,36 @@ import (
 	"github.com/GoogleContainerTools/skaffold/proto/v1"
 )
 
+// Config contains config options needed for cloud run
+type Config interface {
+	PortForwardResources() []*latest.PortForwardResource
+	PortForwardOptions() config.PortForwardOptions
+	Mode() config.RunMode
+}
+
 // Deployer deploys code to Google Cloud Run.
 type Deployer struct {
 	logger   log.Logger
+	accessor *RunAccessor
 	monitor  *Monitor
 	labeller *label.DefaultLabeller
 
 	DefaultProject string
 	Region         string
 
-	Cfg deploy.Config
-
 	// additional client options for connecting to Cloud Run, used for tests
 	clientOptions []option.ClientOption
 	useGcpOptions bool
 }
 
 // NewDeployer creates a new Deployer for Cloud Run from the Skaffold deploy config.
-func NewDeployer(labeller *label.DefaultLabeller, crDeploy *latest.CloudRunDeploy) (*Deployer, error) {
+func NewDeployer(cfg Config, labeller *label.DefaultLabeller, crDeploy *latest.CloudRunDeploy) (*Deployer, error) {
 	return &Deployer{
 		DefaultProject: crDeploy.DefaultProjectID,
 		Region:         crDeploy.Region,
 		// TODO: implement logger for Cloud Run.
 		logger:        &log.NoopLogger{},
+		accessor:      NewAccessor(cfg, labeller.GetRunID()),
 		labeller:      labeller,
 		useGcpOptions: true,
 	}, nil
@@ -108,7 +115,7 @@ func (d *Deployer) GetLogger() log.Logger {
 
 // GetAccessor gets a no-op accessor for Cloud Run.
 func (d *Deployer) GetAccessor() access.Accessor {
-	return &access.NoopAccessor{}
+	return d.accessor
 }
 
 // GetSyncer gets the file syncer for Cloud Run. Not supported by this deployer.
@@ -166,13 +173,18 @@ func (d *Deployer) deployToCloudRun(ctx context.Context, out io.Writer, manifest
 		delete(service.Metadata.Labels, "skaffold.dev/run-id")
 		service.Metadata.Labels["run-id"] = runID
 	}
-
+	resName := RunResourceName{
+		Project: service.Metadata.Namespace,
+		Region:  d.Region,
+		Service: service.Metadata.Name,
+	}
 	output.Default.Fprintln(out, "Deploying Cloud Run service:\n\t", service.Metadata.Name)
 	parent := fmt.Sprintf("projects/%s/locations/%s", service.Metadata.Namespace, d.Region)
 
-	sName := fmt.Sprintf("%s/services/%s", parent, service.Metadata.Name)
+	sName := resName.String()
 
 	d.getMonitor().Resources = append(d.getMonitor().Resources, ResourceName{path: sName, name: service.Metadata.Name})
+	d.accessor.AddResource(resName)
 	getCall := crclient.Projects.Locations.Services.Get(sName)
 	_, err = getCall.Do()
 
diff --git a/pkg/skaffold/event/event.go b/pkg/skaffold/event/event.go
index 02b90f732..5f5a9c49c 100644
--- a/pkg/skaffold/event/event.go
+++ b/pkg/skaffold/event/event.go
@@ -31,6 +31,7 @@ import (
 	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/constants"
 	sErrors "github.com/GoogleContainerTools/skaffold/pkg/skaffold/errors"
 	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/instrumentation"
+	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/platform"
 	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/schema/util"
 	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/version"
 	"github.com/GoogleContainerTools/skaffold/proto/v1"
@@ -309,29 +310,47 @@ func DeployComplete() {
 }
 
 // BuildInProgress notifies that a build has been started.
-func BuildInProgress(imageName string) {
-	handler.handleBuildEvent(&proto.BuildEvent{Artifact: imageName, Status: InProgress})
+func BuildInProgress(imageName, platforms string) {
+	handler.handleBuildEvent(&proto.BuildEvent{
+		Artifact:        imageName,
+		TargetPlatforms: platforms,
+		HostPlatform:    platform.Host.String(),
+		Status:          InProgress,
+	})
 }
 
 // BuildCanceled notifies that a build has been canceled.
-func BuildCanceled(imageName string) {
-	handler.handleBuildEvent(&proto.BuildEvent{Artifact: imageName, Status: Canceled})
+func BuildCanceled(imageName, platforms string) {
+	handler.handleBuildEvent(&proto.BuildEvent{
+		Artifact:        imageName,
+		TargetPlatforms: platforms,
+		HostPlatform:    platform.Host.String(),
+		Status:          Canceled,
+	})
 }
 
 // BuildFailed notifies that a build has failed.
-func BuildFailed(imageName string, err error) {
+func BuildFailed(imageName, platforms string, err error) {
 	aiErr := sErrors.ActionableErr(handler.cfg, constants.Build, err)
 	handler.handleBuildEvent(&proto.BuildEvent{
-		Artifact:      imageName,
-		Status:        Failed,
-		Err:           err.Error(),
-		ErrCode:       aiErr.ErrCode,
-		ActionableErr: aiErr})
+		Artifact:        imageName,
+		TargetPlatforms: platforms,
+		HostPlatform:    platform.Host.String(),
+		Status:          Failed,
+		Err:             err.Error(),
+		ErrCode:         aiErr.ErrCode,
+		ActionableErr:   aiErr,
+	})
 }
 
 // BuildComplete notifies that a build has completed.
-func BuildComplete(imageName string) {
-	handler.handleBuildEvent(&proto.BuildEvent{Artifact: imageName, Status: Complete})
+func BuildComplete(imageName, platforms string) {
+	handler.handleBuildEvent(&proto.BuildEvent{
+		Artifact:        imageName,
+		TargetPlatforms: platforms,
+		HostPlatform:    platform.Host.String(),
+		Status:          Complete,
+	})
 }
 
 // TestInProgress notifies that a test has been started.
@@ -654,6 +673,9 @@ func (ev *eventHandler) handleExec(f firedEvent) {
 		rse := e.ResourceStatusCheckEvent
 		rseName := rse.Resource
 		ev.stateLock.Lock()
+		if ev.state.StatusCheckState.Resources == nil {
+			ev.state.StatusCheckState.Resources = map[string]string{}
+		}
 		ev.state.StatusCheckState.Resources[rseName] = rse.Status
 		ev.stateLock.Unlock()
 		switch rse.Status {
diff --git a/pkg/skaffold/event/v2/build.go b/pkg/skaffold/event/v2/build.go
index 0637666ec..22b1d6179 100644
--- a/pkg/skaffold/event/v2/build.go
+++ b/pkg/skaffold/event/v2/build.go
@@ -21,6 +21,7 @@ import (
 
 	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/constants"
 	sErrors "github.com/GoogleContainerTools/skaffold/pkg/skaffold/errors"
+	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/platform"
 	proto "github.com/GoogleContainerTools/skaffold/proto/v2"
 )
 
@@ -29,47 +30,49 @@ const (
 	Build = "Build"
 )
 
-func CacheCheckInProgress(artifact string) {
-	buildSubtaskEvent(artifact, Cache, InProgress, nil)
+func CacheCheckInProgress(artifact, platforms string) {
+	buildSubtaskEvent(artifact, platforms, Cache, InProgress, nil)
 }
 
-func CacheCheckMiss(artifact string) {
-	buildSubtaskEvent(artifact, Cache, Failed, nil)
+func CacheCheckMiss(artifact, platforms string) {
+	buildSubtaskEvent(artifact, platforms, Cache, Failed, nil)
 }
 
-func CacheCheckHit(artifact string) {
-	buildSubtaskEvent(artifact, Cache, Succeeded, nil)
+func CacheCheckHit(artifact, platforms string) {
+	buildSubtaskEvent(artifact, platforms, Cache, Succeeded, nil)
 }
 
-func BuildInProgress(artifact string) {
-	buildSubtaskEvent(artifact, Build, InProgress, nil)
+func BuildInProgress(artifact, platforms string) {
+	buildSubtaskEvent(artifact, platforms, Build, InProgress, nil)
 }
 
-func BuildFailed(artifact string, err error) {
-	buildSubtaskEvent(artifact, Build, Failed, err)
+func BuildFailed(artifact, platforms string, err error) {
+	buildSubtaskEvent(artifact, platforms, Build, Failed, err)
 }
 
-func BuildSucceeded(artifact string) {
-	buildSubtaskEvent(artifact, Build, Succeeded, nil)
+func BuildSucceeded(artifact, platforms string) {
+	buildSubtaskEvent(artifact, platforms, Build, Succeeded, nil)
 }
 
-func BuildCanceled(artifact string, err error) {
-	buildSubtaskEvent(artifact, Build, Canceled, err)
+func BuildCanceled(artifact, platforms string, err error) {
+	buildSubtaskEvent(artifact, platforms, Build, Canceled, err)
 }
 
-func buildSubtaskEvent(artifact, step, status string, err error) {
+func buildSubtaskEvent(artifact, platforms, step, status string, err error) {
 	var aErr *proto.ActionableErr
 	if err != nil {
 		aErr = sErrors.ActionableErrV2(handler.cfg, constants.Build, err)
 		handler.sendErrorMessage(constants.Build, artifact, err)
 	}
 	handler.handleBuildSubtaskEvent(&proto.BuildSubtaskEvent{
-		Id:            artifact,
-		TaskId:        fmt.Sprintf("%s-%d", constants.Build, handler.iteration),
-		Artifact:      artifact,
-		Step:          step,
-		Status:        status,
-		ActionableErr: aErr,
+		Id:              artifact,
+		TaskId:          fmt.Sprintf("%s-%d", constants.Build, handler.iteration),
+		Artifact:        artifact,
+		TargetPlatforms: platforms,
+		HostPlatform:    platform.Host.String(),
+		Step:            step,
+		Status:          status,
+		ActionableErr:   aErr,
 	})
 }
 
diff --git a/pkg/skaffold/runner/deployer.go b/pkg/skaffold/runner/deployer.go
index 8bc903a7c..20d215251 100644
--- a/pkg/skaffold/runner/deployer.go
+++ b/pkg/skaffold/runner/deployer.go
@@ -185,7 +185,7 @@ func GetDeployer(ctx context.Context, runCtx *runcontext.RunContext, labeller *l
 			deployers = append(deployers, deployer)
 		}
 		if d.CloudRunDeploy != nil {
-			deployer, err := cloudrun.NewDeployer(labeller, d.CloudRunDeploy)
+			deployer, err := cloudrun.NewDeployer(dCtx, labeller, d.CloudRunDeploy)
 			if err != nil {
 				return nil, err
 			}
@@ -326,5 +326,5 @@ func getCloudRunDeployer(runCtx *runcontext.RunContext, labeller *label.DefaultL
 			}
 		}
 	}
-	return cloudrun.NewDeployer(labeller, &latest.CloudRunDeploy{Region: region, DefaultProjectID: defaultProject})
+	return cloudrun.NewDeployer(runCtx, labeller, &latest.CloudRunDeploy{Region: region, DefaultProjectID: defaultProject})
 }
diff --git a/proto/enums/enums.pb.go b/proto/enums/enums.pb.go
index a257100c7..b7c0b11cb 100644
--- a/proto/enums/enums.pb.go
+++ b/proto/enums/enums.pb.go
@@ -835,7 +835,9 @@ const (
 	// Trying to modify build environment that doesn't exist
 	StatusCode_INSPECT_BUILD_ENV_INCORRECT_TYPE_ERR StatusCode = 1303
 	// Trying to modify a profile that doesn't exist
-	StatusCode_INSPECT_PROFILE_NOT_FOUND_ERR StatusCode = 1304
+	StatusCode_INSPECT_PROFILE_NOT_FOUND_ERR      StatusCode = 1304
+	StatusCode_PORT_FORWARD_RUN_GCLOUD_NOT_FOUND  StatusCode = 1601
+	StatusCode_PORT_FORWARD_RUN_PROXY_START_ERROR StatusCode = 1602
 )
 
 // Enum value maps for StatusCode.
@@ -1028,6 +1030,8 @@ var (
 		1302: "INSPECT_BUILD_ENV_ALREADY_EXISTS_ERR",
 		1303: "INSPECT_BUILD_ENV_INCORRECT_TYPE_ERR",
 		1304: "INSPECT_PROFILE_NOT_FOUND_ERR",
+		1601: "PORT_FORWARD_RUN_GCLOUD_NOT_FOUND",
+		1602: "PORT_FORWARD_RUN_PROXY_START_ERROR",
 	}
 	StatusCode_value = map[string]int32{
 		"OK":                                               0,
@@ -1217,6 +1221,8 @@ var (
 		"INSPECT_BUILD_ENV_ALREADY_EXISTS_ERR":             1302,
 		"INSPECT_BUILD_ENV_INCORRECT_TYPE_ERR":             1303,
 		"INSPECT_PROFILE_NOT_FOUND_ERR":                    1304,
+		"PORT_FORWARD_RUN_GCLOUD_NOT_FOUND":                1601,
+		"PORT_FORWARD_RUN_PROXY_START_ERROR":               1602,
 	}
 )
 
@@ -1601,7 +1607,7 @@ var file_enums_proto_rawDesc = []byte{
 	0x4e, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x03, 0x12, 0x09,
 	0x0a, 0x05, 0x46, 0x41, 0x54, 0x41, 0x4c, 0x10, 0x04, 0x12, 0x09, 0x0a, 0x05, 0x50, 0x41, 0x4e,
 	0x49, 0x43, 0x10, 0x05, 0x12, 0x09, 0x0a, 0x05, 0x54, 0x52, 0x41, 0x43, 0x45, 0x10, 0x06, 0x12,
-	0x0c, 0x0a, 0x08, 0x53, 0x54, 0x41, 0x4e, 0x44, 0x41, 0x52, 0x44, 0x10, 0x07, 0x2a, 0xf6, 0x31,
+	0x0c, 0x0a, 0x08, 0x53, 0x54, 0x41, 0x4e, 0x44, 0x41, 0x52, 0x44, 0x10, 0x07, 0x2a, 0xc7, 0x32,
 	0x0a, 0x0a, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x06, 0x0a, 0x02,
 	0x4f, 0x4b, 0x10, 0x00, 0x12, 0x18, 0x0a, 0x13, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x43, 0x48,
 	0x45, 0x43, 0x4b, 0x5f, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x10, 0xc8, 0x01, 0x12, 0x12,
@@ -2001,146 +2007,151 @@ var file_enums_proto_rawDesc = []byte{
 	0x4f, 0x52, 0x52, 0x45, 0x43, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x52, 0x52, 0x10,
 	0x97, 0x0a, 0x12, 0x22, 0x0a, 0x1d, 0x49, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x54, 0x5f, 0x50, 0x52,
 	0x4f, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x5f,
-	0x45, 0x52, 0x52, 0x10, 0x98, 0x0a, 0x2a, 0xea, 0x10, 0x0a, 0x0e, 0x53, 0x75, 0x67, 0x67, 0x65,
-	0x73, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x07, 0x0a, 0x03, 0x4e, 0x49, 0x4c,
-	0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x41, 0x44, 0x44, 0x5f, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c,
-	0x54, 0x5f, 0x52, 0x45, 0x50, 0x4f, 0x10, 0x64, 0x12, 0x16, 0x0a, 0x12, 0x43, 0x48, 0x45, 0x43,
-	0x4b, 0x5f, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x5f, 0x52, 0x45, 0x50, 0x4f, 0x10, 0x65,
-	0x12, 0x24, 0x0a, 0x20, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c,
-	0x54, 0x5f, 0x52, 0x45, 0x50, 0x4f, 0x5f, 0x47, 0x4c, 0x4f, 0x42, 0x41, 0x4c, 0x5f, 0x43, 0x4f,
-	0x4e, 0x46, 0x49, 0x47, 0x10, 0x66, 0x12, 0x20, 0x0a, 0x1c, 0x47, 0x43, 0x4c, 0x4f, 0x55, 0x44,
-	0x5f, 0x44, 0x4f, 0x43, 0x4b, 0x45, 0x52, 0x5f, 0x41, 0x55, 0x54, 0x48, 0x5f, 0x43, 0x4f, 0x4e,
-	0x46, 0x49, 0x47, 0x55, 0x52, 0x45, 0x10, 0x67, 0x12, 0x19, 0x0a, 0x15, 0x44, 0x4f, 0x43, 0x4b,
-	0x45, 0x52, 0x5f, 0x41, 0x55, 0x54, 0x48, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x55, 0x52,
-	0x45, 0x10, 0x68, 0x12, 0x18, 0x0a, 0x14, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x47, 0x43, 0x4c,
-	0x4f, 0x55, 0x44, 0x5f, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x10, 0x69, 0x12, 0x18, 0x0a,
-	0x14, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x44, 0x4f, 0x43, 0x4b, 0x45, 0x52, 0x5f, 0x52, 0x55,
-	0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x6a, 0x12, 0x16, 0x0a, 0x12, 0x46, 0x49, 0x58, 0x5f, 0x55,
-	0x53, 0x45, 0x52, 0x5f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x5f, 0x45, 0x52, 0x52, 0x10, 0x6b, 0x12,
-	0x16, 0x0a, 0x12, 0x44, 0x4f, 0x43, 0x4b, 0x45, 0x52, 0x5f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x5f,
-	0x52, 0x45, 0x54, 0x52, 0x59, 0x10, 0x6c, 0x12, 0x22, 0x0a, 0x1e, 0x46, 0x49, 0x58, 0x5f, 0x43,
-	0x41, 0x43, 0x48, 0x45, 0x5f, 0x46, 0x52, 0x4f, 0x4d, 0x5f, 0x41, 0x52, 0x54, 0x49, 0x46, 0x41,
-	0x43, 0x54, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x10, 0x6d, 0x12, 0x22, 0x0a, 0x1e, 0x46,
-	0x49, 0x58, 0x5f, 0x53, 0x4b, 0x41, 0x46, 0x46, 0x4f, 0x4c, 0x44, 0x5f, 0x43, 0x4f, 0x4e, 0x46,
-	0x49, 0x47, 0x5f, 0x44, 0x4f, 0x43, 0x4b, 0x45, 0x52, 0x46, 0x49, 0x4c, 0x45, 0x10, 0x6e, 0x12,
-	0x20, 0x0a, 0x1c, 0x46, 0x49, 0x58, 0x5f, 0x4a, 0x49, 0x42, 0x5f, 0x50, 0x4c, 0x55, 0x47, 0x49,
-	0x4e, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x55, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10,
-	0x6f, 0x12, 0x25, 0x0a, 0x21, 0x46, 0x49, 0x58, 0x5f, 0x44, 0x4f, 0x43, 0x4b, 0x45, 0x52, 0x5f,
-	0x4e, 0x45, 0x54, 0x57, 0x4f, 0x52, 0x4b, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x45,
-	0x52, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x70, 0x12, 0x2a, 0x0a, 0x26, 0x43, 0x48, 0x45, 0x43,
-	0x4b, 0x5f, 0x44, 0x4f, 0x43, 0x4b, 0x45, 0x52, 0x5f, 0x4e, 0x45, 0x54, 0x57, 0x4f, 0x52, 0x4b,
-	0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x45, 0x52, 0x5f, 0x52, 0x55, 0x4e, 0x4e, 0x49,
-	0x4e, 0x47, 0x10, 0x71, 0x12, 0x3a, 0x0a, 0x36, 0x46, 0x49, 0x58, 0x5f, 0x44, 0x4f, 0x43, 0x4b,
-	0x45, 0x52, 0x5f, 0x4e, 0x45, 0x54, 0x57, 0x4f, 0x52, 0x4b, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f,
-	0x57, 0x48, 0x45, 0x4e, 0x5f, 0x45, 0x58, 0x54, 0x52, 0x41, 0x43, 0x54, 0x49, 0x4e, 0x47, 0x5f,
-	0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x45, 0x52, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x72,
-	0x12, 0x14, 0x0a, 0x10, 0x52, 0x55, 0x4e, 0x5f, 0x44, 0x4f, 0x43, 0x4b, 0x45, 0x52, 0x5f, 0x50,
-	0x52, 0x55, 0x4e, 0x45, 0x10, 0x73, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x45, 0x54, 0x5f, 0x43, 0x4c,
-	0x45, 0x41, 0x4e, 0x55, 0x50, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x74, 0x12, 0x23, 0x0a, 0x1f,
-	0x42, 0x55, 0x49, 0x4c, 0x44, 0x5f, 0x46, 0x49, 0x58, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57,
-	0x4e, 0x5f, 0x50, 0x4c, 0x41, 0x54, 0x46, 0x4f, 0x52, 0x4d, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10,
-	0x75, 0x12, 0x1d, 0x0a, 0x18, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x43, 0x4c, 0x55, 0x53, 0x54,
-	0x45, 0x52, 0x5f, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0xc9, 0x01,
-	0x12, 0x1a, 0x0a, 0x15, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x4d, 0x49, 0x4e, 0x49, 0x4b, 0x55,
-	0x42, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x10, 0xca, 0x01, 0x12, 0x11, 0x0a, 0x0c,
-	0x49, 0x4e, 0x53, 0x54, 0x41, 0x4c, 0x4c, 0x5f, 0x48, 0x45, 0x4c, 0x4d, 0x10, 0xcb, 0x01, 0x12,
-	0x11, 0x0a, 0x0c, 0x55, 0x50, 0x47, 0x52, 0x41, 0x44, 0x45, 0x5f, 0x48, 0x45, 0x4c, 0x4d, 0x10,
-	0xcc, 0x01, 0x12, 0x30, 0x0a, 0x2b, 0x46, 0x49, 0x58, 0x5f, 0x53, 0x4b, 0x41, 0x46, 0x46, 0x4f,
-	0x4c, 0x44, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x48, 0x45, 0x4c, 0x4d, 0x5f, 0x41,
-	0x52, 0x54, 0x49, 0x46, 0x41, 0x43, 0x54, 0x5f, 0x4f, 0x56, 0x45, 0x52, 0x52, 0x49, 0x44, 0x45,
-	0x53, 0x10, 0xcd, 0x01, 0x12, 0x13, 0x0a, 0x0e, 0x55, 0x50, 0x47, 0x52, 0x41, 0x44, 0x45, 0x5f,
-	0x48, 0x45, 0x4c, 0x4d, 0x33, 0x32, 0x10, 0xce, 0x01, 0x12, 0x2e, 0x0a, 0x29, 0x46, 0x49, 0x58,
-	0x5f, 0x53, 0x4b, 0x41, 0x46, 0x46, 0x4f, 0x4c, 0x44, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47,
-	0x5f, 0x48, 0x45, 0x4c, 0x4d, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x5f, 0x4e, 0x41, 0x4d,
-	0x45, 0x53, 0x50, 0x41, 0x43, 0x45, 0x10, 0xcf, 0x01, 0x12, 0x1a, 0x0a, 0x15, 0x49, 0x4e, 0x56,
-	0x41, 0x4c, 0x49, 0x44, 0x5f, 0x4b, 0x50, 0x54, 0x5f, 0x4d, 0x41, 0x4e, 0x49, 0x46, 0x45, 0x53,
-	0x54, 0x53, 0x10, 0xd0, 0x01, 0x12, 0x18, 0x0a, 0x13, 0x41, 0x4c, 0x49, 0x47, 0x4e, 0x5f, 0x4b,
-	0x50, 0x54, 0x5f, 0x49, 0x4e, 0x56, 0x45, 0x4e, 0x54, 0x4f, 0x52, 0x59, 0x10, 0xd1, 0x01, 0x12,
-	0x14, 0x0a, 0x0f, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4c, 0x4c, 0x5f, 0x4b, 0x55, 0x42, 0x45, 0x43,
-	0x54, 0x4c, 0x10, 0xdc, 0x01, 0x12, 0x19, 0x0a, 0x14, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x43,
-	0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x45, 0x52, 0x5f, 0x4c, 0x4f, 0x47, 0x53, 0x10, 0xad, 0x02,
-	0x12, 0x1a, 0x0a, 0x15, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x49, 0x4e,
-	0x45, 0x53, 0x53, 0x5f, 0x50, 0x52, 0x4f, 0x42, 0x45, 0x10, 0xae, 0x02, 0x12, 0x1a, 0x0a, 0x15,
-	0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x45, 0x52, 0x5f,
-	0x49, 0x4d, 0x41, 0x47, 0x45, 0x10, 0xaf, 0x02, 0x12, 0x21, 0x0a, 0x1c, 0x41, 0x44, 0x44, 0x52,
-	0x45, 0x53, 0x53, 0x5f, 0x4e, 0x4f, 0x44, 0x45, 0x5f, 0x4d, 0x45, 0x4d, 0x4f, 0x52, 0x59, 0x5f,
-	0x50, 0x52, 0x45, 0x53, 0x53, 0x55, 0x52, 0x45, 0x10, 0x90, 0x03, 0x12, 0x1f, 0x0a, 0x1a, 0x41,
-	0x44, 0x44, 0x52, 0x45, 0x53, 0x53, 0x5f, 0x4e, 0x4f, 0x44, 0x45, 0x5f, 0x44, 0x49, 0x53, 0x4b,
-	0x5f, 0x50, 0x52, 0x45, 0x53, 0x53, 0x55, 0x52, 0x45, 0x10, 0x91, 0x03, 0x12, 0x25, 0x0a, 0x20,
-	0x41, 0x44, 0x44, 0x52, 0x45, 0x53, 0x53, 0x5f, 0x4e, 0x4f, 0x44, 0x45, 0x5f, 0x4e, 0x45, 0x54,
-	0x57, 0x4f, 0x52, 0x4b, 0x5f, 0x55, 0x4e, 0x41, 0x56, 0x41, 0x49, 0x4c, 0x41, 0x42, 0x4c, 0x45,
-	0x10, 0x92, 0x03, 0x12, 0x1e, 0x0a, 0x19, 0x41, 0x44, 0x44, 0x52, 0x45, 0x53, 0x53, 0x5f, 0x4e,
-	0x4f, 0x44, 0x45, 0x5f, 0x50, 0x49, 0x44, 0x5f, 0x50, 0x52, 0x45, 0x53, 0x53, 0x55, 0x52, 0x45,
-	0x10, 0x93, 0x03, 0x12, 0x1f, 0x0a, 0x1a, 0x41, 0x44, 0x44, 0x52, 0x45, 0x53, 0x53, 0x5f, 0x4e,
-	0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x43, 0x48, 0x45, 0x44, 0x55, 0x4c, 0x41, 0x42, 0x4c,
-	0x45, 0x10, 0x94, 0x03, 0x12, 0x1d, 0x0a, 0x18, 0x41, 0x44, 0x44, 0x52, 0x45, 0x53, 0x53, 0x5f,
-	0x4e, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x52, 0x45, 0x41, 0x43, 0x48, 0x41, 0x42, 0x4c, 0x45,
-	0x10, 0x95, 0x03, 0x12, 0x1b, 0x0a, 0x16, 0x41, 0x44, 0x44, 0x52, 0x45, 0x53, 0x53, 0x5f, 0x4e,
-	0x4f, 0x44, 0x45, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x59, 0x10, 0x96, 0x03,
-	0x12, 0x1e, 0x0a, 0x19, 0x41, 0x44, 0x44, 0x52, 0x45, 0x53, 0x53, 0x5f, 0x46, 0x41, 0x49, 0x4c,
-	0x45, 0x44, 0x5f, 0x53, 0x43, 0x48, 0x45, 0x44, 0x55, 0x4c, 0x49, 0x4e, 0x47, 0x10, 0x97, 0x03,
-	0x12, 0x1a, 0x0a, 0x15, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x48, 0x4f, 0x53, 0x54, 0x5f, 0x43,
-	0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x98, 0x03, 0x12, 0x13, 0x0a, 0x0e,
-	0x53, 0x54, 0x41, 0x52, 0x54, 0x5f, 0x4d, 0x49, 0x4e, 0x49, 0x4b, 0x55, 0x42, 0x45, 0x10, 0xf5,
-	0x03, 0x12, 0x15, 0x0a, 0x10, 0x55, 0x4e, 0x50, 0x41, 0x55, 0x53, 0x45, 0x5f, 0x4d, 0x49, 0x4e,
-	0x49, 0x4b, 0x55, 0x42, 0x45, 0x10, 0xf6, 0x03, 0x12, 0x14, 0x0a, 0x0f, 0x52, 0x55, 0x4e, 0x5f,
-	0x44, 0x4f, 0x43, 0x4b, 0x45, 0x52, 0x5f, 0x50, 0x55, 0x4c, 0x4c, 0x10, 0xa7, 0x04, 0x12, 0x22,
-	0x0a, 0x1d, 0x53, 0x45, 0x54, 0x5f, 0x52, 0x45, 0x4e, 0x44, 0x45, 0x52, 0x5f, 0x46, 0x4c, 0x41,
-	0x47, 0x5f, 0x4f, 0x46, 0x46, 0x4c, 0x49, 0x4e, 0x45, 0x5f, 0x46, 0x41, 0x4c, 0x53, 0x45, 0x10,
-	0xd8, 0x04, 0x12, 0x18, 0x0a, 0x13, 0x4b, 0x50, 0x54, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x4d, 0x41,
-	0x4e, 0x55, 0x41, 0x4c, 0x5f, 0x49, 0x4e, 0x49, 0x54, 0x10, 0xd9, 0x04, 0x12, 0x17, 0x0a, 0x12,
-	0x4b, 0x50, 0x54, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x59, 0x41,
-	0x4d, 0x4c, 0x10, 0xda, 0x04, 0x12, 0x1b, 0x0a, 0x16, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f,
-	0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x50, 0x41, 0x54, 0x48, 0x10,
-	0xbc, 0x05, 0x12, 0x27, 0x0a, 0x22, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x43, 0x48, 0x45,
-	0x43, 0x4b, 0x5f, 0x44, 0x45, 0x50, 0x45, 0x4e, 0x44, 0x45, 0x4e, 0x43, 0x59, 0x5f, 0x44, 0x45,
-	0x46, 0x49, 0x4e, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0xbd, 0x05, 0x12, 0x18, 0x0a, 0x13, 0x43,
-	0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x5f, 0x4e, 0x41, 0x4d,
-	0x45, 0x53, 0x10, 0xbe, 0x05, 0x12, 0x18, 0x0a, 0x13, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f,
-	0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x46, 0x49, 0x4c, 0x54, 0x45, 0x52, 0x10, 0xbf, 0x05, 0x12,
-	0x24, 0x0a, 0x1f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f,
-	0x50, 0x52, 0x4f, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x44, 0x45, 0x46, 0x49, 0x4e, 0x49, 0x54, 0x49,
-	0x4f, 0x4e, 0x10, 0xc0, 0x05, 0x12, 0x2f, 0x0a, 0x2a, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f,
-	0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x44, 0x45, 0x50, 0x45, 0x4e, 0x44, 0x45, 0x4e, 0x43, 0x59,
-	0x5f, 0x50, 0x52, 0x4f, 0x46, 0x49, 0x4c, 0x45, 0x53, 0x5f, 0x53, 0x45, 0x4c, 0x45, 0x43, 0x54,
-	0x49, 0x4f, 0x4e, 0x10, 0xc1, 0x05, 0x12, 0x23, 0x0a, 0x1e, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47,
-	0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x50, 0x52, 0x4f, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x53,
-	0x45, 0x4c, 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0xc2, 0x05, 0x12, 0x1b, 0x0a, 0x16, 0x43,
-	0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x46, 0x49, 0x58, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x56, 0x45,
-	0x52, 0x53, 0x49, 0x4f, 0x4e, 0x10, 0xc3, 0x05, 0x12, 0x20, 0x0a, 0x1b, 0x43, 0x4f, 0x4e, 0x46,
-	0x49, 0x47, 0x5f, 0x41, 0x4c, 0x4c, 0x4f, 0x57, 0x4c, 0x49, 0x53, 0x54, 0x5f, 0x56, 0x41, 0x4c,
-	0x49, 0x44, 0x41, 0x54, 0x4f, 0x52, 0x53, 0x10, 0xc4, 0x05, 0x12, 0x22, 0x0a, 0x1d, 0x43, 0x4f,
-	0x4e, 0x46, 0x49, 0x47, 0x5f, 0x41, 0x4c, 0x4c, 0x4f, 0x57, 0x4c, 0x49, 0x53, 0x54, 0x5f, 0x74,
-	0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x72, 0x73, 0x10, 0xc5, 0x05, 0x12, 0x25,
-	0x0a, 0x20, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x46, 0x49, 0x58, 0x5f, 0x4d, 0x49, 0x53,
-	0x53, 0x49, 0x4e, 0x47, 0x5f, 0x4d, 0x41, 0x4e, 0x49, 0x46, 0x45, 0x53, 0x54, 0x5f, 0x46, 0x49,
-	0x4c, 0x45, 0x10, 0xc6, 0x05, 0x12, 0x23, 0x0a, 0x1e, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f,
-	0x45, 0x4e, 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x52, 0x45, 0x4d, 0x4f, 0x54, 0x45, 0x5f, 0x52, 0x45,
-	0x50, 0x4f, 0x5f, 0x53, 0x59, 0x4e, 0x43, 0x10, 0xc7, 0x05, 0x12, 0x26, 0x0a, 0x21, 0x49, 0x4e,
-	0x53, 0x50, 0x45, 0x43, 0x54, 0x5f, 0x55, 0x53, 0x45, 0x5f, 0x4d, 0x4f, 0x44, 0x49, 0x46, 0x59,
-	0x5f, 0x4f, 0x52, 0x5f, 0x4e, 0x45, 0x57, 0x5f, 0x50, 0x52, 0x4f, 0x46, 0x49, 0x4c, 0x45, 0x10,
-	0xa0, 0x06, 0x12, 0x1e, 0x0a, 0x19, 0x49, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x54, 0x5f, 0x55, 0x53,
-	0x45, 0x5f, 0x41, 0x44, 0x44, 0x5f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x5f, 0x45, 0x4e, 0x56, 0x10,
-	0xa1, 0x06, 0x12, 0x20, 0x0a, 0x1b, 0x49, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x54, 0x5f, 0x43, 0x48,
-	0x45, 0x43, 0x4b, 0x5f, 0x49, 0x4e, 0x50, 0x55, 0x54, 0x5f, 0x50, 0x52, 0x4f, 0x46, 0x49, 0x4c,
-	0x45, 0x10, 0xa2, 0x06, 0x12, 0x0f, 0x0a, 0x0a, 0x4f, 0x50, 0x45, 0x4e, 0x5f, 0x49, 0x53, 0x53,
-	0x55, 0x45, 0x10, 0x84, 0x07, 0x12, 0x19, 0x0a, 0x14, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x43,
-	0x55, 0x53, 0x54, 0x4f, 0x4d, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x41, 0x4e, 0x44, 0x10, 0xe8, 0x07,
-	0x12, 0x1f, 0x0a, 0x1a, 0x46, 0x49, 0x58, 0x5f, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x5f, 0x43,
-	0x4f, 0x4d, 0x4d, 0x41, 0x4e, 0x44, 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x4f, 0x55, 0x54, 0x10, 0xe9,
-	0x07, 0x12, 0x2a, 0x0a, 0x25, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x43, 0x55, 0x53, 0x54, 0x4f,
-	0x4d, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x41, 0x4e, 0x44, 0x5f, 0x44, 0x45, 0x50, 0x45, 0x4e, 0x44,
-	0x45, 0x4e, 0x43, 0x49, 0x45, 0x53, 0x5f, 0x43, 0x4d, 0x44, 0x10, 0xea, 0x07, 0x12, 0x2c, 0x0a,
-	0x27, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x5f, 0x43, 0x4f,
-	0x4d, 0x4d, 0x41, 0x4e, 0x44, 0x5f, 0x44, 0x45, 0x50, 0x45, 0x4e, 0x44, 0x45, 0x4e, 0x43, 0x49,
-	0x45, 0x53, 0x5f, 0x50, 0x41, 0x54, 0x48, 0x53, 0x10, 0xeb, 0x07, 0x12, 0x26, 0x0a, 0x21, 0x43,
-	0x48, 0x45, 0x43, 0x4b, 0x5f, 0x54, 0x45, 0x53, 0x54, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x41, 0x4e,
-	0x44, 0x5f, 0x41, 0x4e, 0x44, 0x5f, 0x49, 0x4d, 0x41, 0x47, 0x45, 0x5f, 0x4e, 0x41, 0x4d, 0x45,
-	0x10, 0xec, 0x07, 0x42, 0x36, 0x5a, 0x34, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f,
-	0x6d, 0x2f, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65,
-	0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x73, 0x2f, 0x73, 0x6b, 0x61, 0x66, 0x66, 0x6f, 0x6c, 0x64, 0x2f,
-	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f,
-	0x74, 0x6f, 0x33,
+	0x45, 0x52, 0x52, 0x10, 0x98, 0x0a, 0x12, 0x26, 0x0a, 0x21, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x46,
+	0x4f, 0x52, 0x57, 0x41, 0x52, 0x44, 0x5f, 0x52, 0x55, 0x4e, 0x5f, 0x47, 0x43, 0x4c, 0x4f, 0x55,
+	0x44, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0xc1, 0x0c, 0x12, 0x27,
+	0x0a, 0x22, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x46, 0x4f, 0x52, 0x57, 0x41, 0x52, 0x44, 0x5f, 0x52,
+	0x55, 0x4e, 0x5f, 0x50, 0x52, 0x4f, 0x58, 0x59, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x5f, 0x45,
+	0x52, 0x52, 0x4f, 0x52, 0x10, 0xc2, 0x0c, 0x2a, 0xea, 0x10, 0x0a, 0x0e, 0x53, 0x75, 0x67, 0x67,
+	0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x07, 0x0a, 0x03, 0x4e, 0x49,
+	0x4c, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x41, 0x44, 0x44, 0x5f, 0x44, 0x45, 0x46, 0x41, 0x55,
+	0x4c, 0x54, 0x5f, 0x52, 0x45, 0x50, 0x4f, 0x10, 0x64, 0x12, 0x16, 0x0a, 0x12, 0x43, 0x48, 0x45,
+	0x43, 0x4b, 0x5f, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x5f, 0x52, 0x45, 0x50, 0x4f, 0x10,
+	0x65, 0x12, 0x24, 0x0a, 0x20, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x44, 0x45, 0x46, 0x41, 0x55,
+	0x4c, 0x54, 0x5f, 0x52, 0x45, 0x50, 0x4f, 0x5f, 0x47, 0x4c, 0x4f, 0x42, 0x41, 0x4c, 0x5f, 0x43,
+	0x4f, 0x4e, 0x46, 0x49, 0x47, 0x10, 0x66, 0x12, 0x20, 0x0a, 0x1c, 0x47, 0x43, 0x4c, 0x4f, 0x55,
+	0x44, 0x5f, 0x44, 0x4f, 0x43, 0x4b, 0x45, 0x52, 0x5f, 0x41, 0x55, 0x54, 0x48, 0x5f, 0x43, 0x4f,
+	0x4e, 0x46, 0x49, 0x47, 0x55, 0x52, 0x45, 0x10, 0x67, 0x12, 0x19, 0x0a, 0x15, 0x44, 0x4f, 0x43,
+	0x4b, 0x45, 0x52, 0x5f, 0x41, 0x55, 0x54, 0x48, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x55,
+	0x52, 0x45, 0x10, 0x68, 0x12, 0x18, 0x0a, 0x14, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x47, 0x43,
+	0x4c, 0x4f, 0x55, 0x44, 0x5f, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x10, 0x69, 0x12, 0x18,
+	0x0a, 0x14, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x44, 0x4f, 0x43, 0x4b, 0x45, 0x52, 0x5f, 0x52,
+	0x55, 0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x6a, 0x12, 0x16, 0x0a, 0x12, 0x46, 0x49, 0x58, 0x5f,
+	0x55, 0x53, 0x45, 0x52, 0x5f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x5f, 0x45, 0x52, 0x52, 0x10, 0x6b,
+	0x12, 0x16, 0x0a, 0x12, 0x44, 0x4f, 0x43, 0x4b, 0x45, 0x52, 0x5f, 0x42, 0x55, 0x49, 0x4c, 0x44,
+	0x5f, 0x52, 0x45, 0x54, 0x52, 0x59, 0x10, 0x6c, 0x12, 0x22, 0x0a, 0x1e, 0x46, 0x49, 0x58, 0x5f,
+	0x43, 0x41, 0x43, 0x48, 0x45, 0x5f, 0x46, 0x52, 0x4f, 0x4d, 0x5f, 0x41, 0x52, 0x54, 0x49, 0x46,
+	0x41, 0x43, 0x54, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x10, 0x6d, 0x12, 0x22, 0x0a, 0x1e,
+	0x46, 0x49, 0x58, 0x5f, 0x53, 0x4b, 0x41, 0x46, 0x46, 0x4f, 0x4c, 0x44, 0x5f, 0x43, 0x4f, 0x4e,
+	0x46, 0x49, 0x47, 0x5f, 0x44, 0x4f, 0x43, 0x4b, 0x45, 0x52, 0x46, 0x49, 0x4c, 0x45, 0x10, 0x6e,
+	0x12, 0x20, 0x0a, 0x1c, 0x46, 0x49, 0x58, 0x5f, 0x4a, 0x49, 0x42, 0x5f, 0x50, 0x4c, 0x55, 0x47,
+	0x49, 0x4e, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x55, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e,
+	0x10, 0x6f, 0x12, 0x25, 0x0a, 0x21, 0x46, 0x49, 0x58, 0x5f, 0x44, 0x4f, 0x43, 0x4b, 0x45, 0x52,
+	0x5f, 0x4e, 0x45, 0x54, 0x57, 0x4f, 0x52, 0x4b, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e,
+	0x45, 0x52, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x70, 0x12, 0x2a, 0x0a, 0x26, 0x43, 0x48, 0x45,
+	0x43, 0x4b, 0x5f, 0x44, 0x4f, 0x43, 0x4b, 0x45, 0x52, 0x5f, 0x4e, 0x45, 0x54, 0x57, 0x4f, 0x52,
+	0x4b, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x45, 0x52, 0x5f, 0x52, 0x55, 0x4e, 0x4e,
+	0x49, 0x4e, 0x47, 0x10, 0x71, 0x12, 0x3a, 0x0a, 0x36, 0x46, 0x49, 0x58, 0x5f, 0x44, 0x4f, 0x43,
+	0x4b, 0x45, 0x52, 0x5f, 0x4e, 0x45, 0x54, 0x57, 0x4f, 0x52, 0x4b, 0x5f, 0x4d, 0x4f, 0x44, 0x45,
+	0x5f, 0x57, 0x48, 0x45, 0x4e, 0x5f, 0x45, 0x58, 0x54, 0x52, 0x41, 0x43, 0x54, 0x49, 0x4e, 0x47,
+	0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x45, 0x52, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10,
+	0x72, 0x12, 0x14, 0x0a, 0x10, 0x52, 0x55, 0x4e, 0x5f, 0x44, 0x4f, 0x43, 0x4b, 0x45, 0x52, 0x5f,
+	0x50, 0x52, 0x55, 0x4e, 0x45, 0x10, 0x73, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x45, 0x54, 0x5f, 0x43,
+	0x4c, 0x45, 0x41, 0x4e, 0x55, 0x50, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x74, 0x12, 0x23, 0x0a,
+	0x1f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x5f, 0x46, 0x49, 0x58, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f,
+	0x57, 0x4e, 0x5f, 0x50, 0x4c, 0x41, 0x54, 0x46, 0x4f, 0x52, 0x4d, 0x5f, 0x46, 0x4c, 0x41, 0x47,
+	0x10, 0x75, 0x12, 0x1d, 0x0a, 0x18, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x43, 0x4c, 0x55, 0x53,
+	0x54, 0x45, 0x52, 0x5f, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0xc9,
+	0x01, 0x12, 0x1a, 0x0a, 0x15, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x4d, 0x49, 0x4e, 0x49, 0x4b,
+	0x55, 0x42, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x10, 0xca, 0x01, 0x12, 0x11, 0x0a,
+	0x0c, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4c, 0x4c, 0x5f, 0x48, 0x45, 0x4c, 0x4d, 0x10, 0xcb, 0x01,
+	0x12, 0x11, 0x0a, 0x0c, 0x55, 0x50, 0x47, 0x52, 0x41, 0x44, 0x45, 0x5f, 0x48, 0x45, 0x4c, 0x4d,
+	0x10, 0xcc, 0x01, 0x12, 0x30, 0x0a, 0x2b, 0x46, 0x49, 0x58, 0x5f, 0x53, 0x4b, 0x41, 0x46, 0x46,
+	0x4f, 0x4c, 0x44, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x48, 0x45, 0x4c, 0x4d, 0x5f,
+	0x41, 0x52, 0x54, 0x49, 0x46, 0x41, 0x43, 0x54, 0x5f, 0x4f, 0x56, 0x45, 0x52, 0x52, 0x49, 0x44,
+	0x45, 0x53, 0x10, 0xcd, 0x01, 0x12, 0x13, 0x0a, 0x0e, 0x55, 0x50, 0x47, 0x52, 0x41, 0x44, 0x45,
+	0x5f, 0x48, 0x45, 0x4c, 0x4d, 0x33, 0x32, 0x10, 0xce, 0x01, 0x12, 0x2e, 0x0a, 0x29, 0x46, 0x49,
+	0x58, 0x5f, 0x53, 0x4b, 0x41, 0x46, 0x46, 0x4f, 0x4c, 0x44, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49,
+	0x47, 0x5f, 0x48, 0x45, 0x4c, 0x4d, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x5f, 0x4e, 0x41,
+	0x4d, 0x45, 0x53, 0x50, 0x41, 0x43, 0x45, 0x10, 0xcf, 0x01, 0x12, 0x1a, 0x0a, 0x15, 0x49, 0x4e,
+	0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x4b, 0x50, 0x54, 0x5f, 0x4d, 0x41, 0x4e, 0x49, 0x46, 0x45,
+	0x53, 0x54, 0x53, 0x10, 0xd0, 0x01, 0x12, 0x18, 0x0a, 0x13, 0x41, 0x4c, 0x49, 0x47, 0x4e, 0x5f,
+	0x4b, 0x50, 0x54, 0x5f, 0x49, 0x4e, 0x56, 0x45, 0x4e, 0x54, 0x4f, 0x52, 0x59, 0x10, 0xd1, 0x01,
+	0x12, 0x14, 0x0a, 0x0f, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4c, 0x4c, 0x5f, 0x4b, 0x55, 0x42, 0x45,
+	0x43, 0x54, 0x4c, 0x10, 0xdc, 0x01, 0x12, 0x19, 0x0a, 0x14, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f,
+	0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x45, 0x52, 0x5f, 0x4c, 0x4f, 0x47, 0x53, 0x10, 0xad,
+	0x02, 0x12, 0x1a, 0x0a, 0x15, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x49,
+	0x4e, 0x45, 0x53, 0x53, 0x5f, 0x50, 0x52, 0x4f, 0x42, 0x45, 0x10, 0xae, 0x02, 0x12, 0x1a, 0x0a,
+	0x15, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x45, 0x52,
+	0x5f, 0x49, 0x4d, 0x41, 0x47, 0x45, 0x10, 0xaf, 0x02, 0x12, 0x21, 0x0a, 0x1c, 0x41, 0x44, 0x44,
+	0x52, 0x45, 0x53, 0x53, 0x5f, 0x4e, 0x4f, 0x44, 0x45, 0x5f, 0x4d, 0x45, 0x4d, 0x4f, 0x52, 0x59,
+	0x5f, 0x50, 0x52, 0x45, 0x53, 0x53, 0x55, 0x52, 0x45, 0x10, 0x90, 0x03, 0x12, 0x1f, 0x0a, 0x1a,
+	0x41, 0x44, 0x44, 0x52, 0x45, 0x53, 0x53, 0x5f, 0x4e, 0x4f, 0x44, 0x45, 0x5f, 0x44, 0x49, 0x53,
+	0x4b, 0x5f, 0x50, 0x52, 0x45, 0x53, 0x53, 0x55, 0x52, 0x45, 0x10, 0x91, 0x03, 0x12, 0x25, 0x0a,
+	0x20, 0x41, 0x44, 0x44, 0x52, 0x45, 0x53, 0x53, 0x5f, 0x4e, 0x4f, 0x44, 0x45, 0x5f, 0x4e, 0x45,
+	0x54, 0x57, 0x4f, 0x52, 0x4b, 0x5f, 0x55, 0x4e, 0x41, 0x56, 0x41, 0x49, 0x4c, 0x41, 0x42, 0x4c,
+	0x45, 0x10, 0x92, 0x03, 0x12, 0x1e, 0x0a, 0x19, 0x41, 0x44, 0x44, 0x52, 0x45, 0x53, 0x53, 0x5f,
+	0x4e, 0x4f, 0x44, 0x45, 0x5f, 0x50, 0x49, 0x44, 0x5f, 0x50, 0x52, 0x45, 0x53, 0x53, 0x55, 0x52,
+	0x45, 0x10, 0x93, 0x03, 0x12, 0x1f, 0x0a, 0x1a, 0x41, 0x44, 0x44, 0x52, 0x45, 0x53, 0x53, 0x5f,
+	0x4e, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x43, 0x48, 0x45, 0x44, 0x55, 0x4c, 0x41, 0x42,
+	0x4c, 0x45, 0x10, 0x94, 0x03, 0x12, 0x1d, 0x0a, 0x18, 0x41, 0x44, 0x44, 0x52, 0x45, 0x53, 0x53,
+	0x5f, 0x4e, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x52, 0x45, 0x41, 0x43, 0x48, 0x41, 0x42, 0x4c,
+	0x45, 0x10, 0x95, 0x03, 0x12, 0x1b, 0x0a, 0x16, 0x41, 0x44, 0x44, 0x52, 0x45, 0x53, 0x53, 0x5f,
+	0x4e, 0x4f, 0x44, 0x45, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x59, 0x10, 0x96,
+	0x03, 0x12, 0x1e, 0x0a, 0x19, 0x41, 0x44, 0x44, 0x52, 0x45, 0x53, 0x53, 0x5f, 0x46, 0x41, 0x49,
+	0x4c, 0x45, 0x44, 0x5f, 0x53, 0x43, 0x48, 0x45, 0x44, 0x55, 0x4c, 0x49, 0x4e, 0x47, 0x10, 0x97,
+	0x03, 0x12, 0x1a, 0x0a, 0x15, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x48, 0x4f, 0x53, 0x54, 0x5f,
+	0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x98, 0x03, 0x12, 0x13, 0x0a,
+	0x0e, 0x53, 0x54, 0x41, 0x52, 0x54, 0x5f, 0x4d, 0x49, 0x4e, 0x49, 0x4b, 0x55, 0x42, 0x45, 0x10,
+	0xf5, 0x03, 0x12, 0x15, 0x0a, 0x10, 0x55, 0x4e, 0x50, 0x41, 0x55, 0x53, 0x45, 0x5f, 0x4d, 0x49,
+	0x4e, 0x49, 0x4b, 0x55, 0x42, 0x45, 0x10, 0xf6, 0x03, 0x12, 0x14, 0x0a, 0x0f, 0x52, 0x55, 0x4e,
+	0x5f, 0x44, 0x4f, 0x43, 0x4b, 0x45, 0x52, 0x5f, 0x50, 0x55, 0x4c, 0x4c, 0x10, 0xa7, 0x04, 0x12,
+	0x22, 0x0a, 0x1d, 0x53, 0x45, 0x54, 0x5f, 0x52, 0x45, 0x4e, 0x44, 0x45, 0x52, 0x5f, 0x46, 0x4c,
+	0x41, 0x47, 0x5f, 0x4f, 0x46, 0x46, 0x4c, 0x49, 0x4e, 0x45, 0x5f, 0x46, 0x41, 0x4c, 0x53, 0x45,
+	0x10, 0xd8, 0x04, 0x12, 0x18, 0x0a, 0x13, 0x4b, 0x50, 0x54, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x4d,
+	0x41, 0x4e, 0x55, 0x41, 0x4c, 0x5f, 0x49, 0x4e, 0x49, 0x54, 0x10, 0xd9, 0x04, 0x12, 0x17, 0x0a,
+	0x12, 0x4b, 0x50, 0x54, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x59,
+	0x41, 0x4d, 0x4c, 0x10, 0xda, 0x04, 0x12, 0x1b, 0x0a, 0x16, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47,
+	0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x50, 0x41, 0x54, 0x48,
+	0x10, 0xbc, 0x05, 0x12, 0x27, 0x0a, 0x22, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x43, 0x48,
+	0x45, 0x43, 0x4b, 0x5f, 0x44, 0x45, 0x50, 0x45, 0x4e, 0x44, 0x45, 0x4e, 0x43, 0x59, 0x5f, 0x44,
+	0x45, 0x46, 0x49, 0x4e, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0xbd, 0x05, 0x12, 0x18, 0x0a, 0x13,
+	0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x5f, 0x4e, 0x41,
+	0x4d, 0x45, 0x53, 0x10, 0xbe, 0x05, 0x12, 0x18, 0x0a, 0x13, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47,
+	0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x46, 0x49, 0x4c, 0x54, 0x45, 0x52, 0x10, 0xbf, 0x05,
+	0x12, 0x24, 0x0a, 0x1f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b,
+	0x5f, 0x50, 0x52, 0x4f, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x44, 0x45, 0x46, 0x49, 0x4e, 0x49, 0x54,
+	0x49, 0x4f, 0x4e, 0x10, 0xc0, 0x05, 0x12, 0x2f, 0x0a, 0x2a, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47,
+	0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x44, 0x45, 0x50, 0x45, 0x4e, 0x44, 0x45, 0x4e, 0x43,
+	0x59, 0x5f, 0x50, 0x52, 0x4f, 0x46, 0x49, 0x4c, 0x45, 0x53, 0x5f, 0x53, 0x45, 0x4c, 0x45, 0x43,
+	0x54, 0x49, 0x4f, 0x4e, 0x10, 0xc1, 0x05, 0x12, 0x23, 0x0a, 0x1e, 0x43, 0x4f, 0x4e, 0x46, 0x49,
+	0x47, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x50, 0x52, 0x4f, 0x46, 0x49, 0x4c, 0x45, 0x5f,
+	0x53, 0x45, 0x4c, 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0xc2, 0x05, 0x12, 0x1b, 0x0a, 0x16,
+	0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x46, 0x49, 0x58, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x56,
+	0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x10, 0xc3, 0x05, 0x12, 0x20, 0x0a, 0x1b, 0x43, 0x4f, 0x4e,
+	0x46, 0x49, 0x47, 0x5f, 0x41, 0x4c, 0x4c, 0x4f, 0x57, 0x4c, 0x49, 0x53, 0x54, 0x5f, 0x56, 0x41,
+	0x4c, 0x49, 0x44, 0x41, 0x54, 0x4f, 0x52, 0x53, 0x10, 0xc4, 0x05, 0x12, 0x22, 0x0a, 0x1d, 0x43,
+	0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x41, 0x4c, 0x4c, 0x4f, 0x57, 0x4c, 0x49, 0x53, 0x54, 0x5f,
+	0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x72, 0x73, 0x10, 0xc5, 0x05, 0x12,
+	0x25, 0x0a, 0x20, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x46, 0x49, 0x58, 0x5f, 0x4d, 0x49,
+	0x53, 0x53, 0x49, 0x4e, 0x47, 0x5f, 0x4d, 0x41, 0x4e, 0x49, 0x46, 0x45, 0x53, 0x54, 0x5f, 0x46,
+	0x49, 0x4c, 0x45, 0x10, 0xc6, 0x05, 0x12, 0x23, 0x0a, 0x1e, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47,
+	0x5f, 0x45, 0x4e, 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x52, 0x45, 0x4d, 0x4f, 0x54, 0x45, 0x5f, 0x52,
+	0x45, 0x50, 0x4f, 0x5f, 0x53, 0x59, 0x4e, 0x43, 0x10, 0xc7, 0x05, 0x12, 0x26, 0x0a, 0x21, 0x49,
+	0x4e, 0x53, 0x50, 0x45, 0x43, 0x54, 0x5f, 0x55, 0x53, 0x45, 0x5f, 0x4d, 0x4f, 0x44, 0x49, 0x46,
+	0x59, 0x5f, 0x4f, 0x52, 0x5f, 0x4e, 0x45, 0x57, 0x5f, 0x50, 0x52, 0x4f, 0x46, 0x49, 0x4c, 0x45,
+	0x10, 0xa0, 0x06, 0x12, 0x1e, 0x0a, 0x19, 0x49, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x54, 0x5f, 0x55,
+	0x53, 0x45, 0x5f, 0x41, 0x44, 0x44, 0x5f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x5f, 0x45, 0x4e, 0x56,
+	0x10, 0xa1, 0x06, 0x12, 0x20, 0x0a, 0x1b, 0x49, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x54, 0x5f, 0x43,
+	0x48, 0x45, 0x43, 0x4b, 0x5f, 0x49, 0x4e, 0x50, 0x55, 0x54, 0x5f, 0x50, 0x52, 0x4f, 0x46, 0x49,
+	0x4c, 0x45, 0x10, 0xa2, 0x06, 0x12, 0x0f, 0x0a, 0x0a, 0x4f, 0x50, 0x45, 0x4e, 0x5f, 0x49, 0x53,
+	0x53, 0x55, 0x45, 0x10, 0x84, 0x07, 0x12, 0x19, 0x0a, 0x14, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f,
+	0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x41, 0x4e, 0x44, 0x10, 0xe8,
+	0x07, 0x12, 0x1f, 0x0a, 0x1a, 0x46, 0x49, 0x58, 0x5f, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x5f,
+	0x43, 0x4f, 0x4d, 0x4d, 0x41, 0x4e, 0x44, 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x4f, 0x55, 0x54, 0x10,
+	0xe9, 0x07, 0x12, 0x2a, 0x0a, 0x25, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x43, 0x55, 0x53, 0x54,
+	0x4f, 0x4d, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x41, 0x4e, 0x44, 0x5f, 0x44, 0x45, 0x50, 0x45, 0x4e,
+	0x44, 0x45, 0x4e, 0x43, 0x49, 0x45, 0x53, 0x5f, 0x43, 0x4d, 0x44, 0x10, 0xea, 0x07, 0x12, 0x2c,
+	0x0a, 0x27, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x5f, 0x43,
+	0x4f, 0x4d, 0x4d, 0x41, 0x4e, 0x44, 0x5f, 0x44, 0x45, 0x50, 0x45, 0x4e, 0x44, 0x45, 0x4e, 0x43,
+	0x49, 0x45, 0x53, 0x5f, 0x50, 0x41, 0x54, 0x48, 0x53, 0x10, 0xeb, 0x07, 0x12, 0x26, 0x0a, 0x21,
+	0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x54, 0x45, 0x53, 0x54, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x41,
+	0x4e, 0x44, 0x5f, 0x41, 0x4e, 0x44, 0x5f, 0x49, 0x4d, 0x41, 0x47, 0x45, 0x5f, 0x4e, 0x41, 0x4d,
+	0x45, 0x10, 0xec, 0x07, 0x42, 0x36, 0x5a, 0x34, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63,
+	0x6f, 0x6d, 0x2f, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e,
+	0x65, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x73, 0x2f, 0x73, 0x6b, 0x61, 0x66, 0x66, 0x6f, 0x6c, 0x64,
+	0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x62, 0x06, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
diff --git a/proto/enums/enums.proto b/proto/enums/enums.proto
index c95b1ce96..906747805 100644
--- a/proto/enums/enums.proto
+++ b/proto/enums/enums.proto
@@ -543,6 +543,11 @@ enum StatusCode {
     INSPECT_BUILD_ENV_INCORRECT_TYPE_ERR = 1303;
     // Trying to modify a profile that doesn't exist
     INSPECT_PROFILE_NOT_FOUND_ERR = 1304;
+
+    // Port Forwarding Errors
+
+    PORT_FORWARD_RUN_GCLOUD_NOT_FOUND = 1601;
+    PORT_FORWARD_RUN_PROXY_START_ERROR = 1602;
 }
 
 // Enum for Suggestion codes
diff --git a/proto/v1/skaffold.pb.go b/proto/v1/skaffold.pb.go
index 7355f8f74..2b8c04cb8 100644
--- a/proto/v1/skaffold.pb.go
+++ b/proto/v1/skaffold.pb.go
@@ -294,6 +294,8 @@ const StatusCode_INSPECT_UNKNOWN_ERR = enums.StatusCode_INSPECT_UNKNOWN_ERR
 const StatusCode_INSPECT_BUILD_ENV_ALREADY_EXISTS_ERR = enums.StatusCode_INSPECT_BUILD_ENV_ALREADY_EXISTS_ERR
 const StatusCode_INSPECT_BUILD_ENV_INCORRECT_TYPE_ERR = enums.StatusCode_INSPECT_BUILD_ENV_INCORRECT_TYPE_ERR
 const StatusCode_INSPECT_PROFILE_NOT_FOUND_ERR = enums.StatusCode_INSPECT_PROFILE_NOT_FOUND_ERR
+const StatusCode_PORT_FORWARD_RUN_GCLOUD_NOT_FOUND = enums.StatusCode_PORT_FORWARD_RUN_GCLOUD_NOT_FOUND
+const StatusCode_PORT_FORWARD_RUN_PROXY_START_ERROR = enums.StatusCode_PORT_FORWARD_RUN_PROXY_START_ERROR
 
 var StatusCode_name = enums.StatusCode_name
 var StatusCode_value = enums.StatusCode_value
@@ -1641,11 +1643,13 @@ type BuildEvent struct {
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	Artifact      string           `protobuf:"bytes,1,opt,name=artifact,proto3" json:"artifact,omitempty"`                            // artifact name
-	Status        string           `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"`                                // artifact build status oneof: InProgress, Completed, Failed
-	Err           string           `protobuf:"bytes,3,opt,name=err,proto3" json:"err,omitempty"`                                      // Deprecated. Use actionableErr.message. error when build status is Failed.
-	ErrCode       enums.StatusCode `protobuf:"varint,4,opt,name=errCode,proto3,enum=proto.enums.StatusCode" json:"errCode,omitempty"` // Deprecated. Use actionableErr.errCode. status code representing success or failure
-	ActionableErr *ActionableErr   `protobuf:"bytes,5,opt,name=actionableErr,proto3" json:"actionableErr,omitempty"`                  // actionable error message
+	Artifact        string           `protobuf:"bytes,1,opt,name=artifact,proto3" json:"artifact,omitempty"`                            // artifact name
+	Status          string           `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"`                                // artifact build status oneof: InProgress, Completed, Failed
+	Err             string           `protobuf:"bytes,3,opt,name=err,proto3" json:"err,omitempty"`                                      // Deprecated. Use actionableErr.message. error when build status is Failed.
+	ErrCode         enums.StatusCode `protobuf:"varint,4,opt,name=errCode,proto3,enum=proto.enums.StatusCode" json:"errCode,omitempty"` // Deprecated. Use actionableErr.errCode. status code representing success or failure
+	ActionableErr   *ActionableErr   `protobuf:"bytes,5,opt,name=actionableErr,proto3" json:"actionableErr,omitempty"`                  // actionable error message
+	HostPlatform    string           `protobuf:"bytes,6,opt,name=hostPlatform,proto3" json:"hostPlatform,omitempty"`                    // architecture of the host machine. For example `linux/amd64`
+	TargetPlatforms string           `protobuf:"bytes,7,opt,name=targetPlatforms,proto3" json:"targetPlatforms,omitempty"`              // comma-delimited list of build target architectures. For example `linux/amd64,linux/arm64`
 }
 
 func (x *BuildEvent) Reset() {
@@ -1715,6 +1719,20 @@ func (x *BuildEvent) GetActionableErr() *ActionableErr {
 	return nil
 }
 
+func (x *BuildEvent) GetHostPlatform() string {
+	if x != nil {
+		return x.HostPlatform
+	}
+	return ""
+}
+
+func (x *BuildEvent) GetTargetPlatforms() string {
+	if x != nil {
+		return x.TargetPlatforms
+	}
+	return ""
+}
+
 // `TestEvent` represents the status of a test, and is emitted by Skaffold
 // anytime a test starts or completes, successfully or not.
 type TestEvent struct {
@@ -3150,7 +3168,7 @@ var file_v1_skaffold_proto_rawDesc = []byte{
 	0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x2b, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61,
 	0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
 	0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64,
-	0x61, 0x74, 0x61, 0x22, 0xc1, 0x01, 0x0a, 0x0a, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x45, 0x76, 0x65,
+	0x61, 0x74, 0x61, 0x22, 0x8f, 0x02, 0x0a, 0x0a, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x45, 0x76, 0x65,
 	0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x18, 0x01,
 	0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x12, 0x16,
 	0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
@@ -3162,195 +3180,200 @@ var file_v1_skaffold_proto_rawDesc = []byte{
 	0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x18, 0x05, 0x20, 0x01,
 	0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f,
 	0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x52, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e,
-	0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x22, 0x5f, 0x0a, 0x09, 0x54, 0x65, 0x73, 0x74, 0x45,
+	0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x12, 0x22, 0x0a, 0x0c, 0x68, 0x6f, 0x73, 0x74, 0x50,
+	0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x68,
+	0x6f, 0x73, 0x74, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x28, 0x0a, 0x0f, 0x74,
+	0x61, 0x72, 0x67, 0x65, 0x74, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x18, 0x07,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x50, 0x6c, 0x61, 0x74,
+	0x66, 0x6f, 0x72, 0x6d, 0x73, 0x22, 0x5f, 0x0a, 0x09, 0x54, 0x65, 0x73, 0x74, 0x45, 0x76, 0x65,
+	0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x3a, 0x0a, 0x0d, 0x61, 0x63,
+	0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+	0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x52, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61,
+	0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x22, 0xa6, 0x01, 0x0a, 0x0b, 0x44, 0x65, 0x70, 0x6c, 0x6f,
+	0x79, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x10,
+	0x0a, 0x03, 0x65, 0x72, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x65, 0x72, 0x72,
+	0x12, 0x31, 0x0a, 0x07, 0x65, 0x72, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28,
+	0x0e, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2e,
+	0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x07, 0x65, 0x72, 0x72, 0x43,
+	0x6f, 0x64, 0x65, 0x12, 0x3a, 0x0a, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c,
+	0x65, 0x45, 0x72, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72,
+	0x52, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x22,
+	0xc5, 0x01, 0x0a, 0x10, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45,
 	0x76, 0x65, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x3a, 0x0a, 0x0d,
-	0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x18, 0x02, 0x20,
-	0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x63, 0x74, 0x69,
-	0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x52, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x6f,
-	0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x22, 0xa6, 0x01, 0x0a, 0x0b, 0x44, 0x65, 0x70,
-	0x6c, 0x6f, 0x79, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74,
-	0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73,
-	0x12, 0x10, 0x0a, 0x03, 0x65, 0x72, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x65,
-	0x72, 0x72, 0x12, 0x31, 0x0a, 0x07, 0x65, 0x72, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20,
-	0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x6e, 0x75, 0x6d,
-	0x73, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x07, 0x65, 0x72,
-	0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x3a, 0x0a, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61,
-	0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70,
-	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45,
-	0x72, 0x72, 0x52, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72,
-	0x72, 0x22, 0xc5, 0x01, 0x0a, 0x10, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x68, 0x65, 0x63,
-	0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73,
-	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18,
-	0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x72, 0x72, 0x18,
-	0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x65, 0x72, 0x72, 0x12, 0x31, 0x0a, 0x07, 0x65, 0x72,
-	0x72, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x70, 0x72,
-	0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
-	0x43, 0x6f, 0x64, 0x65, 0x52, 0x07, 0x65, 0x72, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x3a, 0x0a,
-	0x0d, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x18, 0x05,
-	0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x63, 0x74,
-	0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x52, 0x0d, 0x61, 0x63, 0x74, 0x69,
-	0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x22, 0xef, 0x01, 0x0a, 0x18, 0x52, 0x65,
-	0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x68, 0x65, 0x63,
-	0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72,
-	0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72,
-	0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65,
-	0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73,
-	0x73, 0x61, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x72, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28,
-	0x09, 0x52, 0x03, 0x65, 0x72, 0x72, 0x12, 0x37, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73,
-	0x43, 0x6f, 0x64, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f,
-	0x74, 0x6f, 0x2e, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43,
-	0x6f, 0x64, 0x65, 0x52, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x12,
-	0x3a, 0x0a, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72,
-	0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41,
-	0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x52, 0x0d, 0x61, 0x63,
-	0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x22, 0xd9, 0x02, 0x0a, 0x09,
-	0x50, 0x6f, 0x72, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x6f, 0x63,
-	0x61, 0x6c, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x6c, 0x6f,
-	0x63, 0x61, 0x6c, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x72, 0x65, 0x6d, 0x6f, 0x74,
-	0x65, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x72, 0x65, 0x6d,
-	0x6f, 0x74, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x6f, 0x64, 0x4e, 0x61,
-	0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x6f, 0x64, 0x4e, 0x61, 0x6d,
-	0x65, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x4e, 0x61,
-	0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69,
-	0x6e, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73,
-	0x70, 0x61, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65,
-	0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x72, 0x74, 0x4e, 0x61, 0x6d,
-	0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x72, 0x74, 0x4e, 0x61, 0x6d,
-	0x65, 0x12, 0x22, 0x0a, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70,
-	0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63,
-	0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63,
-	0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73,
-	0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64,
-	0x72, 0x65, 0x73, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72,
-	0x65, 0x73, 0x73, 0x12, 0x32, 0x0a, 0x0a, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x50, 0x6f, 0x72,
-	0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
-	0x49, 0x6e, 0x74, 0x4f, 0x72, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x0a, 0x74, 0x61, 0x72,
-	0x67, 0x65, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x22, 0xdc, 0x01, 0x0a, 0x0d, 0x46, 0x69, 0x6c, 0x65,
-	0x53, 0x79, 0x6e, 0x63, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x69, 0x6c,
-	0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x66, 0x69,
-	0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65,
-	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x16, 0x0a,
-	0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73,
-	0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x72, 0x72, 0x18, 0x04, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x03, 0x65, 0x72, 0x72, 0x12, 0x31, 0x0a, 0x07, 0x65, 0x72, 0x72, 0x43, 0x6f,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07,
+	0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d,
+	0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x72, 0x72, 0x18, 0x03, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x03, 0x65, 0x72, 0x72, 0x12, 0x31, 0x0a, 0x07, 0x65, 0x72, 0x72, 0x43,
+	0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x2e, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f,
+	0x64, 0x65, 0x52, 0x07, 0x65, 0x72, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x3a, 0x0a, 0x0d, 0x61,
+	0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x18, 0x05, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f,
+	0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x52, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+	0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x22, 0xef, 0x01, 0x0a, 0x18, 0x52, 0x65, 0x73, 0x6f,
+	0x75, 0x72, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45,
+	0x76, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
+	0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73,
+	0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61,
+	0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x72, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x03, 0x65, 0x72, 0x72, 0x12, 0x37, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f,
 	0x64, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
 	0x2e, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64,
-	0x65, 0x52, 0x07, 0x65, 0x72, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x3a, 0x0a, 0x0d, 0x61, 0x63,
-	0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28,
-	0x0b, 0x32, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e,
-	0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x52, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61,
-	0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x22, 0xf4, 0x02, 0x0a, 0x17, 0x44, 0x65, 0x62, 0x75, 0x67,
-	0x67, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x45, 0x76, 0x65,
-	0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x6f,
-	0x64, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x6f, 0x64,
-	0x4e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65,
-	0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x6f, 0x6e,
-	0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61,
-	0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e,
-	0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x72, 0x74, 0x69,
-	0x66, 0x61, 0x63, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x72, 0x74, 0x69,
-	0x66, 0x61, 0x63, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x18,
-	0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x1e,
-	0x0a, 0x0a, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x18, 0x07, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x0a, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x12, 0x4e,
-	0x0a, 0x0a, 0x64, 0x65, 0x62, 0x75, 0x67, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x18, 0x08, 0x20, 0x03,
-	0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x44, 0x65, 0x62, 0x75, 0x67,
-	0x67, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x45, 0x76, 0x65,
-	0x6e, 0x74, 0x2e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x45, 0x6e, 0x74,
-	0x72, 0x79, 0x52, 0x0a, 0x64, 0x65, 0x62, 0x75, 0x67, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x1a, 0x3d,
-	0x0a, 0x0f, 0x44, 0x65, 0x62, 0x75, 0x67, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72,
-	0x79, 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, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x7e, 0x0a,
-	0x08, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d,
-	0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67,
-	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54,
-	0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74,
-	0x61, 0x6d, 0x70, 0x12, 0x22, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01,
-	0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74,
-	0x52, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79,
-	0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x22, 0x3a, 0x0a,
-	0x11, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65,
-	0x73, 0x74, 0x12, 0x25, 0x0a, 0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01,
-	0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e,
-	0x74, 0x52, 0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x3b, 0x0a, 0x0e, 0x54, 0x72, 0x69,
-	0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x05, 0x73,
-	0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f,
-	0x74, 0x6f, 0x2e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52,
-	0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0x31, 0x0a, 0x0c, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65,
-	0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65,
-	0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c,
-	0x65, 0x64, 0x42, 0x05, 0x0a, 0x03, 0x76, 0x61, 0x6c, 0x22, 0x64, 0x0a, 0x06, 0x49, 0x6e, 0x74,
-	0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x01,
-	0x28, 0x08, 0x52, 0x05, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x79, 0x6e,
-	0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x73, 0x79, 0x6e, 0x63, 0x12, 0x16, 0x0a,
-	0x06, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x64,
-	0x65, 0x70, 0x6c, 0x6f, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x76, 0x6c, 0x6f, 0x6f, 0x70,
-	0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x64, 0x65, 0x76, 0x6c, 0x6f, 0x6f, 0x70, 0x22,
-	0x69, 0x0a, 0x0a, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x43, 0x0a,
-	0x0e, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x18,
-	0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x6e,
-	0x75, 0x6d, 0x73, 0x2e, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f,
-	0x64, 0x65, 0x52, 0x0e, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f,
-	0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x51, 0x0a, 0x0b, 0x49, 0x6e,
-	0x74, 0x4f, 0x72, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70,
-	0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a,
-	0x06, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x69,
-	0x6e, 0x74, 0x56, 0x61, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x72, 0x56, 0x61, 0x6c, 0x18,
-	0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x72, 0x56, 0x61, 0x6c, 0x32, 0xb9, 0x05,
-	0x0a, 0x0f, 0x53, 0x6b, 0x61, 0x66, 0x66, 0x6f, 0x6c, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
-	0x65, 0x12, 0x43, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x16, 0x2e,
-	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
-	0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x0c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74,
-	0x61, 0x74, 0x65, 0x22, 0x11, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0b, 0x12, 0x09, 0x2f, 0x76, 0x31,
-	0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x47, 0x0a, 0x08, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c,
-	0x6f, 0x67, 0x12, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4c, 0x6f, 0x67, 0x45, 0x6e,
-	0x74, 0x72, 0x79, 0x1a, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4c, 0x6f, 0x67, 0x45,
-	0x6e, 0x74, 0x72, 0x79, 0x22, 0x15, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x12, 0x0d, 0x2f, 0x76,
-	0x31, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x6c, 0x6f, 0x67, 0x28, 0x01, 0x30, 0x01, 0x12,
-	0x47, 0x0a, 0x06, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
-	0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74,
+	0x65, 0x52, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x3a, 0x0a,
+	0x0d, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x18, 0x06,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x63, 0x74,
+	0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x52, 0x0d, 0x61, 0x63, 0x74, 0x69,
+	0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x22, 0xd9, 0x02, 0x0a, 0x09, 0x50, 0x6f,
+	0x72, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c,
+	0x50, 0x6f, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x61,
+	0x6c, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x50,
+	0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x72, 0x65, 0x6d, 0x6f, 0x74,
+	0x65, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x6f, 0x64, 0x4e, 0x61, 0x6d, 0x65,
+	0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x6f, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x12,
+	0x24, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65,
+	0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65,
+	0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61,
+	0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70,
+	0x61, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x72, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18,
+	0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x72, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12,
+	0x22, 0x0a, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18,
+	0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54,
+	0x79, 0x70, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e,
+	0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75,
+	0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65,
+	0x73, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73,
+	0x73, 0x12, 0x32, 0x0a, 0x0a, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x18,
+	0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, 0x6e,
+	0x74, 0x4f, 0x72, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x0a, 0x74, 0x61, 0x72, 0x67, 0x65,
+	0x74, 0x50, 0x6f, 0x72, 0x74, 0x22, 0xdc, 0x01, 0x0a, 0x0d, 0x46, 0x69, 0x6c, 0x65, 0x53, 0x79,
+	0x6e, 0x63, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x43,
+	0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x66, 0x69, 0x6c, 0x65,
+	0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x02,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73,
+	0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61,
+	0x74, 0x75, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x72, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x03, 0x65, 0x72, 0x72, 0x12, 0x31, 0x0a, 0x07, 0x65, 0x72, 0x72, 0x43, 0x6f, 0x64, 0x65,
+	0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65,
+	0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52,
+	0x07, 0x65, 0x72, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x3a, 0x0a, 0x0d, 0x61, 0x63, 0x74, 0x69,
+	0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62,
+	0x6c, 0x65, 0x45, 0x72, 0x72, 0x52, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c,
+	0x65, 0x45, 0x72, 0x72, 0x22, 0xf4, 0x02, 0x0a, 0x17, 0x44, 0x65, 0x62, 0x75, 0x67, 0x67, 0x69,
+	0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74,
+	0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x6f, 0x64, 0x4e,
+	0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x6f, 0x64, 0x4e, 0x61,
+	0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x4e,
+	0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x61,
+	0x69, 0x6e, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65,
+	0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d,
+	0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61,
+	0x63, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61,
+	0x63, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a,
+	0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x0a, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x12, 0x4e, 0x0a, 0x0a,
+	0x64, 0x65, 0x62, 0x75, 0x67, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b,
+	0x32, 0x2e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x67, 0x69,
+	0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74,
+	0x2e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79,
+	0x52, 0x0a, 0x64, 0x65, 0x62, 0x75, 0x67, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x1a, 0x3d, 0x0a, 0x0f,
+	0x44, 0x65, 0x62, 0x75, 0x67, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 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, 0x0d,
+	0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x7e, 0x0a, 0x08, 0x4c,
+	0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73,
+	0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f,
+	0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d,
+	0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d,
+	0x70, 0x12, 0x22, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x0c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x05,
+	0x65, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x03,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x22, 0x3a, 0x0a, 0x11, 0x55,
+	0x73, 0x65, 0x72, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x12, 0x25, 0x0a, 0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x0d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52,
+	0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x3b, 0x0a, 0x0e, 0x54, 0x72, 0x69, 0x67, 0x67,
+	0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x05, 0x73, 0x74, 0x61,
+	0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x2e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73,
+	0x74, 0x61, 0x74, 0x65, 0x22, 0x31, 0x0a, 0x0c, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x53,
+	0x74, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64,
+	0x42, 0x05, 0x0a, 0x03, 0x76, 0x61, 0x6c, 0x22, 0x64, 0x0a, 0x06, 0x49, 0x6e, 0x74, 0x65, 0x6e,
+	0x74, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08,
+	0x52, 0x05, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x79, 0x6e, 0x63, 0x18,
+	0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x73, 0x79, 0x6e, 0x63, 0x12, 0x16, 0x0a, 0x06, 0x64,
+	0x65, 0x70, 0x6c, 0x6f, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x64, 0x65, 0x70,
+	0x6c, 0x6f, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x76, 0x6c, 0x6f, 0x6f, 0x70, 0x18, 0x04,
+	0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x64, 0x65, 0x76, 0x6c, 0x6f, 0x6f, 0x70, 0x22, 0x69, 0x0a,
+	0x0a, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x43, 0x0a, 0x0e, 0x73,
+	0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x6e, 0x75, 0x6d,
+	0x73, 0x2e, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65,
+	0x52, 0x0e, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65,
+	0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x51, 0x0a, 0x0b, 0x49, 0x6e, 0x74, 0x4f,
+	0x72, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x69,
+	0x6e, 0x74, 0x56, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x69, 0x6e, 0x74,
+	0x56, 0x61, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x72, 0x56, 0x61, 0x6c, 0x18, 0x03, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x72, 0x56, 0x61, 0x6c, 0x32, 0xb9, 0x05, 0x0a, 0x0f,
+	0x53, 0x6b, 0x61, 0x66, 0x66, 0x6f, 0x6c, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12,
+	0x43, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f,
+	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d,
+	0x70, 0x74, 0x79, 0x1a, 0x0c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x74,
+	0x65, 0x22, 0x11, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0b, 0x12, 0x09, 0x2f, 0x76, 0x31, 0x2f, 0x73,
+	0x74, 0x61, 0x74, 0x65, 0x12, 0x47, 0x0a, 0x08, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x67,
+	0x12, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72,
 	0x79, 0x1a, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74,
-	0x72, 0x79, 0x22, 0x12, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0c, 0x12, 0x0a, 0x2f, 0x76, 0x31, 0x2f,
-	0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x30, 0x01, 0x12, 0x58, 0x0a, 0x07, 0x45, 0x78, 0x65, 0x63,
-	0x75, 0x74, 0x65, 0x12, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x73, 0x65, 0x72,
-	0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e,
-	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
-	0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x22, 0x0b, 0x2f,
-	0x76, 0x31, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x3a, 0x06, 0x69, 0x6e, 0x74, 0x65,
-	0x6e, 0x74, 0x12, 0x61, 0x0a, 0x09, 0x41, 0x75, 0x74, 0x6f, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x12,
+	0x72, 0x79, 0x22, 0x15, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x12, 0x0d, 0x2f, 0x76, 0x31, 0x2f,
+	0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x6c, 0x6f, 0x67, 0x28, 0x01, 0x30, 0x01, 0x12, 0x47, 0x0a,
+	0x06, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a,
+	0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79,
+	0x22, 0x12, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0c, 0x12, 0x0a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x76,
+	0x65, 0x6e, 0x74, 0x73, 0x30, 0x01, 0x12, 0x58, 0x0a, 0x07, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74,
+	0x65, 0x12, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e,
+	0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f,
+	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d,
+	0x70, 0x74, 0x79, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x22, 0x0b, 0x2f, 0x76, 0x31,
+	0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x3a, 0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74,
+	0x12, 0x61, 0x0a, 0x09, 0x41, 0x75, 0x74, 0x6f, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x15, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x71,
+	0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x25, 0x82, 0xd3,
+	0xe4, 0x93, 0x02, 0x1f, 0x1a, 0x16, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f,
+	0x61, 0x75, 0x74, 0x6f, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x3a, 0x05, 0x73, 0x74,
+	0x61, 0x74, 0x65, 0x12, 0x5f, 0x0a, 0x08, 0x41, 0x75, 0x74, 0x6f, 0x53, 0x79, 0x6e, 0x63, 0x12,
 	0x15, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52,
 	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
-	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x25,
-	0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x1a, 0x16, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x75, 0x69, 0x6c,
-	0x64, 0x2f, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x3a, 0x05,
-	0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x5f, 0x0a, 0x08, 0x41, 0x75, 0x74, 0x6f, 0x53, 0x79, 0x6e,
-	0x63, 0x12, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65,
-	0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
-	0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79,
-	0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x1a, 0x15, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x79,
-	0x6e, 0x63, 0x2f, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x3a,
-	0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x63, 0x0a, 0x0a, 0x41, 0x75, 0x74, 0x6f, 0x44, 0x65,
-	0x70, 0x6c, 0x6f, 0x79, 0x12, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x54, 0x72, 0x69,
-	0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f,
-	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d,
-	0x70, 0x74, 0x79, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x1a, 0x17, 0x2f, 0x76, 0x31,
-	0x2f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x2f, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x65, 0x78, 0x65,
-	0x63, 0x75, 0x74, 0x65, 0x3a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x4c, 0x0a, 0x06, 0x48,
-	0x61, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x0c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x76,
-	0x65, 0x6e, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
-	0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1c, 0x82, 0xd3, 0xe4,
-	0x93, 0x02, 0x16, 0x22, 0x11, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2f,
-	0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x3a, 0x01, 0x2a, 0x42, 0x30, 0x5a, 0x2e, 0x67, 0x69, 0x74,
-	0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x43, 0x6f,
-	0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x73, 0x2f, 0x73, 0x6b, 0x61,
-	0x66, 0x66, 0x6f, 0x6c, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x03, 0x62, 0x06, 0x70,
-	0x72, 0x6f, 0x74, 0x6f, 0x33,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x24,
+	0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x1a, 0x15, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x79, 0x6e, 0x63,
+	0x2f, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x3a, 0x05, 0x73,
+	0x74, 0x61, 0x74, 0x65, 0x12, 0x63, 0x0a, 0x0a, 0x41, 0x75, 0x74, 0x6f, 0x44, 0x65, 0x70, 0x6c,
+	0x6f, 0x79, 0x12, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x54, 0x72, 0x69, 0x67, 0x67,
+	0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
+	0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74,
+	0x79, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x1a, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x64,
+	0x65, 0x70, 0x6c, 0x6f, 0x79, 0x2f, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75,
+	0x74, 0x65, 0x3a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x4c, 0x0a, 0x06, 0x48, 0x61, 0x6e,
+	0x64, 0x6c, 0x65, 0x12, 0x0c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x76, 0x65, 0x6e,
+	0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02,
+	0x16, 0x22, 0x11, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x68, 0x61,
+	0x6e, 0x64, 0x6c, 0x65, 0x3a, 0x01, 0x2a, 0x42, 0x30, 0x5a, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75,
+	0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x74,
+	0x61, 0x69, 0x6e, 0x65, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x73, 0x2f, 0x73, 0x6b, 0x61, 0x66, 0x66,
+	0x6f, 0x6c, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x03, 0x62, 0x06, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x33,
 }
 
 var (
diff --git a/proto/v1/skaffold.proto b/proto/v1/skaffold.proto
index 7fa3acab6..3f13ac981 100644
--- a/proto/v1/skaffold.proto
+++ b/proto/v1/skaffold.proto
@@ -175,7 +175,8 @@ message BuildEvent {
     string err = 3; // Deprecated. Use actionableErr.message. error when build status is Failed.
     enums.StatusCode errCode = 4; // Deprecated. Use actionableErr.errCode. status code representing success or failure
     ActionableErr actionableErr = 5; // actionable error message
-
+    string hostPlatform = 6; // architecture of the host machine. For example `linux/amd64`
+    string targetPlatforms = 7; // comma-delimited list of build target architectures. For example `linux/amd64,linux/arm64`
 }
 
 // `TestEvent` represents the status of a test, and is emitted by Skaffold
diff --git a/proto/v2/skaffold.pb.go b/proto/v2/skaffold.pb.go
index b5b00ab38..af4acd8ea 100644
--- a/proto/v2/skaffold.pb.go
+++ b/proto/v2/skaffold.pb.go
@@ -294,6 +294,8 @@ const StatusCode_INSPECT_UNKNOWN_ERR = enums.StatusCode_INSPECT_UNKNOWN_ERR
 const StatusCode_INSPECT_BUILD_ENV_ALREADY_EXISTS_ERR = enums.StatusCode_INSPECT_BUILD_ENV_ALREADY_EXISTS_ERR
 const StatusCode_INSPECT_BUILD_ENV_INCORRECT_TYPE_ERR = enums.StatusCode_INSPECT_BUILD_ENV_INCORRECT_TYPE_ERR
 const StatusCode_INSPECT_PROFILE_NOT_FOUND_ERR = enums.StatusCode_INSPECT_PROFILE_NOT_FOUND_ERR
+const StatusCode_PORT_FORWARD_RUN_GCLOUD_NOT_FOUND = enums.StatusCode_PORT_FORWARD_RUN_GCLOUD_NOT_FOUND
+const StatusCode_PORT_FORWARD_RUN_PROXY_START_ERROR = enums.StatusCode_PORT_FORWARD_RUN_PROXY_START_ERROR
 
 var StatusCode_name = enums.StatusCode_name
 var StatusCode_value = enums.StatusCode_value
@@ -2055,12 +2057,14 @@ type BuildSubtaskEvent struct {
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	Id            string         `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`                       // id of the subtask which will be used in SkaffoldLog
-	TaskId        string         `protobuf:"bytes,2,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"` // id of the task of skaffold that this event came from
-	Artifact      string         `protobuf:"bytes,3,opt,name=artifact,proto3" json:"artifact,omitempty"`           // artifact name
-	Step          string         `protobuf:"bytes,4,opt,name=step,proto3" json:"step,omitempty"`                   // which step of the build for the artifact oneof: Cache, Build, Push
-	Status        string         `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"`               // artifact build status oneof: InProgress, Completed, Failed
-	ActionableErr *ActionableErr `protobuf:"bytes,6,opt,name=actionableErr,proto3" json:"actionableErr,omitempty"` // actionable error message
+	Id              string         `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`                           // id of the subtask which will be used in SkaffoldLog
+	TaskId          string         `protobuf:"bytes,2,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"`     // id of the task of skaffold that this event came from
+	Artifact        string         `protobuf:"bytes,3,opt,name=artifact,proto3" json:"artifact,omitempty"`               // artifact name
+	Step            string         `protobuf:"bytes,4,opt,name=step,proto3" json:"step,omitempty"`                       // which step of the build for the artifact oneof: Cache, Build, Push
+	Status          string         `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"`                   // artifact build status oneof: InProgress, Completed, Failed
+	ActionableErr   *ActionableErr `protobuf:"bytes,6,opt,name=actionableErr,proto3" json:"actionableErr,omitempty"`     // actionable error message
+	HostPlatform    string         `protobuf:"bytes,7,opt,name=hostPlatform,proto3" json:"hostPlatform,omitempty"`       // platform of the host machine. For example `linux/amd64`
+	TargetPlatforms string         `protobuf:"bytes,8,opt,name=targetPlatforms,proto3" json:"targetPlatforms,omitempty"` // comma-delimited list of build target platforms. For example `linux/amd64,linux/arm64`
 }
 
 func (x *BuildSubtaskEvent) Reset() {
@@ -2137,6 +2141,20 @@ func (x *BuildSubtaskEvent) GetActionableErr() *ActionableErr {
 	return nil
 }
 
+func (x *BuildSubtaskEvent) GetHostPlatform() string {
+	if x != nil {
+		return x.HostPlatform
+	}
+	return ""
+}
+
+func (x *BuildSubtaskEvent) GetTargetPlatforms() string {
+	if x != nil {
+		return x.TargetPlatforms
+	}
+	return ""
+}
+
 // `TestSubtaskEvent` represents the status of a test, and is emitted by Skaffold
 // anytime a test starts or completes, successfully or not.
 type TestSubtaskEvent struct {
@@ -3781,7 +3799,7 @@ var file_v2_skaffold_proto_rawDesc = []byte{
 	0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
 	0x76, 0x32, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72,
 	0x52, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x22,
-	0xc3, 0x01, 0x0a, 0x11, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x53, 0x75, 0x62, 0x74, 0x61, 0x73, 0x6b,
+	0x91, 0x02, 0x0a, 0x11, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x53, 0x75, 0x62, 0x74, 0x61, 0x73, 0x6b,
 	0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
 	0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64,
 	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x1a,
@@ -3793,26 +3811,12 @@ var file_v2_skaffold_proto_rawDesc = []byte{
 	0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e,
 	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61,
 	0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x52, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62,
-	0x6c, 0x65, 0x45, 0x72, 0x72, 0x22, 0x92, 0x01, 0x0a, 0x10, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75,
-	0x62, 0x74, 0x61, 0x73, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64,
-	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x61,
-	0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x73,
-	0x6b, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20,
-	0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x3d, 0x0a, 0x0d, 0x61,
-	0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x18, 0x04, 0x20, 0x01,
-	0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x63,
-	0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x52, 0x0d, 0x61, 0x63, 0x74,
-	0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x22, 0x94, 0x01, 0x0a, 0x12, 0x52,
-	0x65, 0x6e, 0x64, 0x65, 0x72, 0x53, 0x75, 0x62, 0x74, 0x61, 0x73, 0x6b, 0x45, 0x76, 0x65, 0x6e,
-	0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69,
-	0x64, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74,
-	0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74,
-	0x75, 0x73, 0x12, 0x3d, 0x0a, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65,
-	0x45, 0x72, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74,
-	0x6f, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45,
-	0x72, 0x72, 0x52, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72,
-	0x72, 0x22, 0x94, 0x01, 0x0a, 0x12, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x53, 0x75, 0x62, 0x74,
+	0x6c, 0x65, 0x45, 0x72, 0x72, 0x12, 0x22, 0x0a, 0x0c, 0x68, 0x6f, 0x73, 0x74, 0x50, 0x6c, 0x61,
+	0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x68, 0x6f, 0x73,
+	0x74, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x28, 0x0a, 0x0f, 0x74, 0x61, 0x72,
+	0x67, 0x65, 0x74, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x18, 0x08, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f,
+	0x72, 0x6d, 0x73, 0x22, 0x92, 0x01, 0x0a, 0x10, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x62, 0x74,
 	0x61, 0x73, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01,
 	0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b,
 	0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49,
@@ -3821,8 +3825,8 @@ var file_v2_skaffold_proto_rawDesc = []byte{
 	0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b,
 	0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x63, 0x74, 0x69,
 	0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x52, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x6f,
-	0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x22, 0x94, 0x01, 0x0a, 0x12, 0x44, 0x65, 0x70,
-	0x6c, 0x6f, 0x79, 0x53, 0x75, 0x62, 0x74, 0x61, 0x73, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12,
+	0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x22, 0x94, 0x01, 0x0a, 0x12, 0x52, 0x65, 0x6e,
+	0x64, 0x65, 0x72, 0x53, 0x75, 0x62, 0x74, 0x61, 0x73, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12,
 	0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12,
 	0x17, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
 	0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74,
@@ -3831,164 +3835,183 @@ var file_v2_skaffold_proto_rawDesc = []byte{
 	0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
 	0x76, 0x32, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72,
 	0x52, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x22,
-	0x88, 0x02, 0x0a, 0x17, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53,
-	0x75, 0x62, 0x74, 0x61, 0x73, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69,
-	0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x74,
-	0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61,
-	0x73, 0x6b, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
-	0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
-	0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73,
-	0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61,
-	0x67, 0x65, 0x12, 0x37, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65,
-	0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65,
-	0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52,
-	0x0a, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x3d, 0x0a, 0x0d, 0x61,
-	0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x18, 0x07, 0x20, 0x01,
-	0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x63,
-	0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x52, 0x0d, 0x61, 0x63, 0x74,
-	0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x22, 0xec, 0x02, 0x0a, 0x10, 0x50,
-	0x6f, 0x72, 0x74, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12,
-	0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12,
-	0x17, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x61,
-	0x6c, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x6c, 0x6f, 0x63,
-	0x61, 0x6c, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x6f, 0x64, 0x4e, 0x61, 0x6d,
-	0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x6f, 0x64, 0x4e, 0x61, 0x6d, 0x65,
-	0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x4e, 0x61, 0x6d,
-	0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e,
-	0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70,
-	0x61, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73,
-	0x70, 0x61, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x72, 0x74, 0x4e, 0x61, 0x6d, 0x65,
-	0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x72, 0x74, 0x4e, 0x61, 0x6d, 0x65,
-	0x12, 0x22, 0x0a, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65,
-	0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
-	0x54, 0x79, 0x70, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
-	0x4e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f,
-	0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72,
-	0x65, 0x73, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65,
-	0x73, 0x73, 0x12, 0x35, 0x0a, 0x0a, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x50, 0x6f, 0x72, 0x74,
-	0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76,
-	0x32, 0x2e, 0x49, 0x6e, 0x74, 0x4f, 0x72, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x0a, 0x74,
-	0x61, 0x72, 0x67, 0x65, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x22, 0xc3, 0x01, 0x0a, 0x0d, 0x46, 0x69,
-	0x6c, 0x65, 0x53, 0x79, 0x6e, 0x63, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69,
-	0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x74,
-	0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61,
-	0x73, 0x6b, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e,
-	0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x75,
-	0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28,
-	0x09, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74,
-	0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73,
-	0x12, 0x3d, 0x0a, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72,
-	0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
-	0x76, 0x32, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72,
-	0x52, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x22,
-	0xa0, 0x03, 0x0a, 0x17, 0x44, 0x65, 0x62, 0x75, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e,
-	0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69,
-	0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x74,
-	0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61,
-	0x73, 0x6b, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07,
-	0x70, 0x6f, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70,
-	0x6f, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69,
-	0x6e, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x63,
-	0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09,
-	0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x72,
-	0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x72,
-	0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d,
-	0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65,
-	0x12, 0x1e, 0x0a, 0x0a, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x18, 0x09,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72,
-	0x12, 0x51, 0x0a, 0x0a, 0x64, 0x65, 0x62, 0x75, 0x67, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x18, 0x0a,
-	0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32, 0x2e,
-	0x44, 0x65, 0x62, 0x75, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e,
-	0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x50, 0x6f, 0x72,
-	0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x64, 0x65, 0x62, 0x75, 0x67, 0x50, 0x6f,
-	0x72, 0x74, 0x73, 0x1a, 0x3d, 0x0a, 0x0f, 0x44, 0x65, 0x62, 0x75, 0x67, 0x50, 0x6f, 0x72, 0x74,
-	0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 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, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02,
-	0x38, 0x01, 0x22, 0x3d, 0x0a, 0x11, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74,
-	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e,
-	0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
-	0x76, 0x32, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e,
-	0x74, 0x22, 0x3e, 0x0a, 0x0e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75,
-	0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01,
-	0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x72,
-	0x69, 0x67, 0x67, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74,
-	0x65, 0x22, 0x31, 0x0a, 0x0c, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74,
-	0x65, 0x12, 0x1a, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01,
-	0x28, 0x08, 0x48, 0x00, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x42, 0x05, 0x0a,
-	0x03, 0x76, 0x61, 0x6c, 0x22, 0x64, 0x0a, 0x06, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x14,
-	0x0a, 0x05, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x62,
-	0x75, 0x69, 0x6c, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x79, 0x6e, 0x63, 0x18, 0x02, 0x20, 0x01,
-	0x28, 0x08, 0x52, 0x04, 0x73, 0x79, 0x6e, 0x63, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x65, 0x70, 0x6c,
-	0x6f, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79,
-	0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x76, 0x6c, 0x6f, 0x6f, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28,
-	0x08, 0x52, 0x07, 0x64, 0x65, 0x76, 0x6c, 0x6f, 0x6f, 0x70, 0x22, 0x69, 0x0a, 0x0a, 0x53, 0x75,
-	0x67, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x43, 0x0a, 0x0e, 0x73, 0x75, 0x67, 0x67,
-	0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e,
-	0x32, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x53,
-	0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x0e, 0x73,
-	0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a,
-	0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61,
-	0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x51, 0x0a, 0x0b, 0x49, 0x6e, 0x74, 0x4f, 0x72, 0x53, 0x74,
-	0x72, 0x69, 0x6e, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01,
-	0x28, 0x05, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x6e, 0x74, 0x56,
-	0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c,
-	0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x72, 0x56, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x06, 0x73, 0x74, 0x72, 0x56, 0x61, 0x6c, 0x32, 0xdf, 0x05, 0x0a, 0x11, 0x53, 0x6b, 0x61,
-	0x66, 0x66, 0x6f, 0x6c, 0x64, 0x56, 0x32, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x46,
-	0x0a, 0x08, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f,
-	0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70,
-	0x74, 0x79, 0x1a, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74,
-	0x61, 0x74, 0x65, 0x22, 0x11, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0b, 0x12, 0x09, 0x2f, 0x76, 0x32,
-	0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x47, 0x0a, 0x06, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73,
+	0x94, 0x01, 0x0a, 0x12, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x53, 0x75, 0x62, 0x74, 0x61, 0x73,
+	0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69,
+	0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12,
+	0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x3d, 0x0a, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x6f,
+	0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+	0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x52, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61,
+	0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x22, 0x94, 0x01, 0x0a, 0x12, 0x44, 0x65, 0x70, 0x6c, 0x6f,
+	0x79, 0x53, 0x75, 0x62, 0x74, 0x61, 0x73, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a,
+	0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a,
+	0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
+	0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73,
+	0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x3d,
+	0x0a, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x18,
+	0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32,
+	0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x52, 0x0d,
+	0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x22, 0x88, 0x02,
+	0x0a, 0x17, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x75, 0x62,
+	0x74, 0x61, 0x73, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x61, 0x73,
+	0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b,
+	0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x16,
+	0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
+	0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67,
+	0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
+	0x12, 0x37, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x06,
+	0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x6e, 0x75,
+	0x6d, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x0a, 0x73,
+	0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x3d, 0x0a, 0x0d, 0x61, 0x63, 0x74,
+	0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x63, 0x74, 0x69,
+	0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x52, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x6f,
+	0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x22, 0xec, 0x02, 0x0a, 0x10, 0x50, 0x6f, 0x72,
+	0x74, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a,
+	0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a,
+	0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
+	0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x50,
+	0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c,
+	0x50, 0x6f, 0x72, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x6f, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x18,
+	0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x6f, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x24,
+	0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18,
+	0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72,
+	0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63,
+	0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61,
+	0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x72, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x07,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x72, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x22,
+	0x0a, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x08,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79,
+	0x70, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61,
+	0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72,
+	0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73,
+	0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73,
+	0x12, 0x35, 0x0a, 0x0a, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x0b,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32, 0x2e,
+	0x49, 0x6e, 0x74, 0x4f, 0x72, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x0a, 0x74, 0x61, 0x72,
+	0x67, 0x65, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x22, 0xc3, 0x01, 0x0a, 0x0d, 0x46, 0x69, 0x6c, 0x65,
+	0x53, 0x79, 0x6e, 0x63, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x61, 0x73,
+	0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b,
+	0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18,
+	0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74,
+	0x12, 0x14, 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73,
+	0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x3d,
+	0x0a, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x18,
+	0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32,
+	0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x52, 0x0d,
+	0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x72, 0x72, 0x22, 0xa0, 0x03,
+	0x0a, 0x17, 0x44, 0x65, 0x62, 0x75, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x74, 0x61,
+	0x69, 0x6e, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x61, 0x73,
+	0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b,
+	0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x6f,
+	0x64, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x6f, 0x64,
+	0x4e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65,
+	0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x6f, 0x6e,
+	0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61,
+	0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e,
+	0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x72, 0x74, 0x69,
+	0x66, 0x61, 0x63, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x72, 0x74, 0x69,
+	0x66, 0x61, 0x63, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x18,
+	0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x1e,
+	0x0a, 0x0a, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x18, 0x09, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x0a, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x12, 0x51,
+	0x0a, 0x0a, 0x64, 0x65, 0x62, 0x75, 0x67, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x18, 0x0a, 0x20, 0x03,
+	0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65,
+	0x62, 0x75, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72,
+	0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x50, 0x6f, 0x72, 0x74, 0x73,
+	0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x64, 0x65, 0x62, 0x75, 0x67, 0x50, 0x6f, 0x72, 0x74,
+	0x73, 0x1a, 0x3d, 0x0a, 0x0f, 0x44, 0x65, 0x62, 0x75, 0x67, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x45,
+	0x6e, 0x74, 0x72, 0x79, 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, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01,
+	0x22, 0x3d, 0x0a, 0x11, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32,
+	0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22,
+	0x3e, 0x0a, 0x0e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x12, 0x2c, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x72, 0x69, 0x67,
+	0x67, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22,
+	0x31, 0x0a, 0x0c, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12,
+	0x1a, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08,
+	0x48, 0x00, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x42, 0x05, 0x0a, 0x03, 0x76,
+	0x61, 0x6c, 0x22, 0x64, 0x0a, 0x06, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05,
+	0x62, 0x75, 0x69, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x62, 0x75, 0x69,
+	0x6c, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x79, 0x6e, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08,
+	0x52, 0x04, 0x73, 0x79, 0x6e, 0x63, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79,
+	0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x12, 0x18,
+	0x0a, 0x07, 0x64, 0x65, 0x76, 0x6c, 0x6f, 0x6f, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52,
+	0x07, 0x64, 0x65, 0x76, 0x6c, 0x6f, 0x6f, 0x70, 0x22, 0x69, 0x0a, 0x0a, 0x53, 0x75, 0x67, 0x67,
+	0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x43, 0x0a, 0x0e, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73,
+	0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x53, 0x75, 0x67,
+	0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x0e, 0x73, 0x75, 0x67,
+	0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61,
+	0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x63, 0x74,
+	0x69, 0x6f, 0x6e, 0x22, 0x51, 0x0a, 0x0b, 0x49, 0x6e, 0x74, 0x4f, 0x72, 0x53, 0x74, 0x72, 0x69,
+	0x6e, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05,
+	0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c,
+	0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x12, 0x16,
+	0x0a, 0x06, 0x73, 0x74, 0x72, 0x56, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
+	0x73, 0x74, 0x72, 0x56, 0x61, 0x6c, 0x32, 0xdf, 0x05, 0x0a, 0x11, 0x53, 0x6b, 0x61, 0x66, 0x66,
+	0x6f, 0x6c, 0x64, 0x56, 0x32, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x46, 0x0a, 0x08,
+	0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
+	0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79,
+	0x1a, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x74,
+	0x65, 0x22, 0x11, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0b, 0x12, 0x09, 0x2f, 0x76, 0x32, 0x2f, 0x73,
+	0x74, 0x61, 0x74, 0x65, 0x12, 0x47, 0x0a, 0x06, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x16,
+	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
+	0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76,
+	0x32, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x12, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0c, 0x12,
+	0x0a, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x30, 0x01, 0x12, 0x59, 0x0a,
+	0x0f, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x67, 0x73,
 	0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
 	0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
-	0x2e, 0x76, 0x32, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x12, 0x82, 0xd3, 0xe4, 0x93, 0x02,
-	0x0c, 0x12, 0x0a, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x30, 0x01, 0x12,
-	0x59, 0x0a, 0x0f, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f,
-	0x67, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
-	0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x0f, 0x2e, 0x70, 0x72, 0x6f,
-	0x74, 0x6f, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x1b, 0x82, 0xd3, 0xe4,
-	0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, 0x76, 0x32, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61,
-	0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x67, 0x73, 0x30, 0x01, 0x12, 0x5b, 0x0a, 0x07, 0x45, 0x78,
-	0x65, 0x63, 0x75, 0x74, 0x65, 0x12, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32,
-	0x2e, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65,
-	0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
-	0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93,
-	0x02, 0x15, 0x22, 0x0b, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x3a,
-	0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x64, 0x0a, 0x09, 0x41, 0x75, 0x74, 0x6f, 0x42,
-	0x75, 0x69, 0x6c, 0x64, 0x12, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32, 0x2e,
-	0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16,
-	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
-	0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x1a, 0x16,
-	0x2f, 0x76, 0x32, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x65,
-	0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x3a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x62, 0x0a,
-	0x08, 0x41, 0x75, 0x74, 0x6f, 0x53, 0x79, 0x6e, 0x63, 0x12, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74,
-	0x6f, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75,
-	0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
-	0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x24, 0x82, 0xd3, 0xe4,
-	0x93, 0x02, 0x1e, 0x1a, 0x15, 0x2f, 0x76, 0x32, 0x2f, 0x73, 0x79, 0x6e, 0x63, 0x2f, 0x61, 0x75,
-	0x74, 0x6f, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x3a, 0x05, 0x73, 0x74, 0x61, 0x74,
-	0x65, 0x12, 0x66, 0x0a, 0x0a, 0x41, 0x75, 0x74, 0x6f, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x12,
-	0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x72, 0x69, 0x67, 0x67,
-	0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
-	0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74,
-	0x79, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x1a, 0x17, 0x2f, 0x76, 0x32, 0x2f, 0x64,
-	0x65, 0x70, 0x6c, 0x6f, 0x79, 0x2f, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75,
-	0x74, 0x65, 0x3a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x4f, 0x0a, 0x06, 0x48, 0x61, 0x6e,
-	0x64, 0x6c, 0x65, 0x12, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32, 0x2e, 0x45,
-	0x76, 0x65, 0x6e, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
-	0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1c, 0x82, 0xd3,
-	0xe4, 0x93, 0x02, 0x16, 0x22, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73,
-	0x2f, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x3a, 0x01, 0x2a, 0x42, 0x33, 0x5a, 0x31, 0x67, 0x69,
-	0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x43,
-	0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x73, 0x2f, 0x73, 0x6b,
-	0x61, 0x66, 0x66, 0x6f, 0x6c, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x76, 0x32, 0x50,
-	0x03, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+	0x2e, 0x76, 0x32, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02,
+	0x15, 0x12, 0x13, 0x2f, 0x76, 0x32, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69,
+	0x6f, 0x6e, 0x4c, 0x6f, 0x67, 0x73, 0x30, 0x01, 0x12, 0x5b, 0x0a, 0x07, 0x45, 0x78, 0x65, 0x63,
+	0x75, 0x74, 0x65, 0x12, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32, 0x2e, 0x55,
+	0x73, 0x65, 0x72, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
+	0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15,
+	0x22, 0x0b, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x3a, 0x06, 0x69,
+	0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x64, 0x0a, 0x09, 0x41, 0x75, 0x74, 0x6f, 0x42, 0x75, 0x69,
+	0x6c, 0x64, 0x12, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x72,
+	0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67,
+	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45,
+	0x6d, 0x70, 0x74, 0x79, 0x22, 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x1a, 0x16, 0x2f, 0x76,
+	0x32, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x65, 0x78, 0x65,
+	0x63, 0x75, 0x74, 0x65, 0x3a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x62, 0x0a, 0x08, 0x41,
+	0x75, 0x74, 0x6f, 0x53, 0x79, 0x6e, 0x63, 0x12, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
+	0x76, 0x32, 0x2e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02,
+	0x1e, 0x1a, 0x15, 0x2f, 0x76, 0x32, 0x2f, 0x73, 0x79, 0x6e, 0x63, 0x2f, 0x61, 0x75, 0x74, 0x6f,
+	0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x3a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12,
+	0x66, 0x0a, 0x0a, 0x41, 0x75, 0x74, 0x6f, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x12, 0x18, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72,
+	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22,
+	0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x1a, 0x17, 0x2f, 0x76, 0x32, 0x2f, 0x64, 0x65, 0x70,
+	0x6c, 0x6f, 0x79, 0x2f, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65,
+	0x3a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x4f, 0x0a, 0x06, 0x48, 0x61, 0x6e, 0x64, 0x6c,
+	0x65, 0x12, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x76, 0x65,
+	0x6e, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93,
+	0x02, 0x16, 0x22, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x68,
+	0x61, 0x6e, 0x64, 0x6c, 0x65, 0x3a, 0x01, 0x2a, 0x42, 0x33, 0x5a, 0x31, 0x67, 0x69, 0x74, 0x68,
+	0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x43, 0x6f, 0x6e,
+	0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x73, 0x2f, 0x73, 0x6b, 0x61, 0x66,
+	0x66, 0x6f, 0x6c, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x76, 0x32, 0x50, 0x03, 0x62,
+	0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
diff --git a/proto/v2/skaffold.proto b/proto/v2/skaffold.proto
index a85c71023..1fc8f813a 100644
--- a/proto/v2/skaffold.proto
+++ b/proto/v2/skaffold.proto
@@ -232,6 +232,8 @@ message BuildSubtaskEvent {
     string step = 4; // which step of the build for the artifact oneof: Cache, Build, Push
     string status = 5; // artifact build status oneof: InProgress, Completed, Failed
     ActionableErr actionableErr = 6; // actionable error message
+    string hostPlatform = 7; // platform of the host machine. For example `linux/amd64`
+    string targetPlatforms = 8; // comma-delimited list of build target platforms. For example `linux/amd64,linux/arm64`
 }
 
 // `TestSubtaskEvent` represents the status of a test, and is emitted by Skaffold


Test patch:
diff --git a/pkg/skaffold/deploy/cloudrun/accessor_test.go b/pkg/skaffold/deploy/cloudrun/accessor_test.go
new file mode 100644
index 000000000..34e2a82ec
--- /dev/null
+++ b/pkg/skaffold/deploy/cloudrun/accessor_test.go
@@ -0,0 +1,221 @@
+/*
+Copyright 2022 The Skaffold Authors
+
+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.
+*/
+package cloudrun
+
+import (
+	"bufio"
+	"bytes"
+	"context"
+	"testing"
+
+	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/config"
+	sErrors "github.com/GoogleContainerTools/skaffold/pkg/skaffold/errors"
+	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/schema/latest"
+	"github.com/GoogleContainerTools/skaffold/proto/v1"
+)
+
+type testAccessConfig struct {
+	options  config.PortForwardOptions
+	forwards []*latest.PortForwardResource
+}
+
+func (t *testAccessConfig) PortForwardOptions() config.PortForwardOptions {
+	return t.options
+}
+func (t *testAccessConfig) Mode() config.RunMode {
+	return config.RunModes.Run
+}
+func (t *testAccessConfig) PortForwardResources() []*latest.PortForwardResource {
+	return t.forwards
+}
+func newTestConfig(forwardModes string) *testAccessConfig {
+	options := config.PortForwardOptions{}
+	options.Set(forwardModes)
+	return &testAccessConfig{options: options}
+}
+func TestNewAccessor(t *testing.T) {
+	tests := []struct {
+		name          string
+		forwardModes  string
+		numForwarders int
+	}{
+		{
+			name:          "forwards services has forwarder",
+			forwardModes:  "services",
+			numForwarders: 1,
+		},
+		{
+			name:          "forwards user only has no forwarders",
+			forwardModes:  "user",
+			numForwarders: 0,
+		},
+	}
+	for _, test := range tests {
+		t.Run(test.name, func(t *testing.T) {
+			cfg := newTestConfig(test.forwardModes)
+			accessor := NewAccessor(cfg, "")
+			if len(accessor.forwarders) != test.numForwarders {
+				t.Fatalf("expected %d forwarders, but got %v", test.numForwarders, accessor.forwarders)
+			}
+		})
+	}
+}
+func TestResourcesAddedConfigurePorts(t *testing.T) {
+	tests := []struct {
+		name           string
+		resources      []RunResourceName
+		forwardConfigs []*latest.PortForwardResource
+		outputs        []forwardedResource
+	}{
+		{
+			name: "no forwards has no ports set",
+			resources: []RunResourceName{
+				{
+					Project: "test-proj",
+					Region:  "test-region",
+					Service: "test-service",
+				},
+			},
+			outputs: []forwardedResource{
+				{
+					name: RunResourceName{
+						Project: "test-proj",
+						Region:  "test-region",
+						Service: "test-service",
+					},
+					port: 0,
+				},
+			},
+		},
+		{
+			name: "forward has port set",
+			resources: []RunResourceName{
+				{
+					Project: "test-proj",
+					Region:  "test-region",
+					Service: "test-service",
+				},
+			},
+			forwardConfigs: []*latest.PortForwardResource{
+				{
+					Type:      "service",
+					Name:      "test-service",
+					LocalPort: 9000,
+				},
+			},
+			outputs: []forwardedResource{
+				{
+					name: RunResourceName{
+						Project: "test-proj",
+						Region:  "test-region",
+						Service: "test-service",
+					},
+					port: 9000,
+				},
+			},
+		},
+		{
+			name: "name mismatch has no port set",
+			resources: []RunResourceName{
+				{
+					Project: "test-proj",
+					Region:  "test-region",
+					Service: "test-service",
+				},
+			},
+			forwardConfigs: []*latest.PortForwardResource{
+				{
+					Type:      "service",
+					Name:      "test-service2",
+					LocalPort: 9000,
+				},
+			},
+			outputs: []forwardedResource{
+				{
+					name: RunResourceName{
+						Project: "test-proj",
+						Region:  "test-region",
+						Service: "test-service",
+					},
+					port: 0,
+				},
+			},
+		},
+	}
+
+	for _, test := range tests {
+		t.Run(test.name, func(t *testing.T) {
+			cfg := newTestConfig("")
+			cfg.forwards = test.forwardConfigs
+			accessor := NewAccessor(cfg, "")
+			for _, resource := range test.resources {
+				accessor.AddResource(resource)
+			}
+			if len(test.outputs) != len(accessor.resources.resources) {
+				t.Fatalf("Mismatch in expected outputs. Expected %v, got %v", test.outputs, accessor.resources.resources)
+			}
+			for i, output := range test.outputs {
+				got := accessor.resources.resources[i]
+				if output.name != got.name || output.port != got.port {
+					t.Fatalf("did not get expected port set. Expected %v, got %v", output, got)
+				}
+			}
+		})
+	}
+}
+
+func TestGcloudFoundServicesForwarder(t *testing.T) {
+	tests := []struct {
+		name         string
+		gcloudFound  bool
+		expectStatus proto.StatusCode
+	}{
+		{
+			name:        "gcloud found",
+			gcloudFound: true,
+		},
+		{
+			name:         "gcloud not found",
+			gcloudFound:  false,
+			expectStatus: proto.StatusCode_PORT_FORWARD_RUN_GCLOUD_NOT_FOUND,
+		},
+	}
+
+	for _, test := range tests {
+		t.Run(test.name, func(t *testing.T) {
+			forwarder := runProxyForwarder{resources: &resourceTracker{}}
+			gcloudInstalled = func() bool { return test.gcloudFound }
+			ctx := context.Background()
+			var b bytes.Buffer
+			writer := bufio.NewWriter(&b)
+			err := forwarder.Start(ctx, writer)
+			output := b.Bytes()
+			if test.expectStatus == proto.StatusCode_OK {
+				if err != nil {
+					t.Fatalf("expected success, got error: %v with output %s", err, string(output))
+				}
+			} else {
+				if err == nil {
+					t.Fatalf("expected failure with code %v, got success with output: %s", test.expectStatus, string(output))
+				}
+				sErr := err.(*sErrors.ErrDef)
+				if sErr.StatusCode() != test.expectStatus {
+					t.Fatalf("expected failure with code %v, got code %v with output: %s", test.expectStatus, sErr.StatusCode(), string(output))
+				}
+			}
+		})
+	}
+}
diff --git a/pkg/skaffold/deploy/cloudrun/deploy_test.go b/pkg/skaffold/deploy/cloudrun/deploy_test.go
index cd198ad89..4518c5c8e 100644
--- a/pkg/skaffold/deploy/cloudrun/deploy_test.go
+++ b/pkg/skaffold/deploy/cloudrun/deploy_test.go
@@ -29,6 +29,7 @@ import (
 
 	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/deploy/label"
 	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/graph"
+	runcontext "github.com/GoogleContainerTools/skaffold/pkg/skaffold/runner/runcontext/v2"
 	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/schema/latest"
 	"github.com/GoogleContainerTools/skaffold/testutil"
 )
@@ -106,7 +107,7 @@ func TestDeploy(tOuter *testing.T) {
 				w.Write(b)
 			}))
 
-			deployer, _ := NewDeployer(&label.DefaultLabeller{}, &latest.CloudRunDeploy{DefaultProjectID: test.defaultProject, Region: test.region})
+			deployer, _ := NewDeployer(&runcontext.RunContext{}, &label.DefaultLabeller{}, &latest.CloudRunDeploy{DefaultProjectID: test.defaultProject, Region: test.region})
 			deployer.clientOptions = append(deployer.clientOptions, option.WithEndpoint(ts.URL), option.WithoutAuthentication())
 			deployer.useGcpOptions = false
 			manifest, _ := json.Marshal(test.toDeploy)
@@ -186,7 +187,7 @@ func TestCleanup(tOuter *testing.T) {
 				w.Write(b)
 			}))
 			defer ts.Close()
-			deployer, _ := NewDeployer(&label.DefaultLabeller{}, &latest.CloudRunDeploy{DefaultProjectID: test.defaultProject, Region: test.region})
+			deployer, _ := NewDeployer(&runcontext.RunContext{}, &label.DefaultLabeller{}, &latest.CloudRunDeploy{DefaultProjectID: test.defaultProject, Region: test.region})
 			deployer.clientOptions = append(deployer.clientOptions, option.WithEndpoint(ts.URL), option.WithoutAuthentication())
 			deployer.useGcpOptions = false
 			manifest, _ := json.Marshal(test.toDelete)
diff --git a/pkg/skaffold/event/event_test.go b/pkg/skaffold/event/event_test.go
index f2795d190..99072d260 100644
--- a/pkg/skaffold/event/event_test.go
+++ b/pkg/skaffold/event/event_test.go
@@ -167,7 +167,7 @@ func TestBuildInProgress(t *testing.T) {
 	}}}, "test"))
 
 	wait(t, func() bool { return handler.getState().BuildState.Artifacts["img"] == NotStarted })
-	BuildInProgress("img")
+	BuildInProgress("img", "")
 	wait(t, func() bool { return handler.getState().BuildState.Artifacts["img"] == InProgress })
 }
 
@@ -182,7 +182,7 @@ func TestBuildFailed(t *testing.T) {
 	}}}, "test"))
 
 	wait(t, func() bool { return handler.getState().BuildState.Artifacts["img"] == NotStarted })
-	BuildFailed("img", errors.New("BUG"))
+	BuildFailed("img", "", errors.New("BUG"))
 	wait(t, func() bool {
 		bState := handler.getState().BuildState
 		return bState.Artifacts["img"] == Failed
@@ -200,7 +200,7 @@ func TestBuildComplete(t *testing.T) {
 	}}}, "test"))
 
 	wait(t, func() bool { return handler.getState().BuildState.Artifacts["img"] == NotStarted })
-	BuildComplete("img")
+	BuildComplete("img", "")
 	wait(t, func() bool { return handler.getState().BuildState.Artifacts["img"] == Complete })
 }
 
@@ -237,6 +237,24 @@ func TestPortForwarded_handleNil(t *testing.T) {
 	wait(t, func() bool { return handler.getState().ForwardedPorts[8080] != nil })
 }
 
+func TestResourceCheckEvent_handleNil(t *testing.T) {
+	defer func() { handler = newHandler() }()
+
+	handler = newHandler()
+	handler.state = emptyState(mockCfg([]latest.Pipeline{{}}, "test"))
+	handler.setState(handler.getState())
+
+	if handler.getState().StatusCheckState.Resources != nil {
+		t.Error("Resources should be a nil map")
+	}
+	resourceStatusCheckEventSucceeded("pods")
+	// Resources will be reset to map[string]string{} in handleExec
+	wait(t, func() bool {
+		_, ok := handler.getState().StatusCheckState.Resources["pods"]
+		return ok
+	})
+}
+
 func TestStatusCheckEventStarted(t *testing.T) {
 	defer func() { handler = newHandler() }()
 
diff --git a/pkg/skaffold/runner/deployer_test.go b/pkg/skaffold/runner/deployer_test.go
index ce5158354..16fba7093 100644
--- a/pkg/skaffold/runner/deployer_test.go
+++ b/pkg/skaffold/runner/deployer_test.go
@@ -120,7 +120,7 @@ func TestGetDeployer(tOuter *testing.T) {
 				},
 				expected: deploy.NewDeployerMux(
 					[]deploy.Deployer{
-						t.RequireNonNilResult(cloudrun.NewDeployer(&label.DefaultLabeller{}, &latest.CloudRunDeploy{})).(deploy.Deployer)},
+						t.RequireNonNilResult(cloudrun.NewDeployer(&runcontext.RunContext{}, &label.DefaultLabeller{}, &latest.CloudRunDeploy{})).(deploy.Deployer)},
 					false),
 			},
 			{
@@ -241,7 +241,7 @@ func TestGetDeployer(tOuter *testing.T) {
 						},
 					},
 				},
-				expected: t.RequireNonNilResult(cloudrun.NewDeployer(&label.DefaultLabeller{}, &latest.CloudRunDeploy{DefaultProjectID: "TestProject", Region: "us-central1"})).(deploy.Deployer),
+				expected: t.RequireNonNilResult(cloudrun.NewDeployer(&runcontext.RunContext{}, &label.DefaultLabeller{}, &latest.CloudRunDeploy{DefaultProjectID: "TestProject", Region: "us-central1"})).(deploy.Deployer),
 			},
 			{
 				description: "apply does not allow multiple deployers when Cloud Run is used",