Repository: GoogleContainerTools/skaffold
Pull request #7569 (2022-06-17 18:35:15)

doc: remove image build from the render command decription
Fixes:
**Related**:  N/A
**Merge before/after**:  N/A

**Description**
- The public docs for the `skaffold render` command talks about *building images*
- However, the build step has been decoupled from the render command
- Thus, we must remove the information on `image builds` from the description to the `render` command



Patch:
diff --git a/cmd/skaffold/app/cmd/render.go b/cmd/skaffold/app/cmd/render.go
index 119bc293f..872f2f96c 100644
--- a/cmd/skaffold/app/cmd/render.go
+++ b/cmd/skaffold/app/cmd/render.go
@@ -38,7 +38,7 @@ var (
 // NewCmdRender describes the CLI command to build artifacts render Kubernetes manifests.
 func NewCmdRender() *cobra.Command {
 	return NewCmd("render").
-		WithDescription("Perform all image builds, and output rendered Kubernetes manifests").
+		WithDescription("Generate rendered Kubernetes manifests").
 		WithExample("Hydrate Kubernetes manifests without building the images, using digest resolved from tag in remote registry ", "render --digest-source=remote").
 		WithCommonFlags().
 		WithFlags([]*Flag{
diff --git a/docs/content/en/api/skaffold.swagger.json b/docs/content/en/api/skaffold.swagger.json
index 1baf7a217..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"
           },
@@ -766,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"
           },
@@ -963,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"
           },
@@ -1260,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"
           },
@@ -1457,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"
           },
@@ -1684,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"
           },
@@ -1881,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"
           },
@@ -2109,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"
           },
@@ -2306,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"
           },
@@ -2564,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"
           },
@@ -2773,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"
           },
@@ -2982,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"
           },
@@ -3395,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"
diff --git a/docs/content/en/docs/references/api/grpc.md b/docs/content/en/docs/references/api/grpc.md
index eecb61e00..3196f84da 100644
--- a/docs/content/en/docs/references/api/grpc.md
+++ b/docs/content/en/docs/references/api/grpc.md
@@ -1084,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/docs/content/en/docs/references/cli/_index.md b/docs/content/en/docs/references/cli/_index.md
index a3221cd6c..383e97d2d 100644
--- a/docs/content/en/docs/references/cli/_index.md
+++ b/docs/content/en/docs/references/cli/_index.md
@@ -77,7 +77,7 @@ Pipeline Building Blocks:
   test              Run tests against your built application images
   deploy            Deploy pre-built artifacts
   delete            Delete any resources deployed by Skaffold
-  render            Perform all image builds, and output rendered Kubernetes manifests
+  render            Generate rendered Kubernetes manifests
   apply             Apply hydrated manifests to a cluster
   verify            Run verification tests against skaffold deployments
 
@@ -935,7 +935,7 @@ The following options can be passed to any command:
 
 ### skaffold render
 
-Perform all image builds, and output rendered Kubernetes manifests
+Generate rendered Kubernetes manifests
 
 ```
 
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/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 9a60b3cd0..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
diff --git a/proto/v2/skaffold.pb.go b/proto/v2/skaffold.pb.go
index a0b0208b5..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


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/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",