// Copyright 2026 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

import type {protobuf as $protobuf} from "google-gax";
import Long = require("long");
/** Namespace google. */
export namespace google {

    /** Namespace storage. */
    namespace storage {

        /** Namespace control. */
        namespace control {

            /** Namespace v2. */
            namespace v2 {

                /** Represents a StorageControl */
                class StorageControl extends $protobuf.rpc.Service {

                    /**
                     * Constructs a new StorageControl service.
                     * @param rpcImpl RPC implementation
                     * @param [requestDelimited=false] Whether requests are length-delimited
                     * @param [responseDelimited=false] Whether responses are length-delimited
                     */
                    constructor(rpcImpl: $protobuf.RPCImpl, requestDelimited?: boolean, responseDelimited?: boolean);

                    /**
                     * Creates new StorageControl service using the specified rpc implementation.
                     * @param rpcImpl RPC implementation
                     * @param [requestDelimited=false] Whether requests are length-delimited
                     * @param [responseDelimited=false] Whether responses are length-delimited
                     * @returns RPC service. Useful where requests and/or responses are streamed.
                     */
                    public static create(rpcImpl: $protobuf.RPCImpl, requestDelimited?: boolean, responseDelimited?: boolean): StorageControl;

                    /**
                     * Calls CreateFolder.
                     * @param request CreateFolderRequest message or plain object
                     * @param callback Node-style callback called with the error, if any, and Folder
                     */
                    public createFolder(request: google.storage.control.v2.ICreateFolderRequest, callback: google.storage.control.v2.StorageControl.CreateFolderCallback): void;

                    /**
                     * Calls CreateFolder.
                     * @param request CreateFolderRequest message or plain object
                     * @returns Promise
                     */
                    public createFolder(request: google.storage.control.v2.ICreateFolderRequest): Promise<google.storage.control.v2.Folder>;

                    /**
                     * Calls DeleteFolder.
                     * @param request DeleteFolderRequest message or plain object
                     * @param callback Node-style callback called with the error, if any, and Empty
                     */
                    public deleteFolder(request: google.storage.control.v2.IDeleteFolderRequest, callback: google.storage.control.v2.StorageControl.DeleteFolderCallback): void;

                    /**
                     * Calls DeleteFolder.
                     * @param request DeleteFolderRequest message or plain object
                     * @returns Promise
                     */
                    public deleteFolder(request: google.storage.control.v2.IDeleteFolderRequest): Promise<google.protobuf.Empty>;

                    /**
                     * Calls GetFolder.
                     * @param request GetFolderRequest message or plain object
                     * @param callback Node-style callback called with the error, if any, and Folder
                     */
                    public getFolder(request: google.storage.control.v2.IGetFolderRequest, callback: google.storage.control.v2.StorageControl.GetFolderCallback): void;

                    /**
                     * Calls GetFolder.
                     * @param request GetFolderRequest message or plain object
                     * @returns Promise
                     */
                    public getFolder(request: google.storage.control.v2.IGetFolderRequest): Promise<google.storage.control.v2.Folder>;

                    /**
                     * Calls ListFolders.
                     * @param request ListFoldersRequest message or plain object
                     * @param callback Node-style callback called with the error, if any, and ListFoldersResponse
                     */
                    public listFolders(request: google.storage.control.v2.IListFoldersRequest, callback: google.storage.control.v2.StorageControl.ListFoldersCallback): void;

                    /**
                     * Calls ListFolders.
                     * @param request ListFoldersRequest message or plain object
                     * @returns Promise
                     */
                    public listFolders(request: google.storage.control.v2.IListFoldersRequest): Promise<google.storage.control.v2.ListFoldersResponse>;

                    /**
                     * Calls RenameFolder.
                     * @param request RenameFolderRequest message or plain object
                     * @param callback Node-style callback called with the error, if any, and Operation
                     */
                    public renameFolder(request: google.storage.control.v2.IRenameFolderRequest, callback: google.storage.control.v2.StorageControl.RenameFolderCallback): void;

                    /**
                     * Calls RenameFolder.
                     * @param request RenameFolderRequest message or plain object
                     * @returns Promise
                     */
                    public renameFolder(request: google.storage.control.v2.IRenameFolderRequest): Promise<google.longrunning.Operation>;

                    /**
                     * Calls DeleteFolderRecursive.
                     * @param request DeleteFolderRecursiveRequest message or plain object
                     * @param callback Node-style callback called with the error, if any, and Operation
                     */
                    public deleteFolderRecursive(request: google.storage.control.v2.IDeleteFolderRecursiveRequest, callback: google.storage.control.v2.StorageControl.DeleteFolderRecursiveCallback): void;

                    /**
                     * Calls DeleteFolderRecursive.
                     * @param request DeleteFolderRecursiveRequest message or plain object
                     * @returns Promise
                     */
                    public deleteFolderRecursive(request: google.storage.control.v2.IDeleteFolderRecursiveRequest): Promise<google.longrunning.Operation>;

                    /**
                     * Calls GetStorageLayout.
                     * @param request GetStorageLayoutRequest message or plain object
                     * @param callback Node-style callback called with the error, if any, and StorageLayout
                     */
                    public getStorageLayout(request: google.storage.control.v2.IGetStorageLayoutRequest, callback: google.storage.control.v2.StorageControl.GetStorageLayoutCallback): void;

                    /**
                     * Calls GetStorageLayout.
                     * @param request GetStorageLayoutRequest message or plain object
                     * @returns Promise
                     */
                    public getStorageLayout(request: google.storage.control.v2.IGetStorageLayoutRequest): Promise<google.storage.control.v2.StorageLayout>;

                    /**
                     * Calls CreateManagedFolder.
                     * @param request CreateManagedFolderRequest message or plain object
                     * @param callback Node-style callback called with the error, if any, and ManagedFolder
                     */
                    public createManagedFolder(request: google.storage.control.v2.ICreateManagedFolderRequest, callback: google.storage.control.v2.StorageControl.CreateManagedFolderCallback): void;

                    /**
                     * Calls CreateManagedFolder.
                     * @param request CreateManagedFolderRequest message or plain object
                     * @returns Promise
                     */
                    public createManagedFolder(request: google.storage.control.v2.ICreateManagedFolderRequest): Promise<google.storage.control.v2.ManagedFolder>;

                    /**
                     * Calls DeleteManagedFolder.
                     * @param request DeleteManagedFolderRequest message or plain object
                     * @param callback Node-style callback called with the error, if any, and Empty
                     */
                    public deleteManagedFolder(request: google.storage.control.v2.IDeleteManagedFolderRequest, callback: google.storage.control.v2.StorageControl.DeleteManagedFolderCallback): void;

                    /**
                     * Calls DeleteManagedFolder.
                     * @param request DeleteManagedFolderRequest message or plain object
                     * @returns Promise
                     */
                    public deleteManagedFolder(request: google.storage.control.v2.IDeleteManagedFolderRequest): Promise<google.protobuf.Empty>;

                    /**
                     * Calls GetManagedFolder.
                     * @param request GetManagedFolderRequest message or plain object
                     * @param callback Node-style callback called with the error, if any, and ManagedFolder
                     */
                    public getManagedFolder(request: google.storage.control.v2.IGetManagedFolderRequest, callback: google.storage.control.v2.StorageControl.GetManagedFolderCallback): void;

                    /**
                     * Calls GetManagedFolder.
                     * @param request GetManagedFolderRequest message or plain object
                     * @returns Promise
                     */
                    public getManagedFolder(request: google.storage.control.v2.IGetManagedFolderRequest): Promise<google.storage.control.v2.ManagedFolder>;

                    /**
                     * Calls ListManagedFolders.
                     * @param request ListManagedFoldersRequest message or plain object
                     * @param callback Node-style callback called with the error, if any, and ListManagedFoldersResponse
                     */
                    public listManagedFolders(request: google.storage.control.v2.IListManagedFoldersRequest, callback: google.storage.control.v2.StorageControl.ListManagedFoldersCallback): void;

                    /**
                     * Calls ListManagedFolders.
                     * @param request ListManagedFoldersRequest message or plain object
                     * @returns Promise
                     */
                    public listManagedFolders(request: google.storage.control.v2.IListManagedFoldersRequest): Promise<google.storage.control.v2.ListManagedFoldersResponse>;

                    /**
                     * Calls CreateAnywhereCache.
                     * @param request CreateAnywhereCacheRequest message or plain object
                     * @param callback Node-style callback called with the error, if any, and Operation
                     */
                    public createAnywhereCache(request: google.storage.control.v2.ICreateAnywhereCacheRequest, callback: google.storage.control.v2.StorageControl.CreateAnywhereCacheCallback): void;

                    /**
                     * Calls CreateAnywhereCache.
                     * @param request CreateAnywhereCacheRequest message or plain object
                     * @returns Promise
                     */
                    public createAnywhereCache(request: google.storage.control.v2.ICreateAnywhereCacheRequest): Promise<google.longrunning.Operation>;

                    /**
                     * Calls UpdateAnywhereCache.
                     * @param request UpdateAnywhereCacheRequest message or plain object
                     * @param callback Node-style callback called with the error, if any, and Operation
                     */
                    public updateAnywhereCache(request: google.storage.control.v2.IUpdateAnywhereCacheRequest, callback: google.storage.control.v2.StorageControl.UpdateAnywhereCacheCallback): void;

                    /**
                     * Calls UpdateAnywhereCache.
                     * @param request UpdateAnywhereCacheRequest message or plain object
                     * @returns Promise
                     */
                    public updateAnywhereCache(request: google.storage.control.v2.IUpdateAnywhereCacheRequest): Promise<google.longrunning.Operation>;

                    /**
                     * Calls DisableAnywhereCache.
                     * @param request DisableAnywhereCacheRequest message or plain object
                     * @param callback Node-style callback called with the error, if any, and AnywhereCache
                     */
                    public disableAnywhereCache(request: google.storage.control.v2.IDisableAnywhereCacheRequest, callback: google.storage.control.v2.StorageControl.DisableAnywhereCacheCallback): void;

                    /**
                     * Calls DisableAnywhereCache.
                     * @param request DisableAnywhereCacheRequest message or plain object
                     * @returns Promise
                     */
                    public disableAnywhereCache(request: google.storage.control.v2.IDisableAnywhereCacheRequest): Promise<google.storage.control.v2.AnywhereCache>;

                    /**
                     * Calls PauseAnywhereCache.
                     * @param request PauseAnywhereCacheRequest message or plain object
                     * @param callback Node-style callback called with the error, if any, and AnywhereCache
                     */
                    public pauseAnywhereCache(request: google.storage.control.v2.IPauseAnywhereCacheRequest, callback: google.storage.control.v2.StorageControl.PauseAnywhereCacheCallback): void;

                    /**
                     * Calls PauseAnywhereCache.
                     * @param request PauseAnywhereCacheRequest message or plain object
                     * @returns Promise
                     */
                    public pauseAnywhereCache(request: google.storage.control.v2.IPauseAnywhereCacheRequest): Promise<google.storage.control.v2.AnywhereCache>;

                    /**
                     * Calls ResumeAnywhereCache.
                     * @param request ResumeAnywhereCacheRequest message or plain object
                     * @param callback Node-style callback called with the error, if any, and AnywhereCache
                     */
                    public resumeAnywhereCache(request: google.storage.control.v2.IResumeAnywhereCacheRequest, callback: google.storage.control.v2.StorageControl.ResumeAnywhereCacheCallback): void;

                    /**
                     * Calls ResumeAnywhereCache.
                     * @param request ResumeAnywhereCacheRequest message or plain object
                     * @returns Promise
                     */
                    public resumeAnywhereCache(request: google.storage.control.v2.IResumeAnywhereCacheRequest): Promise<google.storage.control.v2.AnywhereCache>;

                    /**
                     * Calls GetAnywhereCache.
                     * @param request GetAnywhereCacheRequest message or plain object
                     * @param callback Node-style callback called with the error, if any, and AnywhereCache
                     */
                    public getAnywhereCache(request: google.storage.control.v2.IGetAnywhereCacheRequest, callback: google.storage.control.v2.StorageControl.GetAnywhereCacheCallback): void;

                    /**
                     * Calls GetAnywhereCache.
                     * @param request GetAnywhereCacheRequest message or plain object
                     * @returns Promise
                     */
                    public getAnywhereCache(request: google.storage.control.v2.IGetAnywhereCacheRequest): Promise<google.storage.control.v2.AnywhereCache>;

                    /**
                     * Calls ListAnywhereCaches.
                     * @param request ListAnywhereCachesRequest message or plain object
                     * @param callback Node-style callback called with the error, if any, and ListAnywhereCachesResponse
                     */
                    public listAnywhereCaches(request: google.storage.control.v2.IListAnywhereCachesRequest, callback: google.storage.control.v2.StorageControl.ListAnywhereCachesCallback): void;

                    /**
                     * Calls ListAnywhereCaches.
                     * @param request ListAnywhereCachesRequest message or plain object
                     * @returns Promise
                     */
                    public listAnywhereCaches(request: google.storage.control.v2.IListAnywhereCachesRequest): Promise<google.storage.control.v2.ListAnywhereCachesResponse>;

                    /**
                     * Calls GetProjectIntelligenceConfig.
                     * @param request GetProjectIntelligenceConfigRequest message or plain object
                     * @param callback Node-style callback called with the error, if any, and IntelligenceConfig
                     */
                    public getProjectIntelligenceConfig(request: google.storage.control.v2.IGetProjectIntelligenceConfigRequest, callback: google.storage.control.v2.StorageControl.GetProjectIntelligenceConfigCallback): void;

                    /**
                     * Calls GetProjectIntelligenceConfig.
                     * @param request GetProjectIntelligenceConfigRequest message or plain object
                     * @returns Promise
                     */
                    public getProjectIntelligenceConfig(request: google.storage.control.v2.IGetProjectIntelligenceConfigRequest): Promise<google.storage.control.v2.IntelligenceConfig>;

                    /**
                     * Calls UpdateProjectIntelligenceConfig.
                     * @param request UpdateProjectIntelligenceConfigRequest message or plain object
                     * @param callback Node-style callback called with the error, if any, and IntelligenceConfig
                     */
                    public updateProjectIntelligenceConfig(request: google.storage.control.v2.IUpdateProjectIntelligenceConfigRequest, callback: google.storage.control.v2.StorageControl.UpdateProjectIntelligenceConfigCallback): void;

                    /**
                     * Calls UpdateProjectIntelligenceConfig.
                     * @param request UpdateProjectIntelligenceConfigRequest message or plain object
                     * @returns Promise
                     */
                    public updateProjectIntelligenceConfig(request: google.storage.control.v2.IUpdateProjectIntelligenceConfigRequest): Promise<google.storage.control.v2.IntelligenceConfig>;

                    /**
                     * Calls GetFolderIntelligenceConfig.
                     * @param request GetFolderIntelligenceConfigRequest message or plain object
                     * @param callback Node-style callback called with the error, if any, and IntelligenceConfig
                     */
                    public getFolderIntelligenceConfig(request: google.storage.control.v2.IGetFolderIntelligenceConfigRequest, callback: google.storage.control.v2.StorageControl.GetFolderIntelligenceConfigCallback): void;

                    /**
                     * Calls GetFolderIntelligenceConfig.
                     * @param request GetFolderIntelligenceConfigRequest message or plain object
                     * @returns Promise
                     */
                    public getFolderIntelligenceConfig(request: google.storage.control.v2.IGetFolderIntelligenceConfigRequest): Promise<google.storage.control.v2.IntelligenceConfig>;

                    /**
                     * Calls UpdateFolderIntelligenceConfig.
                     * @param request UpdateFolderIntelligenceConfigRequest message or plain object
                     * @param callback Node-style callback called with the error, if any, and IntelligenceConfig
                     */
                    public updateFolderIntelligenceConfig(request: google.storage.control.v2.IUpdateFolderIntelligenceConfigRequest, callback: google.storage.control.v2.StorageControl.UpdateFolderIntelligenceConfigCallback): void;

                    /**
                     * Calls UpdateFolderIntelligenceConfig.
                     * @param request UpdateFolderIntelligenceConfigRequest message or plain object
                     * @returns Promise
                     */
                    public updateFolderIntelligenceConfig(request: google.storage.control.v2.IUpdateFolderIntelligenceConfigRequest): Promise<google.storage.control.v2.IntelligenceConfig>;

                    /**
                     * Calls GetOrganizationIntelligenceConfig.
                     * @param request GetOrganizationIntelligenceConfigRequest message or plain object
                     * @param callback Node-style callback called with the error, if any, and IntelligenceConfig
                     */
                    public getOrganizationIntelligenceConfig(request: google.storage.control.v2.IGetOrganizationIntelligenceConfigRequest, callback: google.storage.control.v2.StorageControl.GetOrganizationIntelligenceConfigCallback): void;

                    /**
                     * Calls GetOrganizationIntelligenceConfig.
                     * @param request GetOrganizationIntelligenceConfigRequest message or plain object
                     * @returns Promise
                     */
                    public getOrganizationIntelligenceConfig(request: google.storage.control.v2.IGetOrganizationIntelligenceConfigRequest): Promise<google.storage.control.v2.IntelligenceConfig>;

                    /**
                     * Calls UpdateOrganizationIntelligenceConfig.
                     * @param request UpdateOrganizationIntelligenceConfigRequest message or plain object
                     * @param callback Node-style callback called with the error, if any, and IntelligenceConfig
                     */
                    public updateOrganizationIntelligenceConfig(request: google.storage.control.v2.IUpdateOrganizationIntelligenceConfigRequest, callback: google.storage.control.v2.StorageControl.UpdateOrganizationIntelligenceConfigCallback): void;

                    /**
                     * Calls UpdateOrganizationIntelligenceConfig.
                     * @param request UpdateOrganizationIntelligenceConfigRequest message or plain object
                     * @returns Promise
                     */
                    public updateOrganizationIntelligenceConfig(request: google.storage.control.v2.IUpdateOrganizationIntelligenceConfigRequest): Promise<google.storage.control.v2.IntelligenceConfig>;

                    /**
                     * Calls GetIamPolicy.
                     * @param request GetIamPolicyRequest message or plain object
                     * @param callback Node-style callback called with the error, if any, and Policy
                     */
                    public getIamPolicy(request: google.iam.v1.IGetIamPolicyRequest, callback: google.storage.control.v2.StorageControl.GetIamPolicyCallback): void;

                    /**
                     * Calls GetIamPolicy.
                     * @param request GetIamPolicyRequest message or plain object
                     * @returns Promise
                     */
                    public getIamPolicy(request: google.iam.v1.IGetIamPolicyRequest): Promise<google.iam.v1.Policy>;

                    /**
                     * Calls SetIamPolicy.
                     * @param request SetIamPolicyRequest message or plain object
                     * @param callback Node-style callback called with the error, if any, and Policy
                     */
                    public setIamPolicy(request: google.iam.v1.ISetIamPolicyRequest, callback: google.storage.control.v2.StorageControl.SetIamPolicyCallback): void;

                    /**
                     * Calls SetIamPolicy.
                     * @param request SetIamPolicyRequest message or plain object
                     * @returns Promise
                     */
                    public setIamPolicy(request: google.iam.v1.ISetIamPolicyRequest): Promise<google.iam.v1.Policy>;

                    /**
                     * Calls TestIamPermissions.
                     * @param request TestIamPermissionsRequest message or plain object
                     * @param callback Node-style callback called with the error, if any, and TestIamPermissionsResponse
                     */
                    public testIamPermissions(request: google.iam.v1.ITestIamPermissionsRequest, callback: google.storage.control.v2.StorageControl.TestIamPermissionsCallback): void;

                    /**
                     * Calls TestIamPermissions.
                     * @param request TestIamPermissionsRequest message or plain object
                     * @returns Promise
                     */
                    public testIamPermissions(request: google.iam.v1.ITestIamPermissionsRequest): Promise<google.iam.v1.TestIamPermissionsResponse>;
                }

                namespace StorageControl {

                    /**
                     * Callback as used by {@link google.storage.control.v2.StorageControl|createFolder}.
                     * @param error Error, if any
                     * @param [response] Folder
                     */
                    type CreateFolderCallback = (error: (Error|null), response?: google.storage.control.v2.Folder) => void;

                    /**
                     * Callback as used by {@link google.storage.control.v2.StorageControl|deleteFolder}.
                     * @param error Error, if any
                     * @param [response] Empty
                     */
                    type DeleteFolderCallback = (error: (Error|null), response?: google.protobuf.Empty) => void;

                    /**
                     * Callback as used by {@link google.storage.control.v2.StorageControl|getFolder}.
                     * @param error Error, if any
                     * @param [response] Folder
                     */
                    type GetFolderCallback = (error: (Error|null), response?: google.storage.control.v2.Folder) => void;

                    /**
                     * Callback as used by {@link google.storage.control.v2.StorageControl|listFolders}.
                     * @param error Error, if any
                     * @param [response] ListFoldersResponse
                     */
                    type ListFoldersCallback = (error: (Error|null), response?: google.storage.control.v2.ListFoldersResponse) => void;

                    /**
                     * Callback as used by {@link google.storage.control.v2.StorageControl|renameFolder}.
                     * @param error Error, if any
                     * @param [response] Operation
                     */
                    type RenameFolderCallback = (error: (Error|null), response?: google.longrunning.Operation) => void;

                    /**
                     * Callback as used by {@link google.storage.control.v2.StorageControl|deleteFolderRecursive}.
                     * @param error Error, if any
                     * @param [response] Operation
                     */
                    type DeleteFolderRecursiveCallback = (error: (Error|null), response?: google.longrunning.Operation) => void;

                    /**
                     * Callback as used by {@link google.storage.control.v2.StorageControl|getStorageLayout}.
                     * @param error Error, if any
                     * @param [response] StorageLayout
                     */
                    type GetStorageLayoutCallback = (error: (Error|null), response?: google.storage.control.v2.StorageLayout) => void;

                    /**
                     * Callback as used by {@link google.storage.control.v2.StorageControl|createManagedFolder}.
                     * @param error Error, if any
                     * @param [response] ManagedFolder
                     */
                    type CreateManagedFolderCallback = (error: (Error|null), response?: google.storage.control.v2.ManagedFolder) => void;

                    /**
                     * Callback as used by {@link google.storage.control.v2.StorageControl|deleteManagedFolder}.
                     * @param error Error, if any
                     * @param [response] Empty
                     */
                    type DeleteManagedFolderCallback = (error: (Error|null), response?: google.protobuf.Empty) => void;

                    /**
                     * Callback as used by {@link google.storage.control.v2.StorageControl|getManagedFolder}.
                     * @param error Error, if any
                     * @param [response] ManagedFolder
                     */
                    type GetManagedFolderCallback = (error: (Error|null), response?: google.storage.control.v2.ManagedFolder) => void;

                    /**
                     * Callback as used by {@link google.storage.control.v2.StorageControl|listManagedFolders}.
                     * @param error Error, if any
                     * @param [response] ListManagedFoldersResponse
                     */
                    type ListManagedFoldersCallback = (error: (Error|null), response?: google.storage.control.v2.ListManagedFoldersResponse) => void;

                    /**
                     * Callback as used by {@link google.storage.control.v2.StorageControl|createAnywhereCache}.
                     * @param error Error, if any
                     * @param [response] Operation
                     */
                    type CreateAnywhereCacheCallback = (error: (Error|null), response?: google.longrunning.Operation) => void;

                    /**
                     * Callback as used by {@link google.storage.control.v2.StorageControl|updateAnywhereCache}.
                     * @param error Error, if any
                     * @param [response] Operation
                     */
                    type UpdateAnywhereCacheCallback = (error: (Error|null), response?: google.longrunning.Operation) => void;

                    /**
                     * Callback as used by {@link google.storage.control.v2.StorageControl|disableAnywhereCache}.
                     * @param error Error, if any
                     * @param [response] AnywhereCache
                     */
                    type DisableAnywhereCacheCallback = (error: (Error|null), response?: google.storage.control.v2.AnywhereCache) => void;

                    /**
                     * Callback as used by {@link google.storage.control.v2.StorageControl|pauseAnywhereCache}.
                     * @param error Error, if any
                     * @param [response] AnywhereCache
                     */
                    type PauseAnywhereCacheCallback = (error: (Error|null), response?: google.storage.control.v2.AnywhereCache) => void;

                    /**
                     * Callback as used by {@link google.storage.control.v2.StorageControl|resumeAnywhereCache}.
                     * @param error Error, if any
                     * @param [response] AnywhereCache
                     */
                    type ResumeAnywhereCacheCallback = (error: (Error|null), response?: google.storage.control.v2.AnywhereCache) => void;

                    /**
                     * Callback as used by {@link google.storage.control.v2.StorageControl|getAnywhereCache}.
                     * @param error Error, if any
                     * @param [response] AnywhereCache
                     */
                    type GetAnywhereCacheCallback = (error: (Error|null), response?: google.storage.control.v2.AnywhereCache) => void;

                    /**
                     * Callback as used by {@link google.storage.control.v2.StorageControl|listAnywhereCaches}.
                     * @param error Error, if any
                     * @param [response] ListAnywhereCachesResponse
                     */
                    type ListAnywhereCachesCallback = (error: (Error|null), response?: google.storage.control.v2.ListAnywhereCachesResponse) => void;

                    /**
                     * Callback as used by {@link google.storage.control.v2.StorageControl|getProjectIntelligenceConfig}.
                     * @param error Error, if any
                     * @param [response] IntelligenceConfig
                     */
                    type GetProjectIntelligenceConfigCallback = (error: (Error|null), response?: google.storage.control.v2.IntelligenceConfig) => void;

                    /**
                     * Callback as used by {@link google.storage.control.v2.StorageControl|updateProjectIntelligenceConfig}.
                     * @param error Error, if any
                     * @param [response] IntelligenceConfig
                     */
                    type UpdateProjectIntelligenceConfigCallback = (error: (Error|null), response?: google.storage.control.v2.IntelligenceConfig) => void;

                    /**
                     * Callback as used by {@link google.storage.control.v2.StorageControl|getFolderIntelligenceConfig}.
                     * @param error Error, if any
                     * @param [response] IntelligenceConfig
                     */
                    type GetFolderIntelligenceConfigCallback = (error: (Error|null), response?: google.storage.control.v2.IntelligenceConfig) => void;

                    /**
                     * Callback as used by {@link google.storage.control.v2.StorageControl|updateFolderIntelligenceConfig}.
                     * @param error Error, if any
                     * @param [response] IntelligenceConfig
                     */
                    type UpdateFolderIntelligenceConfigCallback = (error: (Error|null), response?: google.storage.control.v2.IntelligenceConfig) => void;

                    /**
                     * Callback as used by {@link google.storage.control.v2.StorageControl|getOrganizationIntelligenceConfig}.
                     * @param error Error, if any
                     * @param [response] IntelligenceConfig
                     */
                    type GetOrganizationIntelligenceConfigCallback = (error: (Error|null), response?: google.storage.control.v2.IntelligenceConfig) => void;

                    /**
                     * Callback as used by {@link google.storage.control.v2.StorageControl|updateOrganizationIntelligenceConfig}.
                     * @param error Error, if any
                     * @param [response] IntelligenceConfig
                     */
                    type UpdateOrganizationIntelligenceConfigCallback = (error: (Error|null), response?: google.storage.control.v2.IntelligenceConfig) => void;

                    /**
                     * Callback as used by {@link google.storage.control.v2.StorageControl|getIamPolicy}.
                     * @param error Error, if any
                     * @param [response] Policy
                     */
                    type GetIamPolicyCallback = (error: (Error|null), response?: google.iam.v1.Policy) => void;

                    /**
                     * Callback as used by {@link google.storage.control.v2.StorageControl|setIamPolicy}.
                     * @param error Error, if any
                     * @param [response] Policy
                     */
                    type SetIamPolicyCallback = (error: (Error|null), response?: google.iam.v1.Policy) => void;

                    /**
                     * Callback as used by {@link google.storage.control.v2.StorageControl|testIamPermissions}.
                     * @param error Error, if any
                     * @param [response] TestIamPermissionsResponse
                     */
                    type TestIamPermissionsCallback = (error: (Error|null), response?: google.iam.v1.TestIamPermissionsResponse) => void;
                }

                /** Properties of a PendingRenameInfo. */
                interface IPendingRenameInfo {

                    /** PendingRenameInfo operation */
                    operation?: (string|null);
                }

                /** Represents a PendingRenameInfo. */
                class PendingRenameInfo implements IPendingRenameInfo {

                    /**
                     * Constructs a new PendingRenameInfo.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: google.storage.control.v2.IPendingRenameInfo);

                    /** PendingRenameInfo operation. */
                    public operation: string;

                    /**
                     * Creates a new PendingRenameInfo instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns PendingRenameInfo instance
                     */
                    public static create(properties?: google.storage.control.v2.IPendingRenameInfo): google.storage.control.v2.PendingRenameInfo;

                    /**
                     * Encodes the specified PendingRenameInfo message. Does not implicitly {@link google.storage.control.v2.PendingRenameInfo.verify|verify} messages.
                     * @param message PendingRenameInfo message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: google.storage.control.v2.IPendingRenameInfo, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified PendingRenameInfo message, length delimited. Does not implicitly {@link google.storage.control.v2.PendingRenameInfo.verify|verify} messages.
                     * @param message PendingRenameInfo message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: google.storage.control.v2.IPendingRenameInfo, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes a PendingRenameInfo message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns PendingRenameInfo
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.control.v2.PendingRenameInfo;

                    /**
                     * Decodes a PendingRenameInfo message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns PendingRenameInfo
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.control.v2.PendingRenameInfo;

                    /**
                     * Verifies a PendingRenameInfo message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates a PendingRenameInfo message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns PendingRenameInfo
                     */
                    public static fromObject(object: { [k: string]: any }): google.storage.control.v2.PendingRenameInfo;

                    /**
                     * Creates a plain object from a PendingRenameInfo message. Also converts values to other types if specified.
                     * @param message PendingRenameInfo
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: google.storage.control.v2.PendingRenameInfo, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this PendingRenameInfo to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for PendingRenameInfo
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }

                /** Properties of a Folder. */
                interface IFolder {

                    /** Folder name */
                    name?: (string|null);

                    /** Folder metageneration */
                    metageneration?: (number|Long|string|null);

                    /** Folder createTime */
                    createTime?: (google.protobuf.ITimestamp|null);

                    /** Folder updateTime */
                    updateTime?: (google.protobuf.ITimestamp|null);

                    /** Folder pendingRenameInfo */
                    pendingRenameInfo?: (google.storage.control.v2.IPendingRenameInfo|null);
                }

                /** Represents a Folder. */
                class Folder implements IFolder {

                    /**
                     * Constructs a new Folder.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: google.storage.control.v2.IFolder);

                    /** Folder name. */
                    public name: string;

                    /** Folder metageneration. */
                    public metageneration: (number|Long|string);

                    /** Folder createTime. */
                    public createTime?: (google.protobuf.ITimestamp|null);

                    /** Folder updateTime. */
                    public updateTime?: (google.protobuf.ITimestamp|null);

                    /** Folder pendingRenameInfo. */
                    public pendingRenameInfo?: (google.storage.control.v2.IPendingRenameInfo|null);

                    /**
                     * Creates a new Folder instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns Folder instance
                     */
                    public static create(properties?: google.storage.control.v2.IFolder): google.storage.control.v2.Folder;

                    /**
                     * Encodes the specified Folder message. Does not implicitly {@link google.storage.control.v2.Folder.verify|verify} messages.
                     * @param message Folder message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: google.storage.control.v2.IFolder, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified Folder message, length delimited. Does not implicitly {@link google.storage.control.v2.Folder.verify|verify} messages.
                     * @param message Folder message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: google.storage.control.v2.IFolder, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes a Folder message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns Folder
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.control.v2.Folder;

                    /**
                     * Decodes a Folder message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns Folder
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.control.v2.Folder;

                    /**
                     * Verifies a Folder message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates a Folder message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns Folder
                     */
                    public static fromObject(object: { [k: string]: any }): google.storage.control.v2.Folder;

                    /**
                     * Creates a plain object from a Folder message. Also converts values to other types if specified.
                     * @param message Folder
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: google.storage.control.v2.Folder, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this Folder to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for Folder
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }

                /** Properties of a GetFolderRequest. */
                interface IGetFolderRequest {

                    /** GetFolderRequest name */
                    name?: (string|null);

                    /** GetFolderRequest ifMetagenerationMatch */
                    ifMetagenerationMatch?: (number|Long|string|null);

                    /** GetFolderRequest ifMetagenerationNotMatch */
                    ifMetagenerationNotMatch?: (number|Long|string|null);

                    /** GetFolderRequest requestId */
                    requestId?: (string|null);
                }

                /** Represents a GetFolderRequest. */
                class GetFolderRequest implements IGetFolderRequest {

                    /**
                     * Constructs a new GetFolderRequest.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: google.storage.control.v2.IGetFolderRequest);

                    /** GetFolderRequest name. */
                    public name: string;

                    /** GetFolderRequest ifMetagenerationMatch. */
                    public ifMetagenerationMatch?: (number|Long|string|null);

                    /** GetFolderRequest ifMetagenerationNotMatch. */
                    public ifMetagenerationNotMatch?: (number|Long|string|null);

                    /** GetFolderRequest requestId. */
                    public requestId: string;

                    /**
                     * Creates a new GetFolderRequest instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns GetFolderRequest instance
                     */
                    public static create(properties?: google.storage.control.v2.IGetFolderRequest): google.storage.control.v2.GetFolderRequest;

                    /**
                     * Encodes the specified GetFolderRequest message. Does not implicitly {@link google.storage.control.v2.GetFolderRequest.verify|verify} messages.
                     * @param message GetFolderRequest message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: google.storage.control.v2.IGetFolderRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified GetFolderRequest message, length delimited. Does not implicitly {@link google.storage.control.v2.GetFolderRequest.verify|verify} messages.
                     * @param message GetFolderRequest message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: google.storage.control.v2.IGetFolderRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes a GetFolderRequest message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns GetFolderRequest
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.control.v2.GetFolderRequest;

                    /**
                     * Decodes a GetFolderRequest message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns GetFolderRequest
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.control.v2.GetFolderRequest;

                    /**
                     * Verifies a GetFolderRequest message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates a GetFolderRequest message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns GetFolderRequest
                     */
                    public static fromObject(object: { [k: string]: any }): google.storage.control.v2.GetFolderRequest;

                    /**
                     * Creates a plain object from a GetFolderRequest message. Also converts values to other types if specified.
                     * @param message GetFolderRequest
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: google.storage.control.v2.GetFolderRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this GetFolderRequest to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for GetFolderRequest
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }

                /** Properties of a CreateFolderRequest. */
                interface ICreateFolderRequest {

                    /** CreateFolderRequest parent */
                    parent?: (string|null);

                    /** CreateFolderRequest folder */
                    folder?: (google.storage.control.v2.IFolder|null);

                    /** CreateFolderRequest folderId */
                    folderId?: (string|null);

                    /** CreateFolderRequest recursive */
                    recursive?: (boolean|null);

                    /** CreateFolderRequest requestId */
                    requestId?: (string|null);
                }

                /** Represents a CreateFolderRequest. */
                class CreateFolderRequest implements ICreateFolderRequest {

                    /**
                     * Constructs a new CreateFolderRequest.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: google.storage.control.v2.ICreateFolderRequest);

                    /** CreateFolderRequest parent. */
                    public parent: string;

                    /** CreateFolderRequest folder. */
                    public folder?: (google.storage.control.v2.IFolder|null);

                    /** CreateFolderRequest folderId. */
                    public folderId: string;

                    /** CreateFolderRequest recursive. */
                    public recursive: boolean;

                    /** CreateFolderRequest requestId. */
                    public requestId: string;

                    /**
                     * Creates a new CreateFolderRequest instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns CreateFolderRequest instance
                     */
                    public static create(properties?: google.storage.control.v2.ICreateFolderRequest): google.storage.control.v2.CreateFolderRequest;

                    /**
                     * Encodes the specified CreateFolderRequest message. Does not implicitly {@link google.storage.control.v2.CreateFolderRequest.verify|verify} messages.
                     * @param message CreateFolderRequest message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: google.storage.control.v2.ICreateFolderRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified CreateFolderRequest message, length delimited. Does not implicitly {@link google.storage.control.v2.CreateFolderRequest.verify|verify} messages.
                     * @param message CreateFolderRequest message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: google.storage.control.v2.ICreateFolderRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes a CreateFolderRequest message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns CreateFolderRequest
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.control.v2.CreateFolderRequest;

                    /**
                     * Decodes a CreateFolderRequest message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns CreateFolderRequest
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.control.v2.CreateFolderRequest;

                    /**
                     * Verifies a CreateFolderRequest message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates a CreateFolderRequest message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns CreateFolderRequest
                     */
                    public static fromObject(object: { [k: string]: any }): google.storage.control.v2.CreateFolderRequest;

                    /**
                     * Creates a plain object from a CreateFolderRequest message. Also converts values to other types if specified.
                     * @param message CreateFolderRequest
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: google.storage.control.v2.CreateFolderRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this CreateFolderRequest to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for CreateFolderRequest
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }

                /** Properties of a DeleteFolderRequest. */
                interface IDeleteFolderRequest {

                    /** DeleteFolderRequest name */
                    name?: (string|null);

                    /** DeleteFolderRequest ifMetagenerationMatch */
                    ifMetagenerationMatch?: (number|Long|string|null);

                    /** DeleteFolderRequest ifMetagenerationNotMatch */
                    ifMetagenerationNotMatch?: (number|Long|string|null);

                    /** DeleteFolderRequest requestId */
                    requestId?: (string|null);
                }

                /** Represents a DeleteFolderRequest. */
                class DeleteFolderRequest implements IDeleteFolderRequest {

                    /**
                     * Constructs a new DeleteFolderRequest.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: google.storage.control.v2.IDeleteFolderRequest);

                    /** DeleteFolderRequest name. */
                    public name: string;

                    /** DeleteFolderRequest ifMetagenerationMatch. */
                    public ifMetagenerationMatch?: (number|Long|string|null);

                    /** DeleteFolderRequest ifMetagenerationNotMatch. */
                    public ifMetagenerationNotMatch?: (number|Long|string|null);

                    /** DeleteFolderRequest requestId. */
                    public requestId: string;

                    /**
                     * Creates a new DeleteFolderRequest instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns DeleteFolderRequest instance
                     */
                    public static create(properties?: google.storage.control.v2.IDeleteFolderRequest): google.storage.control.v2.DeleteFolderRequest;

                    /**
                     * Encodes the specified DeleteFolderRequest message. Does not implicitly {@link google.storage.control.v2.DeleteFolderRequest.verify|verify} messages.
                     * @param message DeleteFolderRequest message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: google.storage.control.v2.IDeleteFolderRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified DeleteFolderRequest message, length delimited. Does not implicitly {@link google.storage.control.v2.DeleteFolderRequest.verify|verify} messages.
                     * @param message DeleteFolderRequest message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: google.storage.control.v2.IDeleteFolderRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes a DeleteFolderRequest message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns DeleteFolderRequest
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.control.v2.DeleteFolderRequest;

                    /**
                     * Decodes a DeleteFolderRequest message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns DeleteFolderRequest
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.control.v2.DeleteFolderRequest;

                    /**
                     * Verifies a DeleteFolderRequest message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates a DeleteFolderRequest message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns DeleteFolderRequest
                     */
                    public static fromObject(object: { [k: string]: any }): google.storage.control.v2.DeleteFolderRequest;

                    /**
                     * Creates a plain object from a DeleteFolderRequest message. Also converts values to other types if specified.
                     * @param message DeleteFolderRequest
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: google.storage.control.v2.DeleteFolderRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this DeleteFolderRequest to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for DeleteFolderRequest
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }

                /** Properties of a ListFoldersRequest. */
                interface IListFoldersRequest {

                    /** ListFoldersRequest parent */
                    parent?: (string|null);

                    /** ListFoldersRequest pageSize */
                    pageSize?: (number|null);

                    /** ListFoldersRequest pageToken */
                    pageToken?: (string|null);

                    /** ListFoldersRequest prefix */
                    prefix?: (string|null);

                    /** ListFoldersRequest delimiter */
                    delimiter?: (string|null);

                    /** ListFoldersRequest lexicographicStart */
                    lexicographicStart?: (string|null);

                    /** ListFoldersRequest lexicographicEnd */
                    lexicographicEnd?: (string|null);

                    /** ListFoldersRequest requestId */
                    requestId?: (string|null);
                }

                /** Represents a ListFoldersRequest. */
                class ListFoldersRequest implements IListFoldersRequest {

                    /**
                     * Constructs a new ListFoldersRequest.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: google.storage.control.v2.IListFoldersRequest);

                    /** ListFoldersRequest parent. */
                    public parent: string;

                    /** ListFoldersRequest pageSize. */
                    public pageSize: number;

                    /** ListFoldersRequest pageToken. */
                    public pageToken: string;

                    /** ListFoldersRequest prefix. */
                    public prefix: string;

                    /** ListFoldersRequest delimiter. */
                    public delimiter: string;

                    /** ListFoldersRequest lexicographicStart. */
                    public lexicographicStart: string;

                    /** ListFoldersRequest lexicographicEnd. */
                    public lexicographicEnd: string;

                    /** ListFoldersRequest requestId. */
                    public requestId: string;

                    /**
                     * Creates a new ListFoldersRequest instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns ListFoldersRequest instance
                     */
                    public static create(properties?: google.storage.control.v2.IListFoldersRequest): google.storage.control.v2.ListFoldersRequest;

                    /**
                     * Encodes the specified ListFoldersRequest message. Does not implicitly {@link google.storage.control.v2.ListFoldersRequest.verify|verify} messages.
                     * @param message ListFoldersRequest message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: google.storage.control.v2.IListFoldersRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified ListFoldersRequest message, length delimited. Does not implicitly {@link google.storage.control.v2.ListFoldersRequest.verify|verify} messages.
                     * @param message ListFoldersRequest message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: google.storage.control.v2.IListFoldersRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes a ListFoldersRequest message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns ListFoldersRequest
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.control.v2.ListFoldersRequest;

                    /**
                     * Decodes a ListFoldersRequest message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns ListFoldersRequest
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.control.v2.ListFoldersRequest;

                    /**
                     * Verifies a ListFoldersRequest message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates a ListFoldersRequest message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns ListFoldersRequest
                     */
                    public static fromObject(object: { [k: string]: any }): google.storage.control.v2.ListFoldersRequest;

                    /**
                     * Creates a plain object from a ListFoldersRequest message. Also converts values to other types if specified.
                     * @param message ListFoldersRequest
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: google.storage.control.v2.ListFoldersRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this ListFoldersRequest to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for ListFoldersRequest
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }

                /** Properties of a ListFoldersResponse. */
                interface IListFoldersResponse {

                    /** ListFoldersResponse folders */
                    folders?: (google.storage.control.v2.IFolder[]|null);

                    /** ListFoldersResponse nextPageToken */
                    nextPageToken?: (string|null);
                }

                /** Represents a ListFoldersResponse. */
                class ListFoldersResponse implements IListFoldersResponse {

                    /**
                     * Constructs a new ListFoldersResponse.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: google.storage.control.v2.IListFoldersResponse);

                    /** ListFoldersResponse folders. */
                    public folders: google.storage.control.v2.IFolder[];

                    /** ListFoldersResponse nextPageToken. */
                    public nextPageToken: string;

                    /**
                     * Creates a new ListFoldersResponse instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns ListFoldersResponse instance
                     */
                    public static create(properties?: google.storage.control.v2.IListFoldersResponse): google.storage.control.v2.ListFoldersResponse;

                    /**
                     * Encodes the specified ListFoldersResponse message. Does not implicitly {@link google.storage.control.v2.ListFoldersResponse.verify|verify} messages.
                     * @param message ListFoldersResponse message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: google.storage.control.v2.IListFoldersResponse, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified ListFoldersResponse message, length delimited. Does not implicitly {@link google.storage.control.v2.ListFoldersResponse.verify|verify} messages.
                     * @param message ListFoldersResponse message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: google.storage.control.v2.IListFoldersResponse, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes a ListFoldersResponse message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns ListFoldersResponse
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.control.v2.ListFoldersResponse;

                    /**
                     * Decodes a ListFoldersResponse message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns ListFoldersResponse
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.control.v2.ListFoldersResponse;

                    /**
                     * Verifies a ListFoldersResponse message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates a ListFoldersResponse message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns ListFoldersResponse
                     */
                    public static fromObject(object: { [k: string]: any }): google.storage.control.v2.ListFoldersResponse;

                    /**
                     * Creates a plain object from a ListFoldersResponse message. Also converts values to other types if specified.
                     * @param message ListFoldersResponse
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: google.storage.control.v2.ListFoldersResponse, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this ListFoldersResponse to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for ListFoldersResponse
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }

                /** Properties of a RenameFolderRequest. */
                interface IRenameFolderRequest {

                    /** RenameFolderRequest name */
                    name?: (string|null);

                    /** RenameFolderRequest destinationFolderId */
                    destinationFolderId?: (string|null);

                    /** RenameFolderRequest ifMetagenerationMatch */
                    ifMetagenerationMatch?: (number|Long|string|null);

                    /** RenameFolderRequest ifMetagenerationNotMatch */
                    ifMetagenerationNotMatch?: (number|Long|string|null);

                    /** RenameFolderRequest requestId */
                    requestId?: (string|null);
                }

                /** Represents a RenameFolderRequest. */
                class RenameFolderRequest implements IRenameFolderRequest {

                    /**
                     * Constructs a new RenameFolderRequest.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: google.storage.control.v2.IRenameFolderRequest);

                    /** RenameFolderRequest name. */
                    public name: string;

                    /** RenameFolderRequest destinationFolderId. */
                    public destinationFolderId: string;

                    /** RenameFolderRequest ifMetagenerationMatch. */
                    public ifMetagenerationMatch?: (number|Long|string|null);

                    /** RenameFolderRequest ifMetagenerationNotMatch. */
                    public ifMetagenerationNotMatch?: (number|Long|string|null);

                    /** RenameFolderRequest requestId. */
                    public requestId: string;

                    /**
                     * Creates a new RenameFolderRequest instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns RenameFolderRequest instance
                     */
                    public static create(properties?: google.storage.control.v2.IRenameFolderRequest): google.storage.control.v2.RenameFolderRequest;

                    /**
                     * Encodes the specified RenameFolderRequest message. Does not implicitly {@link google.storage.control.v2.RenameFolderRequest.verify|verify} messages.
                     * @param message RenameFolderRequest message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: google.storage.control.v2.IRenameFolderRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified RenameFolderRequest message, length delimited. Does not implicitly {@link google.storage.control.v2.RenameFolderRequest.verify|verify} messages.
                     * @param message RenameFolderRequest message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: google.storage.control.v2.IRenameFolderRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes a RenameFolderRequest message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns RenameFolderRequest
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.control.v2.RenameFolderRequest;

                    /**
                     * Decodes a RenameFolderRequest message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns RenameFolderRequest
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.control.v2.RenameFolderRequest;

                    /**
                     * Verifies a RenameFolderRequest message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates a RenameFolderRequest message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns RenameFolderRequest
                     */
                    public static fromObject(object: { [k: string]: any }): google.storage.control.v2.RenameFolderRequest;

                    /**
                     * Creates a plain object from a RenameFolderRequest message. Also converts values to other types if specified.
                     * @param message RenameFolderRequest
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: google.storage.control.v2.RenameFolderRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this RenameFolderRequest to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for RenameFolderRequest
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }

                /** Properties of a DeleteFolderRecursiveRequest. */
                interface IDeleteFolderRecursiveRequest {

                    /** DeleteFolderRecursiveRequest name */
                    name?: (string|null);

                    /** DeleteFolderRecursiveRequest ifMetagenerationMatch */
                    ifMetagenerationMatch?: (number|Long|string|null);

                    /** DeleteFolderRecursiveRequest ifMetagenerationNotMatch */
                    ifMetagenerationNotMatch?: (number|Long|string|null);

                    /** DeleteFolderRecursiveRequest requestId */
                    requestId?: (string|null);
                }

                /** Represents a DeleteFolderRecursiveRequest. */
                class DeleteFolderRecursiveRequest implements IDeleteFolderRecursiveRequest {

                    /**
                     * Constructs a new DeleteFolderRecursiveRequest.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: google.storage.control.v2.IDeleteFolderRecursiveRequest);

                    /** DeleteFolderRecursiveRequest name. */
                    public name: string;

                    /** DeleteFolderRecursiveRequest ifMetagenerationMatch. */
                    public ifMetagenerationMatch?: (number|Long|string|null);

                    /** DeleteFolderRecursiveRequest ifMetagenerationNotMatch. */
                    public ifMetagenerationNotMatch?: (number|Long|string|null);

                    /** DeleteFolderRecursiveRequest requestId. */
                    public requestId: string;

                    /**
                     * Creates a new DeleteFolderRecursiveRequest instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns DeleteFolderRecursiveRequest instance
                     */
                    public static create(properties?: google.storage.control.v2.IDeleteFolderRecursiveRequest): google.storage.control.v2.DeleteFolderRecursiveRequest;

                    /**
                     * Encodes the specified DeleteFolderRecursiveRequest message. Does not implicitly {@link google.storage.control.v2.DeleteFolderRecursiveRequest.verify|verify} messages.
                     * @param message DeleteFolderRecursiveRequest message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: google.storage.control.v2.IDeleteFolderRecursiveRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified DeleteFolderRecursiveRequest message, length delimited. Does not implicitly {@link google.storage.control.v2.DeleteFolderRecursiveRequest.verify|verify} messages.
                     * @param message DeleteFolderRecursiveRequest message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: google.storage.control.v2.IDeleteFolderRecursiveRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes a DeleteFolderRecursiveRequest message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns DeleteFolderRecursiveRequest
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.control.v2.DeleteFolderRecursiveRequest;

                    /**
                     * Decodes a DeleteFolderRecursiveRequest message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns DeleteFolderRecursiveRequest
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.control.v2.DeleteFolderRecursiveRequest;

                    /**
                     * Verifies a DeleteFolderRecursiveRequest message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates a DeleteFolderRecursiveRequest message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns DeleteFolderRecursiveRequest
                     */
                    public static fromObject(object: { [k: string]: any }): google.storage.control.v2.DeleteFolderRecursiveRequest;

                    /**
                     * Creates a plain object from a DeleteFolderRecursiveRequest message. Also converts values to other types if specified.
                     * @param message DeleteFolderRecursiveRequest
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: google.storage.control.v2.DeleteFolderRecursiveRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this DeleteFolderRecursiveRequest to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for DeleteFolderRecursiveRequest
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }

                /** Properties of a CommonLongRunningOperationMetadata. */
                interface ICommonLongRunningOperationMetadata {

                    /** CommonLongRunningOperationMetadata createTime */
                    createTime?: (google.protobuf.ITimestamp|null);

                    /** CommonLongRunningOperationMetadata endTime */
                    endTime?: (google.protobuf.ITimestamp|null);

                    /** CommonLongRunningOperationMetadata updateTime */
                    updateTime?: (google.protobuf.ITimestamp|null);

                    /** CommonLongRunningOperationMetadata type */
                    type?: (string|null);

                    /** CommonLongRunningOperationMetadata requestedCancellation */
                    requestedCancellation?: (boolean|null);

                    /** CommonLongRunningOperationMetadata progressPercent */
                    progressPercent?: (number|null);
                }

                /** Represents a CommonLongRunningOperationMetadata. */
                class CommonLongRunningOperationMetadata implements ICommonLongRunningOperationMetadata {

                    /**
                     * Constructs a new CommonLongRunningOperationMetadata.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: google.storage.control.v2.ICommonLongRunningOperationMetadata);

                    /** CommonLongRunningOperationMetadata createTime. */
                    public createTime?: (google.protobuf.ITimestamp|null);

                    /** CommonLongRunningOperationMetadata endTime. */
                    public endTime?: (google.protobuf.ITimestamp|null);

                    /** CommonLongRunningOperationMetadata updateTime. */
                    public updateTime?: (google.protobuf.ITimestamp|null);

                    /** CommonLongRunningOperationMetadata type. */
                    public type: string;

                    /** CommonLongRunningOperationMetadata requestedCancellation. */
                    public requestedCancellation: boolean;

                    /** CommonLongRunningOperationMetadata progressPercent. */
                    public progressPercent: number;

                    /**
                     * Creates a new CommonLongRunningOperationMetadata instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns CommonLongRunningOperationMetadata instance
                     */
                    public static create(properties?: google.storage.control.v2.ICommonLongRunningOperationMetadata): google.storage.control.v2.CommonLongRunningOperationMetadata;

                    /**
                     * Encodes the specified CommonLongRunningOperationMetadata message. Does not implicitly {@link google.storage.control.v2.CommonLongRunningOperationMetadata.verify|verify} messages.
                     * @param message CommonLongRunningOperationMetadata message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: google.storage.control.v2.ICommonLongRunningOperationMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified CommonLongRunningOperationMetadata message, length delimited. Does not implicitly {@link google.storage.control.v2.CommonLongRunningOperationMetadata.verify|verify} messages.
                     * @param message CommonLongRunningOperationMetadata message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: google.storage.control.v2.ICommonLongRunningOperationMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes a CommonLongRunningOperationMetadata message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns CommonLongRunningOperationMetadata
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.control.v2.CommonLongRunningOperationMetadata;

                    /**
                     * Decodes a CommonLongRunningOperationMetadata message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns CommonLongRunningOperationMetadata
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.control.v2.CommonLongRunningOperationMetadata;

                    /**
                     * Verifies a CommonLongRunningOperationMetadata message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates a CommonLongRunningOperationMetadata message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns CommonLongRunningOperationMetadata
                     */
                    public static fromObject(object: { [k: string]: any }): google.storage.control.v2.CommonLongRunningOperationMetadata;

                    /**
                     * Creates a plain object from a CommonLongRunningOperationMetadata message. Also converts values to other types if specified.
                     * @param message CommonLongRunningOperationMetadata
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: google.storage.control.v2.CommonLongRunningOperationMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this CommonLongRunningOperationMetadata to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for CommonLongRunningOperationMetadata
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }

                /** Properties of a RenameFolderMetadata. */
                interface IRenameFolderMetadata {

                    /** RenameFolderMetadata commonMetadata */
                    commonMetadata?: (google.storage.control.v2.ICommonLongRunningOperationMetadata|null);

                    /** RenameFolderMetadata sourceFolderId */
                    sourceFolderId?: (string|null);

                    /** RenameFolderMetadata destinationFolderId */
                    destinationFolderId?: (string|null);
                }

                /** Represents a RenameFolderMetadata. */
                class RenameFolderMetadata implements IRenameFolderMetadata {

                    /**
                     * Constructs a new RenameFolderMetadata.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: google.storage.control.v2.IRenameFolderMetadata);

                    /** RenameFolderMetadata commonMetadata. */
                    public commonMetadata?: (google.storage.control.v2.ICommonLongRunningOperationMetadata|null);

                    /** RenameFolderMetadata sourceFolderId. */
                    public sourceFolderId: string;

                    /** RenameFolderMetadata destinationFolderId. */
                    public destinationFolderId: string;

                    /**
                     * Creates a new RenameFolderMetadata instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns RenameFolderMetadata instance
                     */
                    public static create(properties?: google.storage.control.v2.IRenameFolderMetadata): google.storage.control.v2.RenameFolderMetadata;

                    /**
                     * Encodes the specified RenameFolderMetadata message. Does not implicitly {@link google.storage.control.v2.RenameFolderMetadata.verify|verify} messages.
                     * @param message RenameFolderMetadata message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: google.storage.control.v2.IRenameFolderMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified RenameFolderMetadata message, length delimited. Does not implicitly {@link google.storage.control.v2.RenameFolderMetadata.verify|verify} messages.
                     * @param message RenameFolderMetadata message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: google.storage.control.v2.IRenameFolderMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes a RenameFolderMetadata message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns RenameFolderMetadata
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.control.v2.RenameFolderMetadata;

                    /**
                     * Decodes a RenameFolderMetadata message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns RenameFolderMetadata
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.control.v2.RenameFolderMetadata;

                    /**
                     * Verifies a RenameFolderMetadata message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates a RenameFolderMetadata message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns RenameFolderMetadata
                     */
                    public static fromObject(object: { [k: string]: any }): google.storage.control.v2.RenameFolderMetadata;

                    /**
                     * Creates a plain object from a RenameFolderMetadata message. Also converts values to other types if specified.
                     * @param message RenameFolderMetadata
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: google.storage.control.v2.RenameFolderMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this RenameFolderMetadata to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for RenameFolderMetadata
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }

                /** Properties of a DeleteFolderRecursiveMetadata. */
                interface IDeleteFolderRecursiveMetadata {

                    /** DeleteFolderRecursiveMetadata commonMetadata */
                    commonMetadata?: (google.storage.control.v2.ICommonLongRunningOperationMetadata|null);

                    /** DeleteFolderRecursiveMetadata folderId */
                    folderId?: (string|null);
                }

                /** Represents a DeleteFolderRecursiveMetadata. */
                class DeleteFolderRecursiveMetadata implements IDeleteFolderRecursiveMetadata {

                    /**
                     * Constructs a new DeleteFolderRecursiveMetadata.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: google.storage.control.v2.IDeleteFolderRecursiveMetadata);

                    /** DeleteFolderRecursiveMetadata commonMetadata. */
                    public commonMetadata?: (google.storage.control.v2.ICommonLongRunningOperationMetadata|null);

                    /** DeleteFolderRecursiveMetadata folderId. */
                    public folderId: string;

                    /**
                     * Creates a new DeleteFolderRecursiveMetadata instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns DeleteFolderRecursiveMetadata instance
                     */
                    public static create(properties?: google.storage.control.v2.IDeleteFolderRecursiveMetadata): google.storage.control.v2.DeleteFolderRecursiveMetadata;

                    /**
                     * Encodes the specified DeleteFolderRecursiveMetadata message. Does not implicitly {@link google.storage.control.v2.DeleteFolderRecursiveMetadata.verify|verify} messages.
                     * @param message DeleteFolderRecursiveMetadata message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: google.storage.control.v2.IDeleteFolderRecursiveMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified DeleteFolderRecursiveMetadata message, length delimited. Does not implicitly {@link google.storage.control.v2.DeleteFolderRecursiveMetadata.verify|verify} messages.
                     * @param message DeleteFolderRecursiveMetadata message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: google.storage.control.v2.IDeleteFolderRecursiveMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes a DeleteFolderRecursiveMetadata message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns DeleteFolderRecursiveMetadata
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.control.v2.DeleteFolderRecursiveMetadata;

                    /**
                     * Decodes a DeleteFolderRecursiveMetadata message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns DeleteFolderRecursiveMetadata
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.control.v2.DeleteFolderRecursiveMetadata;

                    /**
                     * Verifies a DeleteFolderRecursiveMetadata message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates a DeleteFolderRecursiveMetadata message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns DeleteFolderRecursiveMetadata
                     */
                    public static fromObject(object: { [k: string]: any }): google.storage.control.v2.DeleteFolderRecursiveMetadata;

                    /**
                     * Creates a plain object from a DeleteFolderRecursiveMetadata message. Also converts values to other types if specified.
                     * @param message DeleteFolderRecursiveMetadata
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: google.storage.control.v2.DeleteFolderRecursiveMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this DeleteFolderRecursiveMetadata to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for DeleteFolderRecursiveMetadata
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }

                /** Properties of a StorageLayout. */
                interface IStorageLayout {

                    /** StorageLayout name */
                    name?: (string|null);

                    /** StorageLayout location */
                    location?: (string|null);

                    /** StorageLayout locationType */
                    locationType?: (string|null);

                    /** StorageLayout customPlacementConfig */
                    customPlacementConfig?: (google.storage.control.v2.StorageLayout.ICustomPlacementConfig|null);

                    /** StorageLayout hierarchicalNamespace */
                    hierarchicalNamespace?: (google.storage.control.v2.StorageLayout.IHierarchicalNamespace|null);
                }

                /** Represents a StorageLayout. */
                class StorageLayout implements IStorageLayout {

                    /**
                     * Constructs a new StorageLayout.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: google.storage.control.v2.IStorageLayout);

                    /** StorageLayout name. */
                    public name: string;

                    /** StorageLayout location. */
                    public location: string;

                    /** StorageLayout locationType. */
                    public locationType: string;

                    /** StorageLayout customPlacementConfig. */
                    public customPlacementConfig?: (google.storage.control.v2.StorageLayout.ICustomPlacementConfig|null);

                    /** StorageLayout hierarchicalNamespace. */
                    public hierarchicalNamespace?: (google.storage.control.v2.StorageLayout.IHierarchicalNamespace|null);

                    /**
                     * Creates a new StorageLayout instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns StorageLayout instance
                     */
                    public static create(properties?: google.storage.control.v2.IStorageLayout): google.storage.control.v2.StorageLayout;

                    /**
                     * Encodes the specified StorageLayout message. Does not implicitly {@link google.storage.control.v2.StorageLayout.verify|verify} messages.
                     * @param message StorageLayout message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: google.storage.control.v2.IStorageLayout, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified StorageLayout message, length delimited. Does not implicitly {@link google.storage.control.v2.StorageLayout.verify|verify} messages.
                     * @param message StorageLayout message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: google.storage.control.v2.IStorageLayout, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes a StorageLayout message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns StorageLayout
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.control.v2.StorageLayout;

                    /**
                     * Decodes a StorageLayout message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns StorageLayout
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.control.v2.StorageLayout;

                    /**
                     * Verifies a StorageLayout message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates a StorageLayout message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns StorageLayout
                     */
                    public static fromObject(object: { [k: string]: any }): google.storage.control.v2.StorageLayout;

                    /**
                     * Creates a plain object from a StorageLayout message. Also converts values to other types if specified.
                     * @param message StorageLayout
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: google.storage.control.v2.StorageLayout, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this StorageLayout to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for StorageLayout
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }

                namespace StorageLayout {

                    /** Properties of a CustomPlacementConfig. */
                    interface ICustomPlacementConfig {

                        /** CustomPlacementConfig dataLocations */
                        dataLocations?: (string[]|null);
                    }

                    /** Represents a CustomPlacementConfig. */
                    class CustomPlacementConfig implements ICustomPlacementConfig {

                        /**
                         * Constructs a new CustomPlacementConfig.
                         * @param [properties] Properties to set
                         */
                        constructor(properties?: google.storage.control.v2.StorageLayout.ICustomPlacementConfig);

                        /** CustomPlacementConfig dataLocations. */
                        public dataLocations: string[];

                        /**
                         * Creates a new CustomPlacementConfig instance using the specified properties.
                         * @param [properties] Properties to set
                         * @returns CustomPlacementConfig instance
                         */
                        public static create(properties?: google.storage.control.v2.StorageLayout.ICustomPlacementConfig): google.storage.control.v2.StorageLayout.CustomPlacementConfig;

                        /**
                         * Encodes the specified CustomPlacementConfig message. Does not implicitly {@link google.storage.control.v2.StorageLayout.CustomPlacementConfig.verify|verify} messages.
                         * @param message CustomPlacementConfig message or plain object to encode
                         * @param [writer] Writer to encode to
                         * @returns Writer
                         */
                        public static encode(message: google.storage.control.v2.StorageLayout.ICustomPlacementConfig, writer?: $protobuf.Writer): $protobuf.Writer;

                        /**
                         * Encodes the specified CustomPlacementConfig message, length delimited. Does not implicitly {@link google.storage.control.v2.StorageLayout.CustomPlacementConfig.verify|verify} messages.
                         * @param message CustomPlacementConfig message or plain object to encode
                         * @param [writer] Writer to encode to
                         * @returns Writer
                         */
                        public static encodeDelimited(message: google.storage.control.v2.StorageLayout.ICustomPlacementConfig, writer?: $protobuf.Writer): $protobuf.Writer;

                        /**
                         * Decodes a CustomPlacementConfig message from the specified reader or buffer.
                         * @param reader Reader or buffer to decode from
                         * @param [length] Message length if known beforehand
                         * @returns CustomPlacementConfig
                         * @throws {Error} If the payload is not a reader or valid buffer
                         * @throws {$protobuf.util.ProtocolError} If required fields are missing
                         */
                        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.control.v2.StorageLayout.CustomPlacementConfig;

                        /**
                         * Decodes a CustomPlacementConfig message from the specified reader or buffer, length delimited.
                         * @param reader Reader or buffer to decode from
                         * @returns CustomPlacementConfig
                         * @throws {Error} If the payload is not a reader or valid buffer
                         * @throws {$protobuf.util.ProtocolError} If required fields are missing
                         */
                        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.control.v2.StorageLayout.CustomPlacementConfig;

                        /**
                         * Verifies a CustomPlacementConfig message.
                         * @param message Plain object to verify
                         * @returns `null` if valid, otherwise the reason why it is not
                         */
                        public static verify(message: { [k: string]: any }): (string|null);

                        /**
                         * Creates a CustomPlacementConfig message from a plain object. Also converts values to their respective internal types.
                         * @param object Plain object
                         * @returns CustomPlacementConfig
                         */
                        public static fromObject(object: { [k: string]: any }): google.storage.control.v2.StorageLayout.CustomPlacementConfig;

                        /**
                         * Creates a plain object from a CustomPlacementConfig message. Also converts values to other types if specified.
                         * @param message CustomPlacementConfig
                         * @param [options] Conversion options
                         * @returns Plain object
                         */
                        public static toObject(message: google.storage.control.v2.StorageLayout.CustomPlacementConfig, options?: $protobuf.IConversionOptions): { [k: string]: any };

                        /**
                         * Converts this CustomPlacementConfig to JSON.
                         * @returns JSON object
                         */
                        public toJSON(): { [k: string]: any };

                        /**
                         * Gets the default type url for CustomPlacementConfig
                         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                         * @returns The default type url
                         */
                        public static getTypeUrl(typeUrlPrefix?: string): string;
                    }

                    /** Properties of a HierarchicalNamespace. */
                    interface IHierarchicalNamespace {

                        /** HierarchicalNamespace enabled */
                        enabled?: (boolean|null);
                    }

                    /** Represents a HierarchicalNamespace. */
                    class HierarchicalNamespace implements IHierarchicalNamespace {

                        /**
                         * Constructs a new HierarchicalNamespace.
                         * @param [properties] Properties to set
                         */
                        constructor(properties?: google.storage.control.v2.StorageLayout.IHierarchicalNamespace);

                        /** HierarchicalNamespace enabled. */
                        public enabled: boolean;

                        /**
                         * Creates a new HierarchicalNamespace instance using the specified properties.
                         * @param [properties] Properties to set
                         * @returns HierarchicalNamespace instance
                         */
                        public static create(properties?: google.storage.control.v2.StorageLayout.IHierarchicalNamespace): google.storage.control.v2.StorageLayout.HierarchicalNamespace;

                        /**
                         * Encodes the specified HierarchicalNamespace message. Does not implicitly {@link google.storage.control.v2.StorageLayout.HierarchicalNamespace.verify|verify} messages.
                         * @param message HierarchicalNamespace message or plain object to encode
                         * @param [writer] Writer to encode to
                         * @returns Writer
                         */
                        public static encode(message: google.storage.control.v2.StorageLayout.IHierarchicalNamespace, writer?: $protobuf.Writer): $protobuf.Writer;

                        /**
                         * Encodes the specified HierarchicalNamespace message, length delimited. Does not implicitly {@link google.storage.control.v2.StorageLayout.HierarchicalNamespace.verify|verify} messages.
                         * @param message HierarchicalNamespace message or plain object to encode
                         * @param [writer] Writer to encode to
                         * @returns Writer
                         */
                        public static encodeDelimited(message: google.storage.control.v2.StorageLayout.IHierarchicalNamespace, writer?: $protobuf.Writer): $protobuf.Writer;

                        /**
                         * Decodes a HierarchicalNamespace message from the specified reader or buffer.
                         * @param reader Reader or buffer to decode from
                         * @param [length] Message length if known beforehand
                         * @returns HierarchicalNamespace
                         * @throws {Error} If the payload is not a reader or valid buffer
                         * @throws {$protobuf.util.ProtocolError} If required fields are missing
                         */
                        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.control.v2.StorageLayout.HierarchicalNamespace;

                        /**
                         * Decodes a HierarchicalNamespace message from the specified reader or buffer, length delimited.
                         * @param reader Reader or buffer to decode from
                         * @returns HierarchicalNamespace
                         * @throws {Error} If the payload is not a reader or valid buffer
                         * @throws {$protobuf.util.ProtocolError} If required fields are missing
                         */
                        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.control.v2.StorageLayout.HierarchicalNamespace;

                        /**
                         * Verifies a HierarchicalNamespace message.
                         * @param message Plain object to verify
                         * @returns `null` if valid, otherwise the reason why it is not
                         */
                        public static verify(message: { [k: string]: any }): (string|null);

                        /**
                         * Creates a HierarchicalNamespace message from a plain object. Also converts values to their respective internal types.
                         * @param object Plain object
                         * @returns HierarchicalNamespace
                         */
                        public static fromObject(object: { [k: string]: any }): google.storage.control.v2.StorageLayout.HierarchicalNamespace;

                        /**
                         * Creates a plain object from a HierarchicalNamespace message. Also converts values to other types if specified.
                         * @param message HierarchicalNamespace
                         * @param [options] Conversion options
                         * @returns Plain object
                         */
                        public static toObject(message: google.storage.control.v2.StorageLayout.HierarchicalNamespace, options?: $protobuf.IConversionOptions): { [k: string]: any };

                        /**
                         * Converts this HierarchicalNamespace to JSON.
                         * @returns JSON object
                         */
                        public toJSON(): { [k: string]: any };

                        /**
                         * Gets the default type url for HierarchicalNamespace
                         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                         * @returns The default type url
                         */
                        public static getTypeUrl(typeUrlPrefix?: string): string;
                    }
                }

                /** Properties of a GetStorageLayoutRequest. */
                interface IGetStorageLayoutRequest {

                    /** GetStorageLayoutRequest name */
                    name?: (string|null);

                    /** GetStorageLayoutRequest prefix */
                    prefix?: (string|null);

                    /** GetStorageLayoutRequest requestId */
                    requestId?: (string|null);
                }

                /** Represents a GetStorageLayoutRequest. */
                class GetStorageLayoutRequest implements IGetStorageLayoutRequest {

                    /**
                     * Constructs a new GetStorageLayoutRequest.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: google.storage.control.v2.IGetStorageLayoutRequest);

                    /** GetStorageLayoutRequest name. */
                    public name: string;

                    /** GetStorageLayoutRequest prefix. */
                    public prefix: string;

                    /** GetStorageLayoutRequest requestId. */
                    public requestId: string;

                    /**
                     * Creates a new GetStorageLayoutRequest instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns GetStorageLayoutRequest instance
                     */
                    public static create(properties?: google.storage.control.v2.IGetStorageLayoutRequest): google.storage.control.v2.GetStorageLayoutRequest;

                    /**
                     * Encodes the specified GetStorageLayoutRequest message. Does not implicitly {@link google.storage.control.v2.GetStorageLayoutRequest.verify|verify} messages.
                     * @param message GetStorageLayoutRequest message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: google.storage.control.v2.IGetStorageLayoutRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified GetStorageLayoutRequest message, length delimited. Does not implicitly {@link google.storage.control.v2.GetStorageLayoutRequest.verify|verify} messages.
                     * @param message GetStorageLayoutRequest message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: google.storage.control.v2.IGetStorageLayoutRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes a GetStorageLayoutRequest message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns GetStorageLayoutRequest
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.control.v2.GetStorageLayoutRequest;

                    /**
                     * Decodes a GetStorageLayoutRequest message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns GetStorageLayoutRequest
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.control.v2.GetStorageLayoutRequest;

                    /**
                     * Verifies a GetStorageLayoutRequest message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates a GetStorageLayoutRequest message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns GetStorageLayoutRequest
                     */
                    public static fromObject(object: { [k: string]: any }): google.storage.control.v2.GetStorageLayoutRequest;

                    /**
                     * Creates a plain object from a GetStorageLayoutRequest message. Also converts values to other types if specified.
                     * @param message GetStorageLayoutRequest
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: google.storage.control.v2.GetStorageLayoutRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this GetStorageLayoutRequest to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for GetStorageLayoutRequest
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }

                /** Properties of a ManagedFolder. */
                interface IManagedFolder {

                    /** ManagedFolder name */
                    name?: (string|null);

                    /** ManagedFolder metageneration */
                    metageneration?: (number|Long|string|null);

                    /** ManagedFolder createTime */
                    createTime?: (google.protobuf.ITimestamp|null);

                    /** ManagedFolder updateTime */
                    updateTime?: (google.protobuf.ITimestamp|null);
                }

                /** Represents a ManagedFolder. */
                class ManagedFolder implements IManagedFolder {

                    /**
                     * Constructs a new ManagedFolder.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: google.storage.control.v2.IManagedFolder);

                    /** ManagedFolder name. */
                    public name: string;

                    /** ManagedFolder metageneration. */
                    public metageneration: (number|Long|string);

                    /** ManagedFolder createTime. */
                    public createTime?: (google.protobuf.ITimestamp|null);

                    /** ManagedFolder updateTime. */
                    public updateTime?: (google.protobuf.ITimestamp|null);

                    /**
                     * Creates a new ManagedFolder instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns ManagedFolder instance
                     */
                    public static create(properties?: google.storage.control.v2.IManagedFolder): google.storage.control.v2.ManagedFolder;

                    /**
                     * Encodes the specified ManagedFolder message. Does not implicitly {@link google.storage.control.v2.ManagedFolder.verify|verify} messages.
                     * @param message ManagedFolder message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: google.storage.control.v2.IManagedFolder, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified ManagedFolder message, length delimited. Does not implicitly {@link google.storage.control.v2.ManagedFolder.verify|verify} messages.
                     * @param message ManagedFolder message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: google.storage.control.v2.IManagedFolder, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes a ManagedFolder message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns ManagedFolder
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.control.v2.ManagedFolder;

                    /**
                     * Decodes a ManagedFolder message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns ManagedFolder
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.control.v2.ManagedFolder;

                    /**
                     * Verifies a ManagedFolder message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates a ManagedFolder message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns ManagedFolder
                     */
                    public static fromObject(object: { [k: string]: any }): google.storage.control.v2.ManagedFolder;

                    /**
                     * Creates a plain object from a ManagedFolder message. Also converts values to other types if specified.
                     * @param message ManagedFolder
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: google.storage.control.v2.ManagedFolder, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this ManagedFolder to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for ManagedFolder
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }

                /** Properties of a GetManagedFolderRequest. */
                interface IGetManagedFolderRequest {

                    /** GetManagedFolderRequest name */
                    name?: (string|null);

                    /** GetManagedFolderRequest ifMetagenerationMatch */
                    ifMetagenerationMatch?: (number|Long|string|null);

                    /** GetManagedFolderRequest ifMetagenerationNotMatch */
                    ifMetagenerationNotMatch?: (number|Long|string|null);

                    /** GetManagedFolderRequest requestId */
                    requestId?: (string|null);
                }

                /** Represents a GetManagedFolderRequest. */
                class GetManagedFolderRequest implements IGetManagedFolderRequest {

                    /**
                     * Constructs a new GetManagedFolderRequest.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: google.storage.control.v2.IGetManagedFolderRequest);

                    /** GetManagedFolderRequest name. */
                    public name: string;

                    /** GetManagedFolderRequest ifMetagenerationMatch. */
                    public ifMetagenerationMatch?: (number|Long|string|null);

                    /** GetManagedFolderRequest ifMetagenerationNotMatch. */
                    public ifMetagenerationNotMatch?: (number|Long|string|null);

                    /** GetManagedFolderRequest requestId. */
                    public requestId: string;

                    /**
                     * Creates a new GetManagedFolderRequest instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns GetManagedFolderRequest instance
                     */
                    public static create(properties?: google.storage.control.v2.IGetManagedFolderRequest): google.storage.control.v2.GetManagedFolderRequest;

                    /**
                     * Encodes the specified GetManagedFolderRequest message. Does not implicitly {@link google.storage.control.v2.GetManagedFolderRequest.verify|verify} messages.
                     * @param message GetManagedFolderRequest message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: google.storage.control.v2.IGetManagedFolderRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified GetManagedFolderRequest message, length delimited. Does not implicitly {@link google.storage.control.v2.GetManagedFolderRequest.verify|verify} messages.
                     * @param message GetManagedFolderRequest message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: google.storage.control.v2.IGetManagedFolderRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes a GetManagedFolderRequest message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns GetManagedFolderRequest
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.control.v2.GetManagedFolderRequest;

                    /**
                     * Decodes a GetManagedFolderRequest message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns GetManagedFolderRequest
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.control.v2.GetManagedFolderRequest;

                    /**
                     * Verifies a GetManagedFolderRequest message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates a GetManagedFolderRequest message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns GetManagedFolderRequest
                     */
                    public static fromObject(object: { [k: string]: any }): google.storage.control.v2.GetManagedFolderRequest;

                    /**
                     * Creates a plain object from a GetManagedFolderRequest message. Also converts values to other types if specified.
                     * @param message GetManagedFolderRequest
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: google.storage.control.v2.GetManagedFolderRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this GetManagedFolderRequest to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for GetManagedFolderRequest
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }

                /** Properties of a CreateManagedFolderRequest. */
                interface ICreateManagedFolderRequest {

                    /** CreateManagedFolderRequest parent */
                    parent?: (string|null);

                    /** CreateManagedFolderRequest managedFolder */
                    managedFolder?: (google.storage.control.v2.IManagedFolder|null);

                    /** CreateManagedFolderRequest managedFolderId */
                    managedFolderId?: (string|null);

                    /** CreateManagedFolderRequest requestId */
                    requestId?: (string|null);
                }

                /** Represents a CreateManagedFolderRequest. */
                class CreateManagedFolderRequest implements ICreateManagedFolderRequest {

                    /**
                     * Constructs a new CreateManagedFolderRequest.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: google.storage.control.v2.ICreateManagedFolderRequest);

                    /** CreateManagedFolderRequest parent. */
                    public parent: string;

                    /** CreateManagedFolderRequest managedFolder. */
                    public managedFolder?: (google.storage.control.v2.IManagedFolder|null);

                    /** CreateManagedFolderRequest managedFolderId. */
                    public managedFolderId: string;

                    /** CreateManagedFolderRequest requestId. */
                    public requestId: string;

                    /**
                     * Creates a new CreateManagedFolderRequest instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns CreateManagedFolderRequest instance
                     */
                    public static create(properties?: google.storage.control.v2.ICreateManagedFolderRequest): google.storage.control.v2.CreateManagedFolderRequest;

                    /**
                     * Encodes the specified CreateManagedFolderRequest message. Does not implicitly {@link google.storage.control.v2.CreateManagedFolderRequest.verify|verify} messages.
                     * @param message CreateManagedFolderRequest message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: google.storage.control.v2.ICreateManagedFolderRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified CreateManagedFolderRequest message, length delimited. Does not implicitly {@link google.storage.control.v2.CreateManagedFolderRequest.verify|verify} messages.
                     * @param message CreateManagedFolderRequest message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: google.storage.control.v2.ICreateManagedFolderRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes a CreateManagedFolderRequest message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns CreateManagedFolderRequest
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.control.v2.CreateManagedFolderRequest;

                    /**
                     * Decodes a CreateManagedFolderRequest message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns CreateManagedFolderRequest
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.control.v2.CreateManagedFolderRequest;

                    /**
                     * Verifies a CreateManagedFolderRequest message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates a CreateManagedFolderRequest message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns CreateManagedFolderRequest
                     */
                    public static fromObject(object: { [k: string]: any }): google.storage.control.v2.CreateManagedFolderRequest;

                    /**
                     * Creates a plain object from a CreateManagedFolderRequest message. Also converts values to other types if specified.
                     * @param message CreateManagedFolderRequest
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: google.storage.control.v2.CreateManagedFolderRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this CreateManagedFolderRequest to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for CreateManagedFolderRequest
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }

                /** Properties of a DeleteManagedFolderRequest. */
                interface IDeleteManagedFolderRequest {

                    /** DeleteManagedFolderRequest name */
                    name?: (string|null);

                    /** DeleteManagedFolderRequest ifMetagenerationMatch */
                    ifMetagenerationMatch?: (number|Long|string|null);

                    /** DeleteManagedFolderRequest ifMetagenerationNotMatch */
                    ifMetagenerationNotMatch?: (number|Long|string|null);

                    /** DeleteManagedFolderRequest allowNonEmpty */
                    allowNonEmpty?: (boolean|null);

                    /** DeleteManagedFolderRequest requestId */
                    requestId?: (string|null);
                }

                /** Represents a DeleteManagedFolderRequest. */
                class DeleteManagedFolderRequest implements IDeleteManagedFolderRequest {

                    /**
                     * Constructs a new DeleteManagedFolderRequest.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: google.storage.control.v2.IDeleteManagedFolderRequest);

                    /** DeleteManagedFolderRequest name. */
                    public name: string;

                    /** DeleteManagedFolderRequest ifMetagenerationMatch. */
                    public ifMetagenerationMatch?: (number|Long|string|null);

                    /** DeleteManagedFolderRequest ifMetagenerationNotMatch. */
                    public ifMetagenerationNotMatch?: (number|Long|string|null);

                    /** DeleteManagedFolderRequest allowNonEmpty. */
                    public allowNonEmpty: boolean;

                    /** DeleteManagedFolderRequest requestId. */
                    public requestId: string;

                    /**
                     * Creates a new DeleteManagedFolderRequest instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns DeleteManagedFolderRequest instance
                     */
                    public static create(properties?: google.storage.control.v2.IDeleteManagedFolderRequest): google.storage.control.v2.DeleteManagedFolderRequest;

                    /**
                     * Encodes the specified DeleteManagedFolderRequest message. Does not implicitly {@link google.storage.control.v2.DeleteManagedFolderRequest.verify|verify} messages.
                     * @param message DeleteManagedFolderRequest message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: google.storage.control.v2.IDeleteManagedFolderRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified DeleteManagedFolderRequest message, length delimited. Does not implicitly {@link google.storage.control.v2.DeleteManagedFolderRequest.verify|verify} messages.
                     * @param message DeleteManagedFolderRequest message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: google.storage.control.v2.IDeleteManagedFolderRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes a DeleteManagedFolderRequest message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns DeleteManagedFolderRequest
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.control.v2.DeleteManagedFolderRequest;

                    /**
                     * Decodes a DeleteManagedFolderRequest message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns DeleteManagedFolderRequest
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.control.v2.DeleteManagedFolderRequest;

                    /**
                     * Verifies a DeleteManagedFolderRequest message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates a DeleteManagedFolderRequest message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns DeleteManagedFolderRequest
                     */
                    public static fromObject(object: { [k: string]: any }): google.storage.control.v2.DeleteManagedFolderRequest;

                    /**
                     * Creates a plain object from a DeleteManagedFolderRequest message. Also converts values to other types if specified.
                     * @param message DeleteManagedFolderRequest
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: google.storage.control.v2.DeleteManagedFolderRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this DeleteManagedFolderRequest to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for DeleteManagedFolderRequest
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }

                /** Properties of a ListManagedFoldersRequest. */
                interface IListManagedFoldersRequest {

                    /** ListManagedFoldersRequest parent */
                    parent?: (string|null);

                    /** ListManagedFoldersRequest pageSize */
                    pageSize?: (number|null);

                    /** ListManagedFoldersRequest pageToken */
                    pageToken?: (string|null);

                    /** ListManagedFoldersRequest prefix */
                    prefix?: (string|null);

                    /** ListManagedFoldersRequest requestId */
                    requestId?: (string|null);
                }

                /** Represents a ListManagedFoldersRequest. */
                class ListManagedFoldersRequest implements IListManagedFoldersRequest {

                    /**
                     * Constructs a new ListManagedFoldersRequest.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: google.storage.control.v2.IListManagedFoldersRequest);

                    /** ListManagedFoldersRequest parent. */
                    public parent: string;

                    /** ListManagedFoldersRequest pageSize. */
                    public pageSize: number;

                    /** ListManagedFoldersRequest pageToken. */
                    public pageToken: string;

                    /** ListManagedFoldersRequest prefix. */
                    public prefix: string;

                    /** ListManagedFoldersRequest requestId. */
                    public requestId: string;

                    /**
                     * Creates a new ListManagedFoldersRequest instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns ListManagedFoldersRequest instance
                     */
                    public static create(properties?: google.storage.control.v2.IListManagedFoldersRequest): google.storage.control.v2.ListManagedFoldersRequest;

                    /**
                     * Encodes the specified ListManagedFoldersRequest message. Does not implicitly {@link google.storage.control.v2.ListManagedFoldersRequest.verify|verify} messages.
                     * @param message ListManagedFoldersRequest message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: google.storage.control.v2.IListManagedFoldersRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified ListManagedFoldersRequest message, length delimited. Does not implicitly {@link google.storage.control.v2.ListManagedFoldersRequest.verify|verify} messages.
                     * @param message ListManagedFoldersRequest message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: google.storage.control.v2.IListManagedFoldersRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes a ListManagedFoldersRequest message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns ListManagedFoldersRequest
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.control.v2.ListManagedFoldersRequest;

                    /**
                     * Decodes a ListManagedFoldersRequest message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns ListManagedFoldersRequest
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.control.v2.ListManagedFoldersRequest;

                    /**
                     * Verifies a ListManagedFoldersRequest message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates a ListManagedFoldersRequest message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns ListManagedFoldersRequest
                     */
                    public static fromObject(object: { [k: string]: any }): google.storage.control.v2.ListManagedFoldersRequest;

                    /**
                     * Creates a plain object from a ListManagedFoldersRequest message. Also converts values to other types if specified.
                     * @param message ListManagedFoldersRequest
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: google.storage.control.v2.ListManagedFoldersRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this ListManagedFoldersRequest to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for ListManagedFoldersRequest
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }

                /** Properties of a ListManagedFoldersResponse. */
                interface IListManagedFoldersResponse {

                    /** ListManagedFoldersResponse managedFolders */
                    managedFolders?: (google.storage.control.v2.IManagedFolder[]|null);

                    /** ListManagedFoldersResponse nextPageToken */
                    nextPageToken?: (string|null);
                }

                /** Represents a ListManagedFoldersResponse. */
                class ListManagedFoldersResponse implements IListManagedFoldersResponse {

                    /**
                     * Constructs a new ListManagedFoldersResponse.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: google.storage.control.v2.IListManagedFoldersResponse);

                    /** ListManagedFoldersResponse managedFolders. */
                    public managedFolders: google.storage.control.v2.IManagedFolder[];

                    /** ListManagedFoldersResponse nextPageToken. */
                    public nextPageToken: string;

                    /**
                     * Creates a new ListManagedFoldersResponse instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns ListManagedFoldersResponse instance
                     */
                    public static create(properties?: google.storage.control.v2.IListManagedFoldersResponse): google.storage.control.v2.ListManagedFoldersResponse;

                    /**
                     * Encodes the specified ListManagedFoldersResponse message. Does not implicitly {@link google.storage.control.v2.ListManagedFoldersResponse.verify|verify} messages.
                     * @param message ListManagedFoldersResponse message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: google.storage.control.v2.IListManagedFoldersResponse, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified ListManagedFoldersResponse message, length delimited. Does not implicitly {@link google.storage.control.v2.ListManagedFoldersResponse.verify|verify} messages.
                     * @param message ListManagedFoldersResponse message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: google.storage.control.v2.IListManagedFoldersResponse, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes a ListManagedFoldersResponse message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns ListManagedFoldersResponse
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.control.v2.ListManagedFoldersResponse;

                    /**
                     * Decodes a ListManagedFoldersResponse message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns ListManagedFoldersResponse
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.control.v2.ListManagedFoldersResponse;

                    /**
                     * Verifies a ListManagedFoldersResponse message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates a ListManagedFoldersResponse message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns ListManagedFoldersResponse
                     */
                    public static fromObject(object: { [k: string]: any }): google.storage.control.v2.ListManagedFoldersResponse;

                    /**
                     * Creates a plain object from a ListManagedFoldersResponse message. Also converts values to other types if specified.
                     * @param message ListManagedFoldersResponse
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: google.storage.control.v2.ListManagedFoldersResponse, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this ListManagedFoldersResponse to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for ListManagedFoldersResponse
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }

                /** Properties of a CreateAnywhereCacheMetadata. */
                interface ICreateAnywhereCacheMetadata {

                    /** CreateAnywhereCacheMetadata commonMetadata */
                    commonMetadata?: (google.storage.control.v2.ICommonLongRunningOperationMetadata|null);

                    /** CreateAnywhereCacheMetadata anywhereCacheId */
                    anywhereCacheId?: (string|null);

                    /** CreateAnywhereCacheMetadata zone */
                    zone?: (string|null);

                    /** CreateAnywhereCacheMetadata ttl */
                    ttl?: (google.protobuf.IDuration|null);

                    /** CreateAnywhereCacheMetadata admissionPolicy */
                    admissionPolicy?: (string|null);
                }

                /** Represents a CreateAnywhereCacheMetadata. */
                class CreateAnywhereCacheMetadata implements ICreateAnywhereCacheMetadata {

                    /**
                     * Constructs a new CreateAnywhereCacheMetadata.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: google.storage.control.v2.ICreateAnywhereCacheMetadata);

                    /** CreateAnywhereCacheMetadata commonMetadata. */
                    public commonMetadata?: (google.storage.control.v2.ICommonLongRunningOperationMetadata|null);

                    /** CreateAnywhereCacheMetadata anywhereCacheId. */
                    public anywhereCacheId?: (string|null);

                    /** CreateAnywhereCacheMetadata zone. */
                    public zone?: (string|null);

                    /** CreateAnywhereCacheMetadata ttl. */
                    public ttl?: (google.protobuf.IDuration|null);

                    /** CreateAnywhereCacheMetadata admissionPolicy. */
                    public admissionPolicy?: (string|null);

                    /**
                     * Creates a new CreateAnywhereCacheMetadata instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns CreateAnywhereCacheMetadata instance
                     */
                    public static create(properties?: google.storage.control.v2.ICreateAnywhereCacheMetadata): google.storage.control.v2.CreateAnywhereCacheMetadata;

                    /**
                     * Encodes the specified CreateAnywhereCacheMetadata message. Does not implicitly {@link google.storage.control.v2.CreateAnywhereCacheMetadata.verify|verify} messages.
                     * @param message CreateAnywhereCacheMetadata message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: google.storage.control.v2.ICreateAnywhereCacheMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified CreateAnywhereCacheMetadata message, length delimited. Does not implicitly {@link google.storage.control.v2.CreateAnywhereCacheMetadata.verify|verify} messages.
                     * @param message CreateAnywhereCacheMetadata message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: google.storage.control.v2.ICreateAnywhereCacheMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes a CreateAnywhereCacheMetadata message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns CreateAnywhereCacheMetadata
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.control.v2.CreateAnywhereCacheMetadata;

                    /**
                     * Decodes a CreateAnywhereCacheMetadata message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns CreateAnywhereCacheMetadata
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.control.v2.CreateAnywhereCacheMetadata;

                    /**
                     * Verifies a CreateAnywhereCacheMetadata message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates a CreateAnywhereCacheMetadata message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns CreateAnywhereCacheMetadata
                     */
                    public static fromObject(object: { [k: string]: any }): google.storage.control.v2.CreateAnywhereCacheMetadata;

                    /**
                     * Creates a plain object from a CreateAnywhereCacheMetadata message. Also converts values to other types if specified.
                     * @param message CreateAnywhereCacheMetadata
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: google.storage.control.v2.CreateAnywhereCacheMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this CreateAnywhereCacheMetadata to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for CreateAnywhereCacheMetadata
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }

                /** Properties of an UpdateAnywhereCacheMetadata. */
                interface IUpdateAnywhereCacheMetadata {

                    /** UpdateAnywhereCacheMetadata commonMetadata */
                    commonMetadata?: (google.storage.control.v2.ICommonLongRunningOperationMetadata|null);

                    /** UpdateAnywhereCacheMetadata anywhereCacheId */
                    anywhereCacheId?: (string|null);

                    /** UpdateAnywhereCacheMetadata zone */
                    zone?: (string|null);

                    /** UpdateAnywhereCacheMetadata ttl */
                    ttl?: (google.protobuf.IDuration|null);

                    /** UpdateAnywhereCacheMetadata admissionPolicy */
                    admissionPolicy?: (string|null);
                }

                /** Represents an UpdateAnywhereCacheMetadata. */
                class UpdateAnywhereCacheMetadata implements IUpdateAnywhereCacheMetadata {

                    /**
                     * Constructs a new UpdateAnywhereCacheMetadata.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: google.storage.control.v2.IUpdateAnywhereCacheMetadata);

                    /** UpdateAnywhereCacheMetadata commonMetadata. */
                    public commonMetadata?: (google.storage.control.v2.ICommonLongRunningOperationMetadata|null);

                    /** UpdateAnywhereCacheMetadata anywhereCacheId. */
                    public anywhereCacheId?: (string|null);

                    /** UpdateAnywhereCacheMetadata zone. */
                    public zone?: (string|null);

                    /** UpdateAnywhereCacheMetadata ttl. */
                    public ttl?: (google.protobuf.IDuration|null);

                    /** UpdateAnywhereCacheMetadata admissionPolicy. */
                    public admissionPolicy?: (string|null);

                    /**
                     * Creates a new UpdateAnywhereCacheMetadata instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns UpdateAnywhereCacheMetadata instance
                     */
                    public static create(properties?: google.storage.control.v2.IUpdateAnywhereCacheMetadata): google.storage.control.v2.UpdateAnywhereCacheMetadata;

                    /**
                     * Encodes the specified UpdateAnywhereCacheMetadata message. Does not implicitly {@link google.storage.control.v2.UpdateAnywhereCacheMetadata.verify|verify} messages.
                     * @param message UpdateAnywhereCacheMetadata message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: google.storage.control.v2.IUpdateAnywhereCacheMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified UpdateAnywhereCacheMetadata message, length delimited. Does not implicitly {@link google.storage.control.v2.UpdateAnywhereCacheMetadata.verify|verify} messages.
                     * @param message UpdateAnywhereCacheMetadata message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: google.storage.control.v2.IUpdateAnywhereCacheMetadata, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes an UpdateAnywhereCacheMetadata message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns UpdateAnywhereCacheMetadata
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.control.v2.UpdateAnywhereCacheMetadata;

                    /**
                     * Decodes an UpdateAnywhereCacheMetadata message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns UpdateAnywhereCacheMetadata
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.control.v2.UpdateAnywhereCacheMetadata;

                    /**
                     * Verifies an UpdateAnywhereCacheMetadata message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates an UpdateAnywhereCacheMetadata message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns UpdateAnywhereCacheMetadata
                     */
                    public static fromObject(object: { [k: string]: any }): google.storage.control.v2.UpdateAnywhereCacheMetadata;

                    /**
                     * Creates a plain object from an UpdateAnywhereCacheMetadata message. Also converts values to other types if specified.
                     * @param message UpdateAnywhereCacheMetadata
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: google.storage.control.v2.UpdateAnywhereCacheMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this UpdateAnywhereCacheMetadata to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for UpdateAnywhereCacheMetadata
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }

                /** Properties of an AnywhereCache. */
                interface IAnywhereCache {

                    /** AnywhereCache name */
                    name?: (string|null);

                    /** AnywhereCache zone */
                    zone?: (string|null);

                    /** AnywhereCache ttl */
                    ttl?: (google.protobuf.IDuration|null);

                    /** AnywhereCache admissionPolicy */
                    admissionPolicy?: (string|null);

                    /** AnywhereCache state */
                    state?: (string|null);

                    /** AnywhereCache createTime */
                    createTime?: (google.protobuf.ITimestamp|null);

                    /** AnywhereCache updateTime */
                    updateTime?: (google.protobuf.ITimestamp|null);

                    /** AnywhereCache pendingUpdate */
                    pendingUpdate?: (boolean|null);
                }

                /** Represents an AnywhereCache. */
                class AnywhereCache implements IAnywhereCache {

                    /**
                     * Constructs a new AnywhereCache.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: google.storage.control.v2.IAnywhereCache);

                    /** AnywhereCache name. */
                    public name: string;

                    /** AnywhereCache zone. */
                    public zone: string;

                    /** AnywhereCache ttl. */
                    public ttl?: (google.protobuf.IDuration|null);

                    /** AnywhereCache admissionPolicy. */
                    public admissionPolicy: string;

                    /** AnywhereCache state. */
                    public state: string;

                    /** AnywhereCache createTime. */
                    public createTime?: (google.protobuf.ITimestamp|null);

                    /** AnywhereCache updateTime. */
                    public updateTime?: (google.protobuf.ITimestamp|null);

                    /** AnywhereCache pendingUpdate. */
                    public pendingUpdate: boolean;

                    /**
                     * Creates a new AnywhereCache instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns AnywhereCache instance
                     */
                    public static create(properties?: google.storage.control.v2.IAnywhereCache): google.storage.control.v2.AnywhereCache;

                    /**
                     * Encodes the specified AnywhereCache message. Does not implicitly {@link google.storage.control.v2.AnywhereCache.verify|verify} messages.
                     * @param message AnywhereCache message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: google.storage.control.v2.IAnywhereCache, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified AnywhereCache message, length delimited. Does not implicitly {@link google.storage.control.v2.AnywhereCache.verify|verify} messages.
                     * @param message AnywhereCache message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: google.storage.control.v2.IAnywhereCache, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes an AnywhereCache message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns AnywhereCache
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.control.v2.AnywhereCache;

                    /**
                     * Decodes an AnywhereCache message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns AnywhereCache
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.control.v2.AnywhereCache;

                    /**
                     * Verifies an AnywhereCache message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates an AnywhereCache message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns AnywhereCache
                     */
                    public static fromObject(object: { [k: string]: any }): google.storage.control.v2.AnywhereCache;

                    /**
                     * Creates a plain object from an AnywhereCache message. Also converts values to other types if specified.
                     * @param message AnywhereCache
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: google.storage.control.v2.AnywhereCache, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this AnywhereCache to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for AnywhereCache
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }

                /** Properties of a CreateAnywhereCacheRequest. */
                interface ICreateAnywhereCacheRequest {

                    /** CreateAnywhereCacheRequest parent */
                    parent?: (string|null);

                    /** CreateAnywhereCacheRequest anywhereCache */
                    anywhereCache?: (google.storage.control.v2.IAnywhereCache|null);

                    /** CreateAnywhereCacheRequest requestId */
                    requestId?: (string|null);
                }

                /** Represents a CreateAnywhereCacheRequest. */
                class CreateAnywhereCacheRequest implements ICreateAnywhereCacheRequest {

                    /**
                     * Constructs a new CreateAnywhereCacheRequest.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: google.storage.control.v2.ICreateAnywhereCacheRequest);

                    /** CreateAnywhereCacheRequest parent. */
                    public parent: string;

                    /** CreateAnywhereCacheRequest anywhereCache. */
                    public anywhereCache?: (google.storage.control.v2.IAnywhereCache|null);

                    /** CreateAnywhereCacheRequest requestId. */
                    public requestId: string;

                    /**
                     * Creates a new CreateAnywhereCacheRequest instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns CreateAnywhereCacheRequest instance
                     */
                    public static create(properties?: google.storage.control.v2.ICreateAnywhereCacheRequest): google.storage.control.v2.CreateAnywhereCacheRequest;

                    /**
                     * Encodes the specified CreateAnywhereCacheRequest message. Does not implicitly {@link google.storage.control.v2.CreateAnywhereCacheRequest.verify|verify} messages.
                     * @param message CreateAnywhereCacheRequest message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: google.storage.control.v2.ICreateAnywhereCacheRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified CreateAnywhereCacheRequest message, length delimited. Does not implicitly {@link google.storage.control.v2.CreateAnywhereCacheRequest.verify|verify} messages.
                     * @param message CreateAnywhereCacheRequest message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: google.storage.control.v2.ICreateAnywhereCacheRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes a CreateAnywhereCacheRequest message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns CreateAnywhereCacheRequest
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.control.v2.CreateAnywhereCacheRequest;

                    /**
                     * Decodes a CreateAnywhereCacheRequest message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns CreateAnywhereCacheRequest
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.control.v2.CreateAnywhereCacheRequest;

                    /**
                     * Verifies a CreateAnywhereCacheRequest message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates a CreateAnywhereCacheRequest message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns CreateAnywhereCacheRequest
                     */
                    public static fromObject(object: { [k: string]: any }): google.storage.control.v2.CreateAnywhereCacheRequest;

                    /**
                     * Creates a plain object from a CreateAnywhereCacheRequest message. Also converts values to other types if specified.
                     * @param message CreateAnywhereCacheRequest
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: google.storage.control.v2.CreateAnywhereCacheRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this CreateAnywhereCacheRequest to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for CreateAnywhereCacheRequest
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }

                /** Properties of an UpdateAnywhereCacheRequest. */
                interface IUpdateAnywhereCacheRequest {

                    /** UpdateAnywhereCacheRequest anywhereCache */
                    anywhereCache?: (google.storage.control.v2.IAnywhereCache|null);

                    /** UpdateAnywhereCacheRequest updateMask */
                    updateMask?: (google.protobuf.IFieldMask|null);

                    /** UpdateAnywhereCacheRequest requestId */
                    requestId?: (string|null);
                }

                /** Represents an UpdateAnywhereCacheRequest. */
                class UpdateAnywhereCacheRequest implements IUpdateAnywhereCacheRequest {

                    /**
                     * Constructs a new UpdateAnywhereCacheRequest.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: google.storage.control.v2.IUpdateAnywhereCacheRequest);

                    /** UpdateAnywhereCacheRequest anywhereCache. */
                    public anywhereCache?: (google.storage.control.v2.IAnywhereCache|null);

                    /** UpdateAnywhereCacheRequest updateMask. */
                    public updateMask?: (google.protobuf.IFieldMask|null);

                    /** UpdateAnywhereCacheRequest requestId. */
                    public requestId: string;

                    /**
                     * Creates a new UpdateAnywhereCacheRequest instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns UpdateAnywhereCacheRequest instance
                     */
                    public static create(properties?: google.storage.control.v2.IUpdateAnywhereCacheRequest): google.storage.control.v2.UpdateAnywhereCacheRequest;

                    /**
                     * Encodes the specified UpdateAnywhereCacheRequest message. Does not implicitly {@link google.storage.control.v2.UpdateAnywhereCacheRequest.verify|verify} messages.
                     * @param message UpdateAnywhereCacheRequest message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: google.storage.control.v2.IUpdateAnywhereCacheRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified UpdateAnywhereCacheRequest message, length delimited. Does not implicitly {@link google.storage.control.v2.UpdateAnywhereCacheRequest.verify|verify} messages.
                     * @param message UpdateAnywhereCacheRequest message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: google.storage.control.v2.IUpdateAnywhereCacheRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes an UpdateAnywhereCacheRequest message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns UpdateAnywhereCacheRequest
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.control.v2.UpdateAnywhereCacheRequest;

                    /**
                     * Decodes an UpdateAnywhereCacheRequest message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns UpdateAnywhereCacheRequest
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.control.v2.UpdateAnywhereCacheRequest;

                    /**
                     * Verifies an UpdateAnywhereCacheRequest message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates an UpdateAnywhereCacheRequest message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns UpdateAnywhereCacheRequest
                     */
                    public static fromObject(object: { [k: string]: any }): google.storage.control.v2.UpdateAnywhereCacheRequest;

                    /**
                     * Creates a plain object from an UpdateAnywhereCacheRequest message. Also converts values to other types if specified.
                     * @param message UpdateAnywhereCacheRequest
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: google.storage.control.v2.UpdateAnywhereCacheRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this UpdateAnywhereCacheRequest to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for UpdateAnywhereCacheRequest
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }

                /** Properties of a DisableAnywhereCacheRequest. */
                interface IDisableAnywhereCacheRequest {

                    /** DisableAnywhereCacheRequest name */
                    name?: (string|null);

                    /** DisableAnywhereCacheRequest requestId */
                    requestId?: (string|null);
                }

                /** Represents a DisableAnywhereCacheRequest. */
                class DisableAnywhereCacheRequest implements IDisableAnywhereCacheRequest {

                    /**
                     * Constructs a new DisableAnywhereCacheRequest.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: google.storage.control.v2.IDisableAnywhereCacheRequest);

                    /** DisableAnywhereCacheRequest name. */
                    public name: string;

                    /** DisableAnywhereCacheRequest requestId. */
                    public requestId: string;

                    /**
                     * Creates a new DisableAnywhereCacheRequest instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns DisableAnywhereCacheRequest instance
                     */
                    public static create(properties?: google.storage.control.v2.IDisableAnywhereCacheRequest): google.storage.control.v2.DisableAnywhereCacheRequest;

                    /**
                     * Encodes the specified DisableAnywhereCacheRequest message. Does not implicitly {@link google.storage.control.v2.DisableAnywhereCacheRequest.verify|verify} messages.
                     * @param message DisableAnywhereCacheRequest message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: google.storage.control.v2.IDisableAnywhereCacheRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified DisableAnywhereCacheRequest message, length delimited. Does not implicitly {@link google.storage.control.v2.DisableAnywhereCacheRequest.verify|verify} messages.
                     * @param message DisableAnywhereCacheRequest message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: google.storage.control.v2.IDisableAnywhereCacheRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes a DisableAnywhereCacheRequest message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns DisableAnywhereCacheRequest
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.control.v2.DisableAnywhereCacheRequest;

                    /**
                     * Decodes a DisableAnywhereCacheRequest message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns DisableAnywhereCacheRequest
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.control.v2.DisableAnywhereCacheRequest;

                    /**
                     * Verifies a DisableAnywhereCacheRequest message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates a DisableAnywhereCacheRequest message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns DisableAnywhereCacheRequest
                     */
                    public static fromObject(object: { [k: string]: any }): google.storage.control.v2.DisableAnywhereCacheRequest;

                    /**
                     * Creates a plain object from a DisableAnywhereCacheRequest message. Also converts values to other types if specified.
                     * @param message DisableAnywhereCacheRequest
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: google.storage.control.v2.DisableAnywhereCacheRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this DisableAnywhereCacheRequest to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for DisableAnywhereCacheRequest
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }

                /** Properties of a PauseAnywhereCacheRequest. */
                interface IPauseAnywhereCacheRequest {

                    /** PauseAnywhereCacheRequest name */
                    name?: (string|null);

                    /** PauseAnywhereCacheRequest requestId */
                    requestId?: (string|null);
                }

                /** Represents a PauseAnywhereCacheRequest. */
                class PauseAnywhereCacheRequest implements IPauseAnywhereCacheRequest {

                    /**
                     * Constructs a new PauseAnywhereCacheRequest.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: google.storage.control.v2.IPauseAnywhereCacheRequest);

                    /** PauseAnywhereCacheRequest name. */
                    public name: string;

                    /** PauseAnywhereCacheRequest requestId. */
                    public requestId: string;

                    /**
                     * Creates a new PauseAnywhereCacheRequest instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns PauseAnywhereCacheRequest instance
                     */
                    public static create(properties?: google.storage.control.v2.IPauseAnywhereCacheRequest): google.storage.control.v2.PauseAnywhereCacheRequest;

                    /**
                     * Encodes the specified PauseAnywhereCacheRequest message. Does not implicitly {@link google.storage.control.v2.PauseAnywhereCacheRequest.verify|verify} messages.
                     * @param message PauseAnywhereCacheRequest message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: google.storage.control.v2.IPauseAnywhereCacheRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified PauseAnywhereCacheRequest message, length delimited. Does not implicitly {@link google.storage.control.v2.PauseAnywhereCacheRequest.verify|verify} messages.
                     * @param message PauseAnywhereCacheRequest message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: google.storage.control.v2.IPauseAnywhereCacheRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes a PauseAnywhereCacheRequest message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns PauseAnywhereCacheRequest
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.control.v2.PauseAnywhereCacheRequest;

                    /**
                     * Decodes a PauseAnywhereCacheRequest message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns PauseAnywhereCacheRequest
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.control.v2.PauseAnywhereCacheRequest;

                    /**
                     * Verifies a PauseAnywhereCacheRequest message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates a PauseAnywhereCacheRequest message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns PauseAnywhereCacheRequest
                     */
                    public static fromObject(object: { [k: string]: any }): google.storage.control.v2.PauseAnywhereCacheRequest;

                    /**
                     * Creates a plain object from a PauseAnywhereCacheRequest message. Also converts values to other types if specified.
                     * @param message PauseAnywhereCacheRequest
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: google.storage.control.v2.PauseAnywhereCacheRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this PauseAnywhereCacheRequest to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for PauseAnywhereCacheRequest
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }

                /** Properties of a ResumeAnywhereCacheRequest. */
                interface IResumeAnywhereCacheRequest {

                    /** ResumeAnywhereCacheRequest name */
                    name?: (string|null);

                    /** ResumeAnywhereCacheRequest requestId */
                    requestId?: (string|null);
                }

                /** Represents a ResumeAnywhereCacheRequest. */
                class ResumeAnywhereCacheRequest implements IResumeAnywhereCacheRequest {

                    /**
                     * Constructs a new ResumeAnywhereCacheRequest.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: google.storage.control.v2.IResumeAnywhereCacheRequest);

                    /** ResumeAnywhereCacheRequest name. */
                    public name: string;

                    /** ResumeAnywhereCacheRequest requestId. */
                    public requestId: string;

                    /**
                     * Creates a new ResumeAnywhereCacheRequest instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns ResumeAnywhereCacheRequest instance
                     */
                    public static create(properties?: google.storage.control.v2.IResumeAnywhereCacheRequest): google.storage.control.v2.ResumeAnywhereCacheRequest;

                    /**
                     * Encodes the specified ResumeAnywhereCacheRequest message. Does not implicitly {@link google.storage.control.v2.ResumeAnywhereCacheRequest.verify|verify} messages.
                     * @param message ResumeAnywhereCacheRequest message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: google.storage.control.v2.IResumeAnywhereCacheRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified ResumeAnywhereCacheRequest message, length delimited. Does not implicitly {@link google.storage.control.v2.ResumeAnywhereCacheRequest.verify|verify} messages.
                     * @param message ResumeAnywhereCacheRequest message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: google.storage.control.v2.IResumeAnywhereCacheRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes a ResumeAnywhereCacheRequest message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns ResumeAnywhereCacheRequest
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.control.v2.ResumeAnywhereCacheRequest;

                    /**
                     * Decodes a ResumeAnywhereCacheRequest message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns ResumeAnywhereCacheRequest
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.control.v2.ResumeAnywhereCacheRequest;

                    /**
                     * Verifies a ResumeAnywhereCacheRequest message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates a ResumeAnywhereCacheRequest message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns ResumeAnywhereCacheRequest
                     */
                    public static fromObject(object: { [k: string]: any }): google.storage.control.v2.ResumeAnywhereCacheRequest;

                    /**
                     * Creates a plain object from a ResumeAnywhereCacheRequest message. Also converts values to other types if specified.
                     * @param message ResumeAnywhereCacheRequest
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: google.storage.control.v2.ResumeAnywhereCacheRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this ResumeAnywhereCacheRequest to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for ResumeAnywhereCacheRequest
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }

                /** Properties of a GetAnywhereCacheRequest. */
                interface IGetAnywhereCacheRequest {

                    /** GetAnywhereCacheRequest name */
                    name?: (string|null);

                    /** GetAnywhereCacheRequest requestId */
                    requestId?: (string|null);
                }

                /** Represents a GetAnywhereCacheRequest. */
                class GetAnywhereCacheRequest implements IGetAnywhereCacheRequest {

                    /**
                     * Constructs a new GetAnywhereCacheRequest.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: google.storage.control.v2.IGetAnywhereCacheRequest);

                    /** GetAnywhereCacheRequest name. */
                    public name: string;

                    /** GetAnywhereCacheRequest requestId. */
                    public requestId: string;

                    /**
                     * Creates a new GetAnywhereCacheRequest instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns GetAnywhereCacheRequest instance
                     */
                    public static create(properties?: google.storage.control.v2.IGetAnywhereCacheRequest): google.storage.control.v2.GetAnywhereCacheRequest;

                    /**
                     * Encodes the specified GetAnywhereCacheRequest message. Does not implicitly {@link google.storage.control.v2.GetAnywhereCacheRequest.verify|verify} messages.
                     * @param message GetAnywhereCacheRequest message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: google.storage.control.v2.IGetAnywhereCacheRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified GetAnywhereCacheRequest message, length delimited. Does not implicitly {@link google.storage.control.v2.GetAnywhereCacheRequest.verify|verify} messages.
                     * @param message GetAnywhereCacheRequest message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: google.storage.control.v2.IGetAnywhereCacheRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes a GetAnywhereCacheRequest message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns GetAnywhereCacheRequest
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.control.v2.GetAnywhereCacheRequest;

                    /**
                     * Decodes a GetAnywhereCacheRequest message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns GetAnywhereCacheRequest
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.control.v2.GetAnywhereCacheRequest;

                    /**
                     * Verifies a GetAnywhereCacheRequest message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates a GetAnywhereCacheRequest message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns GetAnywhereCacheRequest
                     */
                    public static fromObject(object: { [k: string]: any }): google.storage.control.v2.GetAnywhereCacheRequest;

                    /**
                     * Creates a plain object from a GetAnywhereCacheRequest message. Also converts values to other types if specified.
                     * @param message GetAnywhereCacheRequest
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: google.storage.control.v2.GetAnywhereCacheRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this GetAnywhereCacheRequest to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for GetAnywhereCacheRequest
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }

                /** Properties of a ListAnywhereCachesRequest. */
                interface IListAnywhereCachesRequest {

                    /** ListAnywhereCachesRequest parent */
                    parent?: (string|null);

                    /** ListAnywhereCachesRequest pageSize */
                    pageSize?: (number|null);

                    /** ListAnywhereCachesRequest pageToken */
                    pageToken?: (string|null);

                    /** ListAnywhereCachesRequest requestId */
                    requestId?: (string|null);
                }

                /** Represents a ListAnywhereCachesRequest. */
                class ListAnywhereCachesRequest implements IListAnywhereCachesRequest {

                    /**
                     * Constructs a new ListAnywhereCachesRequest.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: google.storage.control.v2.IListAnywhereCachesRequest);

                    /** ListAnywhereCachesRequest parent. */
                    public parent: string;

                    /** ListAnywhereCachesRequest pageSize. */
                    public pageSize: number;

                    /** ListAnywhereCachesRequest pageToken. */
                    public pageToken: string;

                    /** ListAnywhereCachesRequest requestId. */
                    public requestId: string;

                    /**
                     * Creates a new ListAnywhereCachesRequest instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns ListAnywhereCachesRequest instance
                     */
                    public static create(properties?: google.storage.control.v2.IListAnywhereCachesRequest): google.storage.control.v2.ListAnywhereCachesRequest;

                    /**
                     * Encodes the specified ListAnywhereCachesRequest message. Does not implicitly {@link google.storage.control.v2.ListAnywhereCachesRequest.verify|verify} messages.
                     * @param message ListAnywhereCachesRequest message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: google.storage.control.v2.IListAnywhereCachesRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified ListAnywhereCachesRequest message, length delimited. Does not implicitly {@link google.storage.control.v2.ListAnywhereCachesRequest.verify|verify} messages.
                     * @param message ListAnywhereCachesRequest message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: google.storage.control.v2.IListAnywhereCachesRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes a ListAnywhereCachesRequest message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns ListAnywhereCachesRequest
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.control.v2.ListAnywhereCachesRequest;

                    /**
                     * Decodes a ListAnywhereCachesRequest message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns ListAnywhereCachesRequest
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.control.v2.ListAnywhereCachesRequest;

                    /**
                     * Verifies a ListAnywhereCachesRequest message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates a ListAnywhereCachesRequest message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns ListAnywhereCachesRequest
                     */
                    public static fromObject(object: { [k: string]: any }): google.storage.control.v2.ListAnywhereCachesRequest;

                    /**
                     * Creates a plain object from a ListAnywhereCachesRequest message. Also converts values to other types if specified.
                     * @param message ListAnywhereCachesRequest
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: google.storage.control.v2.ListAnywhereCachesRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this ListAnywhereCachesRequest to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for ListAnywhereCachesRequest
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }

                /** Properties of a ListAnywhereCachesResponse. */
                interface IListAnywhereCachesResponse {

                    /** ListAnywhereCachesResponse anywhereCaches */
                    anywhereCaches?: (google.storage.control.v2.IAnywhereCache[]|null);

                    /** ListAnywhereCachesResponse nextPageToken */
                    nextPageToken?: (string|null);
                }

                /** Represents a ListAnywhereCachesResponse. */
                class ListAnywhereCachesResponse implements IListAnywhereCachesResponse {

                    /**
                     * Constructs a new ListAnywhereCachesResponse.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: google.storage.control.v2.IListAnywhereCachesResponse);

                    /** ListAnywhereCachesResponse anywhereCaches. */
                    public anywhereCaches: google.storage.control.v2.IAnywhereCache[];

                    /** ListAnywhereCachesResponse nextPageToken. */
                    public nextPageToken: string;

                    /**
                     * Creates a new ListAnywhereCachesResponse instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns ListAnywhereCachesResponse instance
                     */
                    public static create(properties?: google.storage.control.v2.IListAnywhereCachesResponse): google.storage.control.v2.ListAnywhereCachesResponse;

                    /**
                     * Encodes the specified ListAnywhereCachesResponse message. Does not implicitly {@link google.storage.control.v2.ListAnywhereCachesResponse.verify|verify} messages.
                     * @param message ListAnywhereCachesResponse message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: google.storage.control.v2.IListAnywhereCachesResponse, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified ListAnywhereCachesResponse message, length delimited. Does not implicitly {@link google.storage.control.v2.ListAnywhereCachesResponse.verify|verify} messages.
                     * @param message ListAnywhereCachesResponse message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: google.storage.control.v2.IListAnywhereCachesResponse, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes a ListAnywhereCachesResponse message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns ListAnywhereCachesResponse
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.control.v2.ListAnywhereCachesResponse;

                    /**
                     * Decodes a ListAnywhereCachesResponse message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns ListAnywhereCachesResponse
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.control.v2.ListAnywhereCachesResponse;

                    /**
                     * Verifies a ListAnywhereCachesResponse message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates a ListAnywhereCachesResponse message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns ListAnywhereCachesResponse
                     */
                    public static fromObject(object: { [k: string]: any }): google.storage.control.v2.ListAnywhereCachesResponse;

                    /**
                     * Creates a plain object from a ListAnywhereCachesResponse message. Also converts values to other types if specified.
                     * @param message ListAnywhereCachesResponse
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: google.storage.control.v2.ListAnywhereCachesResponse, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this ListAnywhereCachesResponse to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for ListAnywhereCachesResponse
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }

                /** Properties of an IntelligenceConfig. */
                interface IIntelligenceConfig {

                    /** IntelligenceConfig name */
                    name?: (string|null);

                    /** IntelligenceConfig editionConfig */
                    editionConfig?: (google.storage.control.v2.IntelligenceConfig.EditionConfig|keyof typeof google.storage.control.v2.IntelligenceConfig.EditionConfig|null);

                    /** IntelligenceConfig updateTime */
                    updateTime?: (google.protobuf.ITimestamp|null);

                    /** IntelligenceConfig filter */
                    filter?: (google.storage.control.v2.IntelligenceConfig.IFilter|null);

                    /** IntelligenceConfig effectiveIntelligenceConfig */
                    effectiveIntelligenceConfig?: (google.storage.control.v2.IntelligenceConfig.IEffectiveIntelligenceConfig|null);

                    /** IntelligenceConfig trialConfig */
                    trialConfig?: (google.storage.control.v2.IntelligenceConfig.ITrialConfig|null);
                }

                /** Represents an IntelligenceConfig. */
                class IntelligenceConfig implements IIntelligenceConfig {

                    /**
                     * Constructs a new IntelligenceConfig.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: google.storage.control.v2.IIntelligenceConfig);

                    /** IntelligenceConfig name. */
                    public name: string;

                    /** IntelligenceConfig editionConfig. */
                    public editionConfig: (google.storage.control.v2.IntelligenceConfig.EditionConfig|keyof typeof google.storage.control.v2.IntelligenceConfig.EditionConfig);

                    /** IntelligenceConfig updateTime. */
                    public updateTime?: (google.protobuf.ITimestamp|null);

                    /** IntelligenceConfig filter. */
                    public filter?: (google.storage.control.v2.IntelligenceConfig.IFilter|null);

                    /** IntelligenceConfig effectiveIntelligenceConfig. */
                    public effectiveIntelligenceConfig?: (google.storage.control.v2.IntelligenceConfig.IEffectiveIntelligenceConfig|null);

                    /** IntelligenceConfig trialConfig. */
                    public trialConfig?: (google.storage.control.v2.IntelligenceConfig.ITrialConfig|null);

                    /**
                     * Creates a new IntelligenceConfig instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns IntelligenceConfig instance
                     */
                    public static create(properties?: google.storage.control.v2.IIntelligenceConfig): google.storage.control.v2.IntelligenceConfig;

                    /**
                     * Encodes the specified IntelligenceConfig message. Does not implicitly {@link google.storage.control.v2.IntelligenceConfig.verify|verify} messages.
                     * @param message IntelligenceConfig message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: google.storage.control.v2.IIntelligenceConfig, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified IntelligenceConfig message, length delimited. Does not implicitly {@link google.storage.control.v2.IntelligenceConfig.verify|verify} messages.
                     * @param message IntelligenceConfig message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: google.storage.control.v2.IIntelligenceConfig, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes an IntelligenceConfig message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns IntelligenceConfig
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.control.v2.IntelligenceConfig;

                    /**
                     * Decodes an IntelligenceConfig message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns IntelligenceConfig
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.control.v2.IntelligenceConfig;

                    /**
                     * Verifies an IntelligenceConfig message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates an IntelligenceConfig message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns IntelligenceConfig
                     */
                    public static fromObject(object: { [k: string]: any }): google.storage.control.v2.IntelligenceConfig;

                    /**
                     * Creates a plain object from an IntelligenceConfig message. Also converts values to other types if specified.
                     * @param message IntelligenceConfig
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: google.storage.control.v2.IntelligenceConfig, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this IntelligenceConfig to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for IntelligenceConfig
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }

                namespace IntelligenceConfig {

                    /** EditionConfig enum. */
                    enum EditionConfig {
                        EDITION_CONFIG_UNSPECIFIED = 0,
                        INHERIT = 1,
                        DISABLED = 2,
                        STANDARD = 3,
                        TRIAL = 5
                    }

                    /** Properties of a Filter. */
                    interface IFilter {

                        /** Filter includedCloudStorageLocations */
                        includedCloudStorageLocations?: (google.storage.control.v2.IntelligenceConfig.Filter.ICloudStorageLocations|null);

                        /** Filter excludedCloudStorageLocations */
                        excludedCloudStorageLocations?: (google.storage.control.v2.IntelligenceConfig.Filter.ICloudStorageLocations|null);

                        /** Filter includedCloudStorageBuckets */
                        includedCloudStorageBuckets?: (google.storage.control.v2.IntelligenceConfig.Filter.ICloudStorageBuckets|null);

                        /** Filter excludedCloudStorageBuckets */
                        excludedCloudStorageBuckets?: (google.storage.control.v2.IntelligenceConfig.Filter.ICloudStorageBuckets|null);
                    }

                    /** Represents a Filter. */
                    class Filter implements IFilter {

                        /**
                         * Constructs a new Filter.
                         * @param [properties] Properties to set
                         */
                        constructor(properties?: google.storage.control.v2.IntelligenceConfig.IFilter);

                        /** Filter includedCloudStorageLocations. */
                        public includedCloudStorageLocations?: (google.storage.control.v2.IntelligenceConfig.Filter.ICloudStorageLocations|null);

                        /** Filter excludedCloudStorageLocations. */
                        public excludedCloudStorageLocations?: (google.storage.control.v2.IntelligenceConfig.Filter.ICloudStorageLocations|null);

                        /** Filter includedCloudStorageBuckets. */
                        public includedCloudStorageBuckets?: (google.storage.control.v2.IntelligenceConfig.Filter.ICloudStorageBuckets|null);

                        /** Filter excludedCloudStorageBuckets. */
                        public excludedCloudStorageBuckets?: (google.storage.control.v2.IntelligenceConfig.Filter.ICloudStorageBuckets|null);

                        /** Filter cloudStorageLocations. */
                        public cloudStorageLocations?: ("includedCloudStorageLocations"|"excludedCloudStorageLocations");

                        /** Filter cloudStorageBuckets. */
                        public cloudStorageBuckets?: ("includedCloudStorageBuckets"|"excludedCloudStorageBuckets");

                        /**
                         * Creates a new Filter instance using the specified properties.
                         * @param [properties] Properties to set
                         * @returns Filter instance
                         */
                        public static create(properties?: google.storage.control.v2.IntelligenceConfig.IFilter): google.storage.control.v2.IntelligenceConfig.Filter;

                        /**
                         * Encodes the specified Filter message. Does not implicitly {@link google.storage.control.v2.IntelligenceConfig.Filter.verify|verify} messages.
                         * @param message Filter message or plain object to encode
                         * @param [writer] Writer to encode to
                         * @returns Writer
                         */
                        public static encode(message: google.storage.control.v2.IntelligenceConfig.IFilter, writer?: $protobuf.Writer): $protobuf.Writer;

                        /**
                         * Encodes the specified Filter message, length delimited. Does not implicitly {@link google.storage.control.v2.IntelligenceConfig.Filter.verify|verify} messages.
                         * @param message Filter message or plain object to encode
                         * @param [writer] Writer to encode to
                         * @returns Writer
                         */
                        public static encodeDelimited(message: google.storage.control.v2.IntelligenceConfig.IFilter, writer?: $protobuf.Writer): $protobuf.Writer;

                        /**
                         * Decodes a Filter message from the specified reader or buffer.
                         * @param reader Reader or buffer to decode from
                         * @param [length] Message length if known beforehand
                         * @returns Filter
                         * @throws {Error} If the payload is not a reader or valid buffer
                         * @throws {$protobuf.util.ProtocolError} If required fields are missing
                         */
                        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.control.v2.IntelligenceConfig.Filter;

                        /**
                         * Decodes a Filter message from the specified reader or buffer, length delimited.
                         * @param reader Reader or buffer to decode from
                         * @returns Filter
                         * @throws {Error} If the payload is not a reader or valid buffer
                         * @throws {$protobuf.util.ProtocolError} If required fields are missing
                         */
                        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.control.v2.IntelligenceConfig.Filter;

                        /**
                         * Verifies a Filter message.
                         * @param message Plain object to verify
                         * @returns `null` if valid, otherwise the reason why it is not
                         */
                        public static verify(message: { [k: string]: any }): (string|null);

                        /**
                         * Creates a Filter message from a plain object. Also converts values to their respective internal types.
                         * @param object Plain object
                         * @returns Filter
                         */
                        public static fromObject(object: { [k: string]: any }): google.storage.control.v2.IntelligenceConfig.Filter;

                        /**
                         * Creates a plain object from a Filter message. Also converts values to other types if specified.
                         * @param message Filter
                         * @param [options] Conversion options
                         * @returns Plain object
                         */
                        public static toObject(message: google.storage.control.v2.IntelligenceConfig.Filter, options?: $protobuf.IConversionOptions): { [k: string]: any };

                        /**
                         * Converts this Filter to JSON.
                         * @returns JSON object
                         */
                        public toJSON(): { [k: string]: any };

                        /**
                         * Gets the default type url for Filter
                         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                         * @returns The default type url
                         */
                        public static getTypeUrl(typeUrlPrefix?: string): string;
                    }

                    namespace Filter {

                        /** Properties of a CloudStorageLocations. */
                        interface ICloudStorageLocations {

                            /** CloudStorageLocations locations */
                            locations?: (string[]|null);
                        }

                        /** Represents a CloudStorageLocations. */
                        class CloudStorageLocations implements ICloudStorageLocations {

                            /**
                             * Constructs a new CloudStorageLocations.
                             * @param [properties] Properties to set
                             */
                            constructor(properties?: google.storage.control.v2.IntelligenceConfig.Filter.ICloudStorageLocations);

                            /** CloudStorageLocations locations. */
                            public locations: string[];

                            /**
                             * Creates a new CloudStorageLocations instance using the specified properties.
                             * @param [properties] Properties to set
                             * @returns CloudStorageLocations instance
                             */
                            public static create(properties?: google.storage.control.v2.IntelligenceConfig.Filter.ICloudStorageLocations): google.storage.control.v2.IntelligenceConfig.Filter.CloudStorageLocations;

                            /**
                             * Encodes the specified CloudStorageLocations message. Does not implicitly {@link google.storage.control.v2.IntelligenceConfig.Filter.CloudStorageLocations.verify|verify} messages.
                             * @param message CloudStorageLocations message or plain object to encode
                             * @param [writer] Writer to encode to
                             * @returns Writer
                             */
                            public static encode(message: google.storage.control.v2.IntelligenceConfig.Filter.ICloudStorageLocations, writer?: $protobuf.Writer): $protobuf.Writer;

                            /**
                             * Encodes the specified CloudStorageLocations message, length delimited. Does not implicitly {@link google.storage.control.v2.IntelligenceConfig.Filter.CloudStorageLocations.verify|verify} messages.
                             * @param message CloudStorageLocations message or plain object to encode
                             * @param [writer] Writer to encode to
                             * @returns Writer
                             */
                            public static encodeDelimited(message: google.storage.control.v2.IntelligenceConfig.Filter.ICloudStorageLocations, writer?: $protobuf.Writer): $protobuf.Writer;

                            /**
                             * Decodes a CloudStorageLocations message from the specified reader or buffer.
                             * @param reader Reader or buffer to decode from
                             * @param [length] Message length if known beforehand
                             * @returns CloudStorageLocations
                             * @throws {Error} If the payload is not a reader or valid buffer
                             * @throws {$protobuf.util.ProtocolError} If required fields are missing
                             */
                            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.control.v2.IntelligenceConfig.Filter.CloudStorageLocations;

                            /**
                             * Decodes a CloudStorageLocations message from the specified reader or buffer, length delimited.
                             * @param reader Reader or buffer to decode from
                             * @returns CloudStorageLocations
                             * @throws {Error} If the payload is not a reader or valid buffer
                             * @throws {$protobuf.util.ProtocolError} If required fields are missing
                             */
                            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.control.v2.IntelligenceConfig.Filter.CloudStorageLocations;

                            /**
                             * Verifies a CloudStorageLocations message.
                             * @param message Plain object to verify
                             * @returns `null` if valid, otherwise the reason why it is not
                             */
                            public static verify(message: { [k: string]: any }): (string|null);

                            /**
                             * Creates a CloudStorageLocations message from a plain object. Also converts values to their respective internal types.
                             * @param object Plain object
                             * @returns CloudStorageLocations
                             */
                            public static fromObject(object: { [k: string]: any }): google.storage.control.v2.IntelligenceConfig.Filter.CloudStorageLocations;

                            /**
                             * Creates a plain object from a CloudStorageLocations message. Also converts values to other types if specified.
                             * @param message CloudStorageLocations
                             * @param [options] Conversion options
                             * @returns Plain object
                             */
                            public static toObject(message: google.storage.control.v2.IntelligenceConfig.Filter.CloudStorageLocations, options?: $protobuf.IConversionOptions): { [k: string]: any };

                            /**
                             * Converts this CloudStorageLocations to JSON.
                             * @returns JSON object
                             */
                            public toJSON(): { [k: string]: any };

                            /**
                             * Gets the default type url for CloudStorageLocations
                             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                             * @returns The default type url
                             */
                            public static getTypeUrl(typeUrlPrefix?: string): string;
                        }

                        /** Properties of a CloudStorageBuckets. */
                        interface ICloudStorageBuckets {

                            /** CloudStorageBuckets bucketIdRegexes */
                            bucketIdRegexes?: (string[]|null);
                        }

                        /** Represents a CloudStorageBuckets. */
                        class CloudStorageBuckets implements ICloudStorageBuckets {

                            /**
                             * Constructs a new CloudStorageBuckets.
                             * @param [properties] Properties to set
                             */
                            constructor(properties?: google.storage.control.v2.IntelligenceConfig.Filter.ICloudStorageBuckets);

                            /** CloudStorageBuckets bucketIdRegexes. */
                            public bucketIdRegexes: string[];

                            /**
                             * Creates a new CloudStorageBuckets instance using the specified properties.
                             * @param [properties] Properties to set
                             * @returns CloudStorageBuckets instance
                             */
                            public static create(properties?: google.storage.control.v2.IntelligenceConfig.Filter.ICloudStorageBuckets): google.storage.control.v2.IntelligenceConfig.Filter.CloudStorageBuckets;

                            /**
                             * Encodes the specified CloudStorageBuckets message. Does not implicitly {@link google.storage.control.v2.IntelligenceConfig.Filter.CloudStorageBuckets.verify|verify} messages.
                             * @param message CloudStorageBuckets message or plain object to encode
                             * @param [writer] Writer to encode to
                             * @returns Writer
                             */
                            public static encode(message: google.storage.control.v2.IntelligenceConfig.Filter.ICloudStorageBuckets, writer?: $protobuf.Writer): $protobuf.Writer;

                            /**
                             * Encodes the specified CloudStorageBuckets message, length delimited. Does not implicitly {@link google.storage.control.v2.IntelligenceConfig.Filter.CloudStorageBuckets.verify|verify} messages.
                             * @param message CloudStorageBuckets message or plain object to encode
                             * @param [writer] Writer to encode to
                             * @returns Writer
                             */
                            public static encodeDelimited(message: google.storage.control.v2.IntelligenceConfig.Filter.ICloudStorageBuckets, writer?: $protobuf.Writer): $protobuf.Writer;

                            /**
                             * Decodes a CloudStorageBuckets message from the specified reader or buffer.
                             * @param reader Reader or buffer to decode from
                             * @param [length] Message length if known beforehand
                             * @returns CloudStorageBuckets
                             * @throws {Error} If the payload is not a reader or valid buffer
                             * @throws {$protobuf.util.ProtocolError} If required fields are missing
                             */
                            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.control.v2.IntelligenceConfig.Filter.CloudStorageBuckets;

                            /**
                             * Decodes a CloudStorageBuckets message from the specified reader or buffer, length delimited.
                             * @param reader Reader or buffer to decode from
                             * @returns CloudStorageBuckets
                             * @throws {Error} If the payload is not a reader or valid buffer
                             * @throws {$protobuf.util.ProtocolError} If required fields are missing
                             */
                            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.control.v2.IntelligenceConfig.Filter.CloudStorageBuckets;

                            /**
                             * Verifies a CloudStorageBuckets message.
                             * @param message Plain object to verify
                             * @returns `null` if valid, otherwise the reason why it is not
                             */
                            public static verify(message: { [k: string]: any }): (string|null);

                            /**
                             * Creates a CloudStorageBuckets message from a plain object. Also converts values to their respective internal types.
                             * @param object Plain object
                             * @returns CloudStorageBuckets
                             */
                            public static fromObject(object: { [k: string]: any }): google.storage.control.v2.IntelligenceConfig.Filter.CloudStorageBuckets;

                            /**
                             * Creates a plain object from a CloudStorageBuckets message. Also converts values to other types if specified.
                             * @param message CloudStorageBuckets
                             * @param [options] Conversion options
                             * @returns Plain object
                             */
                            public static toObject(message: google.storage.control.v2.IntelligenceConfig.Filter.CloudStorageBuckets, options?: $protobuf.IConversionOptions): { [k: string]: any };

                            /**
                             * Converts this CloudStorageBuckets to JSON.
                             * @returns JSON object
                             */
                            public toJSON(): { [k: string]: any };

                            /**
                             * Gets the default type url for CloudStorageBuckets
                             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                             * @returns The default type url
                             */
                            public static getTypeUrl(typeUrlPrefix?: string): string;
                        }
                    }

                    /** Properties of an EffectiveIntelligenceConfig. */
                    interface IEffectiveIntelligenceConfig {

                        /** EffectiveIntelligenceConfig effectiveEdition */
                        effectiveEdition?: (google.storage.control.v2.IntelligenceConfig.EffectiveIntelligenceConfig.EffectiveEdition|keyof typeof google.storage.control.v2.IntelligenceConfig.EffectiveIntelligenceConfig.EffectiveEdition|null);

                        /** EffectiveIntelligenceConfig intelligenceConfig */
                        intelligenceConfig?: (string|null);
                    }

                    /** Represents an EffectiveIntelligenceConfig. */
                    class EffectiveIntelligenceConfig implements IEffectiveIntelligenceConfig {

                        /**
                         * Constructs a new EffectiveIntelligenceConfig.
                         * @param [properties] Properties to set
                         */
                        constructor(properties?: google.storage.control.v2.IntelligenceConfig.IEffectiveIntelligenceConfig);

                        /** EffectiveIntelligenceConfig effectiveEdition. */
                        public effectiveEdition: (google.storage.control.v2.IntelligenceConfig.EffectiveIntelligenceConfig.EffectiveEdition|keyof typeof google.storage.control.v2.IntelligenceConfig.EffectiveIntelligenceConfig.EffectiveEdition);

                        /** EffectiveIntelligenceConfig intelligenceConfig. */
                        public intelligenceConfig: string;

                        /**
                         * Creates a new EffectiveIntelligenceConfig instance using the specified properties.
                         * @param [properties] Properties to set
                         * @returns EffectiveIntelligenceConfig instance
                         */
                        public static create(properties?: google.storage.control.v2.IntelligenceConfig.IEffectiveIntelligenceConfig): google.storage.control.v2.IntelligenceConfig.EffectiveIntelligenceConfig;

                        /**
                         * Encodes the specified EffectiveIntelligenceConfig message. Does not implicitly {@link google.storage.control.v2.IntelligenceConfig.EffectiveIntelligenceConfig.verify|verify} messages.
                         * @param message EffectiveIntelligenceConfig message or plain object to encode
                         * @param [writer] Writer to encode to
                         * @returns Writer
                         */
                        public static encode(message: google.storage.control.v2.IntelligenceConfig.IEffectiveIntelligenceConfig, writer?: $protobuf.Writer): $protobuf.Writer;

                        /**
                         * Encodes the specified EffectiveIntelligenceConfig message, length delimited. Does not implicitly {@link google.storage.control.v2.IntelligenceConfig.EffectiveIntelligenceConfig.verify|verify} messages.
                         * @param message EffectiveIntelligenceConfig message or plain object to encode
                         * @param [writer] Writer to encode to
                         * @returns Writer
                         */
                        public static encodeDelimited(message: google.storage.control.v2.IntelligenceConfig.IEffectiveIntelligenceConfig, writer?: $protobuf.Writer): $protobuf.Writer;

                        /**
                         * Decodes an EffectiveIntelligenceConfig message from the specified reader or buffer.
                         * @param reader Reader or buffer to decode from
                         * @param [length] Message length if known beforehand
                         * @returns EffectiveIntelligenceConfig
                         * @throws {Error} If the payload is not a reader or valid buffer
                         * @throws {$protobuf.util.ProtocolError} If required fields are missing
                         */
                        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.control.v2.IntelligenceConfig.EffectiveIntelligenceConfig;

                        /**
                         * Decodes an EffectiveIntelligenceConfig message from the specified reader or buffer, length delimited.
                         * @param reader Reader or buffer to decode from
                         * @returns EffectiveIntelligenceConfig
                         * @throws {Error} If the payload is not a reader or valid buffer
                         * @throws {$protobuf.util.ProtocolError} If required fields are missing
                         */
                        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.control.v2.IntelligenceConfig.EffectiveIntelligenceConfig;

                        /**
                         * Verifies an EffectiveIntelligenceConfig message.
                         * @param message Plain object to verify
                         * @returns `null` if valid, otherwise the reason why it is not
                         */
                        public static verify(message: { [k: string]: any }): (string|null);

                        /**
                         * Creates an EffectiveIntelligenceConfig message from a plain object. Also converts values to their respective internal types.
                         * @param object Plain object
                         * @returns EffectiveIntelligenceConfig
                         */
                        public static fromObject(object: { [k: string]: any }): google.storage.control.v2.IntelligenceConfig.EffectiveIntelligenceConfig;

                        /**
                         * Creates a plain object from an EffectiveIntelligenceConfig message. Also converts values to other types if specified.
                         * @param message EffectiveIntelligenceConfig
                         * @param [options] Conversion options
                         * @returns Plain object
                         */
                        public static toObject(message: google.storage.control.v2.IntelligenceConfig.EffectiveIntelligenceConfig, options?: $protobuf.IConversionOptions): { [k: string]: any };

                        /**
                         * Converts this EffectiveIntelligenceConfig to JSON.
                         * @returns JSON object
                         */
                        public toJSON(): { [k: string]: any };

                        /**
                         * Gets the default type url for EffectiveIntelligenceConfig
                         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                         * @returns The default type url
                         */
                        public static getTypeUrl(typeUrlPrefix?: string): string;
                    }

                    namespace EffectiveIntelligenceConfig {

                        /** EffectiveEdition enum. */
                        enum EffectiveEdition {
                            EFFECTIVE_EDITION_UNSPECIFIED = 0,
                            NONE = 1,
                            STANDARD = 2
                        }
                    }

                    /** Properties of a TrialConfig. */
                    interface ITrialConfig {

                        /** TrialConfig expireTime */
                        expireTime?: (google.protobuf.ITimestamp|null);
                    }

                    /** Represents a TrialConfig. */
                    class TrialConfig implements ITrialConfig {

                        /**
                         * Constructs a new TrialConfig.
                         * @param [properties] Properties to set
                         */
                        constructor(properties?: google.storage.control.v2.IntelligenceConfig.ITrialConfig);

                        /** TrialConfig expireTime. */
                        public expireTime?: (google.protobuf.ITimestamp|null);

                        /**
                         * Creates a new TrialConfig instance using the specified properties.
                         * @param [properties] Properties to set
                         * @returns TrialConfig instance
                         */
                        public static create(properties?: google.storage.control.v2.IntelligenceConfig.ITrialConfig): google.storage.control.v2.IntelligenceConfig.TrialConfig;

                        /**
                         * Encodes the specified TrialConfig message. Does not implicitly {@link google.storage.control.v2.IntelligenceConfig.TrialConfig.verify|verify} messages.
                         * @param message TrialConfig message or plain object to encode
                         * @param [writer] Writer to encode to
                         * @returns Writer
                         */
                        public static encode(message: google.storage.control.v2.IntelligenceConfig.ITrialConfig, writer?: $protobuf.Writer): $protobuf.Writer;

                        /**
                         * Encodes the specified TrialConfig message, length delimited. Does not implicitly {@link google.storage.control.v2.IntelligenceConfig.TrialConfig.verify|verify} messages.
                         * @param message TrialConfig message or plain object to encode
                         * @param [writer] Writer to encode to
                         * @returns Writer
                         */
                        public static encodeDelimited(message: google.storage.control.v2.IntelligenceConfig.ITrialConfig, writer?: $protobuf.Writer): $protobuf.Writer;

                        /**
                         * Decodes a TrialConfig message from the specified reader or buffer.
                         * @param reader Reader or buffer to decode from
                         * @param [length] Message length if known beforehand
                         * @returns TrialConfig
                         * @throws {Error} If the payload is not a reader or valid buffer
                         * @throws {$protobuf.util.ProtocolError} If required fields are missing
                         */
                        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.control.v2.IntelligenceConfig.TrialConfig;

                        /**
                         * Decodes a TrialConfig message from the specified reader or buffer, length delimited.
                         * @param reader Reader or buffer to decode from
                         * @returns TrialConfig
                         * @throws {Error} If the payload is not a reader or valid buffer
                         * @throws {$protobuf.util.ProtocolError} If required fields are missing
                         */
                        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.control.v2.IntelligenceConfig.TrialConfig;

                        /**
                         * Verifies a TrialConfig message.
                         * @param message Plain object to verify
                         * @returns `null` if valid, otherwise the reason why it is not
                         */
                        public static verify(message: { [k: string]: any }): (string|null);

                        /**
                         * Creates a TrialConfig message from a plain object. Also converts values to their respective internal types.
                         * @param object Plain object
                         * @returns TrialConfig
                         */
                        public static fromObject(object: { [k: string]: any }): google.storage.control.v2.IntelligenceConfig.TrialConfig;

                        /**
                         * Creates a plain object from a TrialConfig message. Also converts values to other types if specified.
                         * @param message TrialConfig
                         * @param [options] Conversion options
                         * @returns Plain object
                         */
                        public static toObject(message: google.storage.control.v2.IntelligenceConfig.TrialConfig, options?: $protobuf.IConversionOptions): { [k: string]: any };

                        /**
                         * Converts this TrialConfig to JSON.
                         * @returns JSON object
                         */
                        public toJSON(): { [k: string]: any };

                        /**
                         * Gets the default type url for TrialConfig
                         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                         * @returns The default type url
                         */
                        public static getTypeUrl(typeUrlPrefix?: string): string;
                    }
                }

                /** Properties of an UpdateOrganizationIntelligenceConfigRequest. */
                interface IUpdateOrganizationIntelligenceConfigRequest {

                    /** UpdateOrganizationIntelligenceConfigRequest intelligenceConfig */
                    intelligenceConfig?: (google.storage.control.v2.IIntelligenceConfig|null);

                    /** UpdateOrganizationIntelligenceConfigRequest updateMask */
                    updateMask?: (google.protobuf.IFieldMask|null);

                    /** UpdateOrganizationIntelligenceConfigRequest requestId */
                    requestId?: (string|null);
                }

                /** Represents an UpdateOrganizationIntelligenceConfigRequest. */
                class UpdateOrganizationIntelligenceConfigRequest implements IUpdateOrganizationIntelligenceConfigRequest {

                    /**
                     * Constructs a new UpdateOrganizationIntelligenceConfigRequest.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: google.storage.control.v2.IUpdateOrganizationIntelligenceConfigRequest);

                    /** UpdateOrganizationIntelligenceConfigRequest intelligenceConfig. */
                    public intelligenceConfig?: (google.storage.control.v2.IIntelligenceConfig|null);

                    /** UpdateOrganizationIntelligenceConfigRequest updateMask. */
                    public updateMask?: (google.protobuf.IFieldMask|null);

                    /** UpdateOrganizationIntelligenceConfigRequest requestId. */
                    public requestId: string;

                    /**
                     * Creates a new UpdateOrganizationIntelligenceConfigRequest instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns UpdateOrganizationIntelligenceConfigRequest instance
                     */
                    public static create(properties?: google.storage.control.v2.IUpdateOrganizationIntelligenceConfigRequest): google.storage.control.v2.UpdateOrganizationIntelligenceConfigRequest;

                    /**
                     * Encodes the specified UpdateOrganizationIntelligenceConfigRequest message. Does not implicitly {@link google.storage.control.v2.UpdateOrganizationIntelligenceConfigRequest.verify|verify} messages.
                     * @param message UpdateOrganizationIntelligenceConfigRequest message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: google.storage.control.v2.IUpdateOrganizationIntelligenceConfigRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified UpdateOrganizationIntelligenceConfigRequest message, length delimited. Does not implicitly {@link google.storage.control.v2.UpdateOrganizationIntelligenceConfigRequest.verify|verify} messages.
                     * @param message UpdateOrganizationIntelligenceConfigRequest message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: google.storage.control.v2.IUpdateOrganizationIntelligenceConfigRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes an UpdateOrganizationIntelligenceConfigRequest message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns UpdateOrganizationIntelligenceConfigRequest
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.control.v2.UpdateOrganizationIntelligenceConfigRequest;

                    /**
                     * Decodes an UpdateOrganizationIntelligenceConfigRequest message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns UpdateOrganizationIntelligenceConfigRequest
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.control.v2.UpdateOrganizationIntelligenceConfigRequest;

                    /**
                     * Verifies an UpdateOrganizationIntelligenceConfigRequest message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates an UpdateOrganizationIntelligenceConfigRequest message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns UpdateOrganizationIntelligenceConfigRequest
                     */
                    public static fromObject(object: { [k: string]: any }): google.storage.control.v2.UpdateOrganizationIntelligenceConfigRequest;

                    /**
                     * Creates a plain object from an UpdateOrganizationIntelligenceConfigRequest message. Also converts values to other types if specified.
                     * @param message UpdateOrganizationIntelligenceConfigRequest
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: google.storage.control.v2.UpdateOrganizationIntelligenceConfigRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this UpdateOrganizationIntelligenceConfigRequest to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for UpdateOrganizationIntelligenceConfigRequest
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }

                /** Properties of an UpdateFolderIntelligenceConfigRequest. */
                interface IUpdateFolderIntelligenceConfigRequest {

                    /** UpdateFolderIntelligenceConfigRequest intelligenceConfig */
                    intelligenceConfig?: (google.storage.control.v2.IIntelligenceConfig|null);

                    /** UpdateFolderIntelligenceConfigRequest updateMask */
                    updateMask?: (google.protobuf.IFieldMask|null);

                    /** UpdateFolderIntelligenceConfigRequest requestId */
                    requestId?: (string|null);
                }

                /** Represents an UpdateFolderIntelligenceConfigRequest. */
                class UpdateFolderIntelligenceConfigRequest implements IUpdateFolderIntelligenceConfigRequest {

                    /**
                     * Constructs a new UpdateFolderIntelligenceConfigRequest.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: google.storage.control.v2.IUpdateFolderIntelligenceConfigRequest);

                    /** UpdateFolderIntelligenceConfigRequest intelligenceConfig. */
                    public intelligenceConfig?: (google.storage.control.v2.IIntelligenceConfig|null);

                    /** UpdateFolderIntelligenceConfigRequest updateMask. */
                    public updateMask?: (google.protobuf.IFieldMask|null);

                    /** UpdateFolderIntelligenceConfigRequest requestId. */
                    public requestId: string;

                    /**
                     * Creates a new UpdateFolderIntelligenceConfigRequest instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns UpdateFolderIntelligenceConfigRequest instance
                     */
                    public static create(properties?: google.storage.control.v2.IUpdateFolderIntelligenceConfigRequest): google.storage.control.v2.UpdateFolderIntelligenceConfigRequest;

                    /**
                     * Encodes the specified UpdateFolderIntelligenceConfigRequest message. Does not implicitly {@link google.storage.control.v2.UpdateFolderIntelligenceConfigRequest.verify|verify} messages.
                     * @param message UpdateFolderIntelligenceConfigRequest message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: google.storage.control.v2.IUpdateFolderIntelligenceConfigRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified UpdateFolderIntelligenceConfigRequest message, length delimited. Does not implicitly {@link google.storage.control.v2.UpdateFolderIntelligenceConfigRequest.verify|verify} messages.
                     * @param message UpdateFolderIntelligenceConfigRequest message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: google.storage.control.v2.IUpdateFolderIntelligenceConfigRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes an UpdateFolderIntelligenceConfigRequest message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns UpdateFolderIntelligenceConfigRequest
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.control.v2.UpdateFolderIntelligenceConfigRequest;

                    /**
                     * Decodes an UpdateFolderIntelligenceConfigRequest message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns UpdateFolderIntelligenceConfigRequest
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.control.v2.UpdateFolderIntelligenceConfigRequest;

                    /**
                     * Verifies an UpdateFolderIntelligenceConfigRequest message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates an UpdateFolderIntelligenceConfigRequest message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns UpdateFolderIntelligenceConfigRequest
                     */
                    public static fromObject(object: { [k: string]: any }): google.storage.control.v2.UpdateFolderIntelligenceConfigRequest;

                    /**
                     * Creates a plain object from an UpdateFolderIntelligenceConfigRequest message. Also converts values to other types if specified.
                     * @param message UpdateFolderIntelligenceConfigRequest
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: google.storage.control.v2.UpdateFolderIntelligenceConfigRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this UpdateFolderIntelligenceConfigRequest to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for UpdateFolderIntelligenceConfigRequest
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }

                /** Properties of an UpdateProjectIntelligenceConfigRequest. */
                interface IUpdateProjectIntelligenceConfigRequest {

                    /** UpdateProjectIntelligenceConfigRequest intelligenceConfig */
                    intelligenceConfig?: (google.storage.control.v2.IIntelligenceConfig|null);

                    /** UpdateProjectIntelligenceConfigRequest updateMask */
                    updateMask?: (google.protobuf.IFieldMask|null);

                    /** UpdateProjectIntelligenceConfigRequest requestId */
                    requestId?: (string|null);
                }

                /** Represents an UpdateProjectIntelligenceConfigRequest. */
                class UpdateProjectIntelligenceConfigRequest implements IUpdateProjectIntelligenceConfigRequest {

                    /**
                     * Constructs a new UpdateProjectIntelligenceConfigRequest.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: google.storage.control.v2.IUpdateProjectIntelligenceConfigRequest);

                    /** UpdateProjectIntelligenceConfigRequest intelligenceConfig. */
                    public intelligenceConfig?: (google.storage.control.v2.IIntelligenceConfig|null);

                    /** UpdateProjectIntelligenceConfigRequest updateMask. */
                    public updateMask?: (google.protobuf.IFieldMask|null);

                    /** UpdateProjectIntelligenceConfigRequest requestId. */
                    public requestId: string;

                    /**
                     * Creates a new UpdateProjectIntelligenceConfigRequest instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns UpdateProjectIntelligenceConfigRequest instance
                     */
                    public static create(properties?: google.storage.control.v2.IUpdateProjectIntelligenceConfigRequest): google.storage.control.v2.UpdateProjectIntelligenceConfigRequest;

                    /**
                     * Encodes the specified UpdateProjectIntelligenceConfigRequest message. Does not implicitly {@link google.storage.control.v2.UpdateProjectIntelligenceConfigRequest.verify|verify} messages.
                     * @param message UpdateProjectIntelligenceConfigRequest message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: google.storage.control.v2.IUpdateProjectIntelligenceConfigRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified UpdateProjectIntelligenceConfigRequest message, length delimited. Does not implicitly {@link google.storage.control.v2.UpdateProjectIntelligenceConfigRequest.verify|verify} messages.
                     * @param message UpdateProjectIntelligenceConfigRequest message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: google.storage.control.v2.IUpdateProjectIntelligenceConfigRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes an UpdateProjectIntelligenceConfigRequest message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns UpdateProjectIntelligenceConfigRequest
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.control.v2.UpdateProjectIntelligenceConfigRequest;

                    /**
                     * Decodes an UpdateProjectIntelligenceConfigRequest message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns UpdateProjectIntelligenceConfigRequest
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.control.v2.UpdateProjectIntelligenceConfigRequest;

                    /**
                     * Verifies an UpdateProjectIntelligenceConfigRequest message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates an UpdateProjectIntelligenceConfigRequest message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns UpdateProjectIntelligenceConfigRequest
                     */
                    public static fromObject(object: { [k: string]: any }): google.storage.control.v2.UpdateProjectIntelligenceConfigRequest;

                    /**
                     * Creates a plain object from an UpdateProjectIntelligenceConfigRequest message. Also converts values to other types if specified.
                     * @param message UpdateProjectIntelligenceConfigRequest
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: google.storage.control.v2.UpdateProjectIntelligenceConfigRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this UpdateProjectIntelligenceConfigRequest to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for UpdateProjectIntelligenceConfigRequest
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }

                /** Properties of a GetOrganizationIntelligenceConfigRequest. */
                interface IGetOrganizationIntelligenceConfigRequest {

                    /** GetOrganizationIntelligenceConfigRequest name */
                    name?: (string|null);
                }

                /** Represents a GetOrganizationIntelligenceConfigRequest. */
                class GetOrganizationIntelligenceConfigRequest implements IGetOrganizationIntelligenceConfigRequest {

                    /**
                     * Constructs a new GetOrganizationIntelligenceConfigRequest.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: google.storage.control.v2.IGetOrganizationIntelligenceConfigRequest);

                    /** GetOrganizationIntelligenceConfigRequest name. */
                    public name: string;

                    /**
                     * Creates a new GetOrganizationIntelligenceConfigRequest instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns GetOrganizationIntelligenceConfigRequest instance
                     */
                    public static create(properties?: google.storage.control.v2.IGetOrganizationIntelligenceConfigRequest): google.storage.control.v2.GetOrganizationIntelligenceConfigRequest;

                    /**
                     * Encodes the specified GetOrganizationIntelligenceConfigRequest message. Does not implicitly {@link google.storage.control.v2.GetOrganizationIntelligenceConfigRequest.verify|verify} messages.
                     * @param message GetOrganizationIntelligenceConfigRequest message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: google.storage.control.v2.IGetOrganizationIntelligenceConfigRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified GetOrganizationIntelligenceConfigRequest message, length delimited. Does not implicitly {@link google.storage.control.v2.GetOrganizationIntelligenceConfigRequest.verify|verify} messages.
                     * @param message GetOrganizationIntelligenceConfigRequest message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: google.storage.control.v2.IGetOrganizationIntelligenceConfigRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes a GetOrganizationIntelligenceConfigRequest message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns GetOrganizationIntelligenceConfigRequest
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.control.v2.GetOrganizationIntelligenceConfigRequest;

                    /**
                     * Decodes a GetOrganizationIntelligenceConfigRequest message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns GetOrganizationIntelligenceConfigRequest
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.control.v2.GetOrganizationIntelligenceConfigRequest;

                    /**
                     * Verifies a GetOrganizationIntelligenceConfigRequest message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates a GetOrganizationIntelligenceConfigRequest message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns GetOrganizationIntelligenceConfigRequest
                     */
                    public static fromObject(object: { [k: string]: any }): google.storage.control.v2.GetOrganizationIntelligenceConfigRequest;

                    /**
                     * Creates a plain object from a GetOrganizationIntelligenceConfigRequest message. Also converts values to other types if specified.
                     * @param message GetOrganizationIntelligenceConfigRequest
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: google.storage.control.v2.GetOrganizationIntelligenceConfigRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this GetOrganizationIntelligenceConfigRequest to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for GetOrganizationIntelligenceConfigRequest
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }

                /** Properties of a GetFolderIntelligenceConfigRequest. */
                interface IGetFolderIntelligenceConfigRequest {

                    /** GetFolderIntelligenceConfigRequest name */
                    name?: (string|null);
                }

                /** Represents a GetFolderIntelligenceConfigRequest. */
                class GetFolderIntelligenceConfigRequest implements IGetFolderIntelligenceConfigRequest {

                    /**
                     * Constructs a new GetFolderIntelligenceConfigRequest.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: google.storage.control.v2.IGetFolderIntelligenceConfigRequest);

                    /** GetFolderIntelligenceConfigRequest name. */
                    public name: string;

                    /**
                     * Creates a new GetFolderIntelligenceConfigRequest instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns GetFolderIntelligenceConfigRequest instance
                     */
                    public static create(properties?: google.storage.control.v2.IGetFolderIntelligenceConfigRequest): google.storage.control.v2.GetFolderIntelligenceConfigRequest;

                    /**
                     * Encodes the specified GetFolderIntelligenceConfigRequest message. Does not implicitly {@link google.storage.control.v2.GetFolderIntelligenceConfigRequest.verify|verify} messages.
                     * @param message GetFolderIntelligenceConfigRequest message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: google.storage.control.v2.IGetFolderIntelligenceConfigRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified GetFolderIntelligenceConfigRequest message, length delimited. Does not implicitly {@link google.storage.control.v2.GetFolderIntelligenceConfigRequest.verify|verify} messages.
                     * @param message GetFolderIntelligenceConfigRequest message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: google.storage.control.v2.IGetFolderIntelligenceConfigRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes a GetFolderIntelligenceConfigRequest message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns GetFolderIntelligenceConfigRequest
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.control.v2.GetFolderIntelligenceConfigRequest;

                    /**
                     * Decodes a GetFolderIntelligenceConfigRequest message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns GetFolderIntelligenceConfigRequest
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.control.v2.GetFolderIntelligenceConfigRequest;

                    /**
                     * Verifies a GetFolderIntelligenceConfigRequest message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates a GetFolderIntelligenceConfigRequest message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns GetFolderIntelligenceConfigRequest
                     */
                    public static fromObject(object: { [k: string]: any }): google.storage.control.v2.GetFolderIntelligenceConfigRequest;

                    /**
                     * Creates a plain object from a GetFolderIntelligenceConfigRequest message. Also converts values to other types if specified.
                     * @param message GetFolderIntelligenceConfigRequest
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: google.storage.control.v2.GetFolderIntelligenceConfigRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this GetFolderIntelligenceConfigRequest to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for GetFolderIntelligenceConfigRequest
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }

                /** Properties of a GetProjectIntelligenceConfigRequest. */
                interface IGetProjectIntelligenceConfigRequest {

                    /** GetProjectIntelligenceConfigRequest name */
                    name?: (string|null);
                }

                /** Represents a GetProjectIntelligenceConfigRequest. */
                class GetProjectIntelligenceConfigRequest implements IGetProjectIntelligenceConfigRequest {

                    /**
                     * Constructs a new GetProjectIntelligenceConfigRequest.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: google.storage.control.v2.IGetProjectIntelligenceConfigRequest);

                    /** GetProjectIntelligenceConfigRequest name. */
                    public name: string;

                    /**
                     * Creates a new GetProjectIntelligenceConfigRequest instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns GetProjectIntelligenceConfigRequest instance
                     */
                    public static create(properties?: google.storage.control.v2.IGetProjectIntelligenceConfigRequest): google.storage.control.v2.GetProjectIntelligenceConfigRequest;

                    /**
                     * Encodes the specified GetProjectIntelligenceConfigRequest message. Does not implicitly {@link google.storage.control.v2.GetProjectIntelligenceConfigRequest.verify|verify} messages.
                     * @param message GetProjectIntelligenceConfigRequest message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: google.storage.control.v2.IGetProjectIntelligenceConfigRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified GetProjectIntelligenceConfigRequest message, length delimited. Does not implicitly {@link google.storage.control.v2.GetProjectIntelligenceConfigRequest.verify|verify} messages.
                     * @param message GetProjectIntelligenceConfigRequest message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: google.storage.control.v2.IGetProjectIntelligenceConfigRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes a GetProjectIntelligenceConfigRequest message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns GetProjectIntelligenceConfigRequest
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.control.v2.GetProjectIntelligenceConfigRequest;

                    /**
                     * Decodes a GetProjectIntelligenceConfigRequest message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns GetProjectIntelligenceConfigRequest
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.control.v2.GetProjectIntelligenceConfigRequest;

                    /**
                     * Verifies a GetProjectIntelligenceConfigRequest message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates a GetProjectIntelligenceConfigRequest message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns GetProjectIntelligenceConfigRequest
                     */
                    public static fromObject(object: { [k: string]: any }): google.storage.control.v2.GetProjectIntelligenceConfigRequest;

                    /**
                     * Creates a plain object from a GetProjectIntelligenceConfigRequest message. Also converts values to other types if specified.
                     * @param message GetProjectIntelligenceConfigRequest
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: google.storage.control.v2.GetProjectIntelligenceConfigRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this GetProjectIntelligenceConfigRequest to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for GetProjectIntelligenceConfigRequest
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }
            }
        }

        /** Namespace v2. */
        namespace v2 {

            /** Represents a Storage */
            class Storage extends $protobuf.rpc.Service {

                /**
                 * Constructs a new Storage service.
                 * @param rpcImpl RPC implementation
                 * @param [requestDelimited=false] Whether requests are length-delimited
                 * @param [responseDelimited=false] Whether responses are length-delimited
                 */
                constructor(rpcImpl: $protobuf.RPCImpl, requestDelimited?: boolean, responseDelimited?: boolean);

                /**
                 * Creates new Storage service using the specified rpc implementation.
                 * @param rpcImpl RPC implementation
                 * @param [requestDelimited=false] Whether requests are length-delimited
                 * @param [responseDelimited=false] Whether responses are length-delimited
                 * @returns RPC service. Useful where requests and/or responses are streamed.
                 */
                public static create(rpcImpl: $protobuf.RPCImpl, requestDelimited?: boolean, responseDelimited?: boolean): Storage;

                /**
                 * Calls DeleteBucket.
                 * @param request DeleteBucketRequest message or plain object
                 * @param callback Node-style callback called with the error, if any, and Empty
                 */
                public deleteBucket(request: google.storage.v2.IDeleteBucketRequest, callback: google.storage.v2.Storage.DeleteBucketCallback): void;

                /**
                 * Calls DeleteBucket.
                 * @param request DeleteBucketRequest message or plain object
                 * @returns Promise
                 */
                public deleteBucket(request: google.storage.v2.IDeleteBucketRequest): Promise<google.protobuf.Empty>;

                /**
                 * Calls GetBucket.
                 * @param request GetBucketRequest message or plain object
                 * @param callback Node-style callback called with the error, if any, and Bucket
                 */
                public getBucket(request: google.storage.v2.IGetBucketRequest, callback: google.storage.v2.Storage.GetBucketCallback): void;

                /**
                 * Calls GetBucket.
                 * @param request GetBucketRequest message or plain object
                 * @returns Promise
                 */
                public getBucket(request: google.storage.v2.IGetBucketRequest): Promise<google.storage.v2.Bucket>;

                /**
                 * Calls CreateBucket.
                 * @param request CreateBucketRequest message or plain object
                 * @param callback Node-style callback called with the error, if any, and Bucket
                 */
                public createBucket(request: google.storage.v2.ICreateBucketRequest, callback: google.storage.v2.Storage.CreateBucketCallback): void;

                /**
                 * Calls CreateBucket.
                 * @param request CreateBucketRequest message or plain object
                 * @returns Promise
                 */
                public createBucket(request: google.storage.v2.ICreateBucketRequest): Promise<google.storage.v2.Bucket>;

                /**
                 * Calls ListBuckets.
                 * @param request ListBucketsRequest message or plain object
                 * @param callback Node-style callback called with the error, if any, and ListBucketsResponse
                 */
                public listBuckets(request: google.storage.v2.IListBucketsRequest, callback: google.storage.v2.Storage.ListBucketsCallback): void;

                /**
                 * Calls ListBuckets.
                 * @param request ListBucketsRequest message or plain object
                 * @returns Promise
                 */
                public listBuckets(request: google.storage.v2.IListBucketsRequest): Promise<google.storage.v2.ListBucketsResponse>;

                /**
                 * Calls LockBucketRetentionPolicy.
                 * @param request LockBucketRetentionPolicyRequest message or plain object
                 * @param callback Node-style callback called with the error, if any, and Bucket
                 */
                public lockBucketRetentionPolicy(request: google.storage.v2.ILockBucketRetentionPolicyRequest, callback: google.storage.v2.Storage.LockBucketRetentionPolicyCallback): void;

                /**
                 * Calls LockBucketRetentionPolicy.
                 * @param request LockBucketRetentionPolicyRequest message or plain object
                 * @returns Promise
                 */
                public lockBucketRetentionPolicy(request: google.storage.v2.ILockBucketRetentionPolicyRequest): Promise<google.storage.v2.Bucket>;

                /**
                 * Calls GetIamPolicy.
                 * @param request GetIamPolicyRequest message or plain object
                 * @param callback Node-style callback called with the error, if any, and Policy
                 */
                public getIamPolicy(request: google.iam.v1.IGetIamPolicyRequest, callback: google.storage.v2.Storage.GetIamPolicyCallback): void;

                /**
                 * Calls GetIamPolicy.
                 * @param request GetIamPolicyRequest message or plain object
                 * @returns Promise
                 */
                public getIamPolicy(request: google.iam.v1.IGetIamPolicyRequest): Promise<google.iam.v1.Policy>;

                /**
                 * Calls SetIamPolicy.
                 * @param request SetIamPolicyRequest message or plain object
                 * @param callback Node-style callback called with the error, if any, and Policy
                 */
                public setIamPolicy(request: google.iam.v1.ISetIamPolicyRequest, callback: google.storage.v2.Storage.SetIamPolicyCallback): void;

                /**
                 * Calls SetIamPolicy.
                 * @param request SetIamPolicyRequest message or plain object
                 * @returns Promise
                 */
                public setIamPolicy(request: google.iam.v1.ISetIamPolicyRequest): Promise<google.iam.v1.Policy>;

                /**
                 * Calls TestIamPermissions.
                 * @param request TestIamPermissionsRequest message or plain object
                 * @param callback Node-style callback called with the error, if any, and TestIamPermissionsResponse
                 */
                public testIamPermissions(request: google.iam.v1.ITestIamPermissionsRequest, callback: google.storage.v2.Storage.TestIamPermissionsCallback): void;

                /**
                 * Calls TestIamPermissions.
                 * @param request TestIamPermissionsRequest message or plain object
                 * @returns Promise
                 */
                public testIamPermissions(request: google.iam.v1.ITestIamPermissionsRequest): Promise<google.iam.v1.TestIamPermissionsResponse>;

                /**
                 * Calls UpdateBucket.
                 * @param request UpdateBucketRequest message or plain object
                 * @param callback Node-style callback called with the error, if any, and Bucket
                 */
                public updateBucket(request: google.storage.v2.IUpdateBucketRequest, callback: google.storage.v2.Storage.UpdateBucketCallback): void;

                /**
                 * Calls UpdateBucket.
                 * @param request UpdateBucketRequest message or plain object
                 * @returns Promise
                 */
                public updateBucket(request: google.storage.v2.IUpdateBucketRequest): Promise<google.storage.v2.Bucket>;

                /**
                 * Calls ComposeObject.
                 * @param request ComposeObjectRequest message or plain object
                 * @param callback Node-style callback called with the error, if any, and StorageObject
                 */
                public composeObject(request: google.storage.v2.IComposeObjectRequest, callback: google.storage.v2.Storage.ComposeObjectCallback): void;

                /**
                 * Calls ComposeObject.
                 * @param request ComposeObjectRequest message or plain object
                 * @returns Promise
                 */
                public composeObject(request: google.storage.v2.IComposeObjectRequest): Promise<google.storage.v2.StorageObject>;

                /**
                 * Calls DeleteObject.
                 * @param request DeleteObjectRequest message or plain object
                 * @param callback Node-style callback called with the error, if any, and Empty
                 */
                public deleteObject(request: google.storage.v2.IDeleteObjectRequest, callback: google.storage.v2.Storage.DeleteObjectCallback): void;

                /**
                 * Calls DeleteObject.
                 * @param request DeleteObjectRequest message or plain object
                 * @returns Promise
                 */
                public deleteObject(request: google.storage.v2.IDeleteObjectRequest): Promise<google.protobuf.Empty>;

                /**
                 * Calls RestoreObject.
                 * @param request RestoreObjectRequest message or plain object
                 * @param callback Node-style callback called with the error, if any, and StorageObject
                 */
                public restoreObject(request: google.storage.v2.IRestoreObjectRequest, callback: google.storage.v2.Storage.RestoreObjectCallback): void;

                /**
                 * Calls RestoreObject.
                 * @param request RestoreObjectRequest message or plain object
                 * @returns Promise
                 */
                public restoreObject(request: google.storage.v2.IRestoreObjectRequest): Promise<google.storage.v2.StorageObject>;

                /**
                 * Calls CancelResumableWrite.
                 * @param request CancelResumableWriteRequest message or plain object
                 * @param callback Node-style callback called with the error, if any, and CancelResumableWriteResponse
                 */
                public cancelResumableWrite(request: google.storage.v2.ICancelResumableWriteRequest, callback: google.storage.v2.Storage.CancelResumableWriteCallback): void;

                /**
                 * Calls CancelResumableWrite.
                 * @param request CancelResumableWriteRequest message or plain object
                 * @returns Promise
                 */
                public cancelResumableWrite(request: google.storage.v2.ICancelResumableWriteRequest): Promise<google.storage.v2.CancelResumableWriteResponse>;

                /**
                 * Calls GetObject.
                 * @param request GetObjectRequest message or plain object
                 * @param callback Node-style callback called with the error, if any, and StorageObject
                 */
                public getObject(request: google.storage.v2.IGetObjectRequest, callback: google.storage.v2.Storage.GetObjectCallback): void;

                /**
                 * Calls GetObject.
                 * @param request GetObjectRequest message or plain object
                 * @returns Promise
                 */
                public getObject(request: google.storage.v2.IGetObjectRequest): Promise<google.storage.v2.StorageObject>;

                /**
                 * Calls ReadObject.
                 * @param request ReadObjectRequest message or plain object
                 * @param callback Node-style callback called with the error, if any, and ReadObjectResponse
                 */
                public readObject(request: google.storage.v2.IReadObjectRequest, callback: google.storage.v2.Storage.ReadObjectCallback): void;

                /**
                 * Calls ReadObject.
                 * @param request ReadObjectRequest message or plain object
                 * @returns Promise
                 */
                public readObject(request: google.storage.v2.IReadObjectRequest): Promise<google.storage.v2.ReadObjectResponse>;

                /**
                 * Calls BidiReadObject.
                 * @param request BidiReadObjectRequest message or plain object
                 * @param callback Node-style callback called with the error, if any, and BidiReadObjectResponse
                 */
                public bidiReadObject(request: google.storage.v2.IBidiReadObjectRequest, callback: google.storage.v2.Storage.BidiReadObjectCallback): void;

                /**
                 * Calls BidiReadObject.
                 * @param request BidiReadObjectRequest message or plain object
                 * @returns Promise
                 */
                public bidiReadObject(request: google.storage.v2.IBidiReadObjectRequest): Promise<google.storage.v2.BidiReadObjectResponse>;

                /**
                 * Calls UpdateObject.
                 * @param request UpdateObjectRequest message or plain object
                 * @param callback Node-style callback called with the error, if any, and StorageObject
                 */
                public updateObject(request: google.storage.v2.IUpdateObjectRequest, callback: google.storage.v2.Storage.UpdateObjectCallback): void;

                /**
                 * Calls UpdateObject.
                 * @param request UpdateObjectRequest message or plain object
                 * @returns Promise
                 */
                public updateObject(request: google.storage.v2.IUpdateObjectRequest): Promise<google.storage.v2.StorageObject>;

                /**
                 * Calls WriteObject.
                 * @param request WriteObjectRequest message or plain object
                 * @param callback Node-style callback called with the error, if any, and WriteObjectResponse
                 */
                public writeObject(request: google.storage.v2.IWriteObjectRequest, callback: google.storage.v2.Storage.WriteObjectCallback): void;

                /**
                 * Calls WriteObject.
                 * @param request WriteObjectRequest message or plain object
                 * @returns Promise
                 */
                public writeObject(request: google.storage.v2.IWriteObjectRequest): Promise<google.storage.v2.WriteObjectResponse>;

                /**
                 * Calls BidiWriteObject.
                 * @param request BidiWriteObjectRequest message or plain object
                 * @param callback Node-style callback called with the error, if any, and BidiWriteObjectResponse
                 */
                public bidiWriteObject(request: google.storage.v2.IBidiWriteObjectRequest, callback: google.storage.v2.Storage.BidiWriteObjectCallback): void;

                /**
                 * Calls BidiWriteObject.
                 * @param request BidiWriteObjectRequest message or plain object
                 * @returns Promise
                 */
                public bidiWriteObject(request: google.storage.v2.IBidiWriteObjectRequest): Promise<google.storage.v2.BidiWriteObjectResponse>;

                /**
                 * Calls ListObjects.
                 * @param request ListObjectsRequest message or plain object
                 * @param callback Node-style callback called with the error, if any, and ListObjectsResponse
                 */
                public listObjects(request: google.storage.v2.IListObjectsRequest, callback: google.storage.v2.Storage.ListObjectsCallback): void;

                /**
                 * Calls ListObjects.
                 * @param request ListObjectsRequest message or plain object
                 * @returns Promise
                 */
                public listObjects(request: google.storage.v2.IListObjectsRequest): Promise<google.storage.v2.ListObjectsResponse>;

                /**
                 * Calls RewriteObject.
                 * @param request RewriteObjectRequest message or plain object
                 * @param callback Node-style callback called with the error, if any, and RewriteResponse
                 */
                public rewriteObject(request: google.storage.v2.IRewriteObjectRequest, callback: google.storage.v2.Storage.RewriteObjectCallback): void;

                /**
                 * Calls RewriteObject.
                 * @param request RewriteObjectRequest message or plain object
                 * @returns Promise
                 */
                public rewriteObject(request: google.storage.v2.IRewriteObjectRequest): Promise<google.storage.v2.RewriteResponse>;

                /**
                 * Calls StartResumableWrite.
                 * @param request StartResumableWriteRequest message or plain object
                 * @param callback Node-style callback called with the error, if any, and StartResumableWriteResponse
                 */
                public startResumableWrite(request: google.storage.v2.IStartResumableWriteRequest, callback: google.storage.v2.Storage.StartResumableWriteCallback): void;

                /**
                 * Calls StartResumableWrite.
                 * @param request StartResumableWriteRequest message or plain object
                 * @returns Promise
                 */
                public startResumableWrite(request: google.storage.v2.IStartResumableWriteRequest): Promise<google.storage.v2.StartResumableWriteResponse>;

                /**
                 * Calls QueryWriteStatus.
                 * @param request QueryWriteStatusRequest message or plain object
                 * @param callback Node-style callback called with the error, if any, and QueryWriteStatusResponse
                 */
                public queryWriteStatus(request: google.storage.v2.IQueryWriteStatusRequest, callback: google.storage.v2.Storage.QueryWriteStatusCallback): void;

                /**
                 * Calls QueryWriteStatus.
                 * @param request QueryWriteStatusRequest message or plain object
                 * @returns Promise
                 */
                public queryWriteStatus(request: google.storage.v2.IQueryWriteStatusRequest): Promise<google.storage.v2.QueryWriteStatusResponse>;

                /**
                 * Calls MoveObject.
                 * @param request MoveObjectRequest message or plain object
                 * @param callback Node-style callback called with the error, if any, and StorageObject
                 */
                public moveObject(request: google.storage.v2.IMoveObjectRequest, callback: google.storage.v2.Storage.MoveObjectCallback): void;

                /**
                 * Calls MoveObject.
                 * @param request MoveObjectRequest message or plain object
                 * @returns Promise
                 */
                public moveObject(request: google.storage.v2.IMoveObjectRequest): Promise<google.storage.v2.StorageObject>;
            }

            namespace Storage {

                /**
                 * Callback as used by {@link google.storage.v2.Storage|deleteBucket}.
                 * @param error Error, if any
                 * @param [response] Empty
                 */
                type DeleteBucketCallback = (error: (Error|null), response?: google.protobuf.Empty) => void;

                /**
                 * Callback as used by {@link google.storage.v2.Storage|getBucket}.
                 * @param error Error, if any
                 * @param [response] Bucket
                 */
                type GetBucketCallback = (error: (Error|null), response?: google.storage.v2.Bucket) => void;

                /**
                 * Callback as used by {@link google.storage.v2.Storage|createBucket}.
                 * @param error Error, if any
                 * @param [response] Bucket
                 */
                type CreateBucketCallback = (error: (Error|null), response?: google.storage.v2.Bucket) => void;

                /**
                 * Callback as used by {@link google.storage.v2.Storage|listBuckets}.
                 * @param error Error, if any
                 * @param [response] ListBucketsResponse
                 */
                type ListBucketsCallback = (error: (Error|null), response?: google.storage.v2.ListBucketsResponse) => void;

                /**
                 * Callback as used by {@link google.storage.v2.Storage|lockBucketRetentionPolicy}.
                 * @param error Error, if any
                 * @param [response] Bucket
                 */
                type LockBucketRetentionPolicyCallback = (error: (Error|null), response?: google.storage.v2.Bucket) => void;

                /**
                 * Callback as used by {@link google.storage.v2.Storage|getIamPolicy}.
                 * @param error Error, if any
                 * @param [response] Policy
                 */
                type GetIamPolicyCallback = (error: (Error|null), response?: google.iam.v1.Policy) => void;

                /**
                 * Callback as used by {@link google.storage.v2.Storage|setIamPolicy}.
                 * @param error Error, if any
                 * @param [response] Policy
                 */
                type SetIamPolicyCallback = (error: (Error|null), response?: google.iam.v1.Policy) => void;

                /**
                 * Callback as used by {@link google.storage.v2.Storage|testIamPermissions}.
                 * @param error Error, if any
                 * @param [response] TestIamPermissionsResponse
                 */
                type TestIamPermissionsCallback = (error: (Error|null), response?: google.iam.v1.TestIamPermissionsResponse) => void;

                /**
                 * Callback as used by {@link google.storage.v2.Storage|updateBucket}.
                 * @param error Error, if any
                 * @param [response] Bucket
                 */
                type UpdateBucketCallback = (error: (Error|null), response?: google.storage.v2.Bucket) => void;

                /**
                 * Callback as used by {@link google.storage.v2.Storage|composeObject}.
                 * @param error Error, if any
                 * @param [response] StorageObject
                 */
                type ComposeObjectCallback = (error: (Error|null), response?: google.storage.v2.StorageObject) => void;

                /**
                 * Callback as used by {@link google.storage.v2.Storage|deleteObject}.
                 * @param error Error, if any
                 * @param [response] Empty
                 */
                type DeleteObjectCallback = (error: (Error|null), response?: google.protobuf.Empty) => void;

                /**
                 * Callback as used by {@link google.storage.v2.Storage|restoreObject}.
                 * @param error Error, if any
                 * @param [response] StorageObject
                 */
                type RestoreObjectCallback = (error: (Error|null), response?: google.storage.v2.StorageObject) => void;

                /**
                 * Callback as used by {@link google.storage.v2.Storage|cancelResumableWrite}.
                 * @param error Error, if any
                 * @param [response] CancelResumableWriteResponse
                 */
                type CancelResumableWriteCallback = (error: (Error|null), response?: google.storage.v2.CancelResumableWriteResponse) => void;

                /**
                 * Callback as used by {@link google.storage.v2.Storage|getObject}.
                 * @param error Error, if any
                 * @param [response] StorageObject
                 */
                type GetObjectCallback = (error: (Error|null), response?: google.storage.v2.StorageObject) => void;

                /**
                 * Callback as used by {@link google.storage.v2.Storage|readObject}.
                 * @param error Error, if any
                 * @param [response] ReadObjectResponse
                 */
                type ReadObjectCallback = (error: (Error|null), response?: google.storage.v2.ReadObjectResponse) => void;

                /**
                 * Callback as used by {@link google.storage.v2.Storage|bidiReadObject}.
                 * @param error Error, if any
                 * @param [response] BidiReadObjectResponse
                 */
                type BidiReadObjectCallback = (error: (Error|null), response?: google.storage.v2.BidiReadObjectResponse) => void;

                /**
                 * Callback as used by {@link google.storage.v2.Storage|updateObject}.
                 * @param error Error, if any
                 * @param [response] StorageObject
                 */
                type UpdateObjectCallback = (error: (Error|null), response?: google.storage.v2.StorageObject) => void;

                /**
                 * Callback as used by {@link google.storage.v2.Storage|writeObject}.
                 * @param error Error, if any
                 * @param [response] WriteObjectResponse
                 */
                type WriteObjectCallback = (error: (Error|null), response?: google.storage.v2.WriteObjectResponse) => void;

                /**
                 * Callback as used by {@link google.storage.v2.Storage|bidiWriteObject}.
                 * @param error Error, if any
                 * @param [response] BidiWriteObjectResponse
                 */
                type BidiWriteObjectCallback = (error: (Error|null), response?: google.storage.v2.BidiWriteObjectResponse) => void;

                /**
                 * Callback as used by {@link google.storage.v2.Storage|listObjects}.
                 * @param error Error, if any
                 * @param [response] ListObjectsResponse
                 */
                type ListObjectsCallback = (error: (Error|null), response?: google.storage.v2.ListObjectsResponse) => void;

                /**
                 * Callback as used by {@link google.storage.v2.Storage|rewriteObject}.
                 * @param error Error, if any
                 * @param [response] RewriteResponse
                 */
                type RewriteObjectCallback = (error: (Error|null), response?: google.storage.v2.RewriteResponse) => void;

                /**
                 * Callback as used by {@link google.storage.v2.Storage|startResumableWrite}.
                 * @param error Error, if any
                 * @param [response] StartResumableWriteResponse
                 */
                type StartResumableWriteCallback = (error: (Error|null), response?: google.storage.v2.StartResumableWriteResponse) => void;

                /**
                 * Callback as used by {@link google.storage.v2.Storage|queryWriteStatus}.
                 * @param error Error, if any
                 * @param [response] QueryWriteStatusResponse
                 */
                type QueryWriteStatusCallback = (error: (Error|null), response?: google.storage.v2.QueryWriteStatusResponse) => void;

                /**
                 * Callback as used by {@link google.storage.v2.Storage|moveObject}.
                 * @param error Error, if any
                 * @param [response] StorageObject
                 */
                type MoveObjectCallback = (error: (Error|null), response?: google.storage.v2.StorageObject) => void;
            }

            /** Properties of a DeleteBucketRequest. */
            interface IDeleteBucketRequest {

                /** DeleteBucketRequest name */
                name?: (string|null);

                /** DeleteBucketRequest ifMetagenerationMatch */
                ifMetagenerationMatch?: (number|Long|string|null);

                /** DeleteBucketRequest ifMetagenerationNotMatch */
                ifMetagenerationNotMatch?: (number|Long|string|null);
            }

            /** Represents a DeleteBucketRequest. */
            class DeleteBucketRequest implements IDeleteBucketRequest {

                /**
                 * Constructs a new DeleteBucketRequest.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.storage.v2.IDeleteBucketRequest);

                /** DeleteBucketRequest name. */
                public name: string;

                /** DeleteBucketRequest ifMetagenerationMatch. */
                public ifMetagenerationMatch?: (number|Long|string|null);

                /** DeleteBucketRequest ifMetagenerationNotMatch. */
                public ifMetagenerationNotMatch?: (number|Long|string|null);

                /**
                 * Creates a new DeleteBucketRequest instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns DeleteBucketRequest instance
                 */
                public static create(properties?: google.storage.v2.IDeleteBucketRequest): google.storage.v2.DeleteBucketRequest;

                /**
                 * Encodes the specified DeleteBucketRequest message. Does not implicitly {@link google.storage.v2.DeleteBucketRequest.verify|verify} messages.
                 * @param message DeleteBucketRequest message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.storage.v2.IDeleteBucketRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified DeleteBucketRequest message, length delimited. Does not implicitly {@link google.storage.v2.DeleteBucketRequest.verify|verify} messages.
                 * @param message DeleteBucketRequest message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.storage.v2.IDeleteBucketRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a DeleteBucketRequest message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns DeleteBucketRequest
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.DeleteBucketRequest;

                /**
                 * Decodes a DeleteBucketRequest message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns DeleteBucketRequest
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.DeleteBucketRequest;

                /**
                 * Verifies a DeleteBucketRequest message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a DeleteBucketRequest message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns DeleteBucketRequest
                 */
                public static fromObject(object: { [k: string]: any }): google.storage.v2.DeleteBucketRequest;

                /**
                 * Creates a plain object from a DeleteBucketRequest message. Also converts values to other types if specified.
                 * @param message DeleteBucketRequest
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.storage.v2.DeleteBucketRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this DeleteBucketRequest to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for DeleteBucketRequest
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a GetBucketRequest. */
            interface IGetBucketRequest {

                /** GetBucketRequest name */
                name?: (string|null);

                /** GetBucketRequest ifMetagenerationMatch */
                ifMetagenerationMatch?: (number|Long|string|null);

                /** GetBucketRequest ifMetagenerationNotMatch */
                ifMetagenerationNotMatch?: (number|Long|string|null);

                /** GetBucketRequest readMask */
                readMask?: (google.protobuf.IFieldMask|null);
            }

            /** Represents a GetBucketRequest. */
            class GetBucketRequest implements IGetBucketRequest {

                /**
                 * Constructs a new GetBucketRequest.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.storage.v2.IGetBucketRequest);

                /** GetBucketRequest name. */
                public name: string;

                /** GetBucketRequest ifMetagenerationMatch. */
                public ifMetagenerationMatch?: (number|Long|string|null);

                /** GetBucketRequest ifMetagenerationNotMatch. */
                public ifMetagenerationNotMatch?: (number|Long|string|null);

                /** GetBucketRequest readMask. */
                public readMask?: (google.protobuf.IFieldMask|null);

                /**
                 * Creates a new GetBucketRequest instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns GetBucketRequest instance
                 */
                public static create(properties?: google.storage.v2.IGetBucketRequest): google.storage.v2.GetBucketRequest;

                /**
                 * Encodes the specified GetBucketRequest message. Does not implicitly {@link google.storage.v2.GetBucketRequest.verify|verify} messages.
                 * @param message GetBucketRequest message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.storage.v2.IGetBucketRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified GetBucketRequest message, length delimited. Does not implicitly {@link google.storage.v2.GetBucketRequest.verify|verify} messages.
                 * @param message GetBucketRequest message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.storage.v2.IGetBucketRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a GetBucketRequest message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns GetBucketRequest
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.GetBucketRequest;

                /**
                 * Decodes a GetBucketRequest message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns GetBucketRequest
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.GetBucketRequest;

                /**
                 * Verifies a GetBucketRequest message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a GetBucketRequest message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns GetBucketRequest
                 */
                public static fromObject(object: { [k: string]: any }): google.storage.v2.GetBucketRequest;

                /**
                 * Creates a plain object from a GetBucketRequest message. Also converts values to other types if specified.
                 * @param message GetBucketRequest
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.storage.v2.GetBucketRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this GetBucketRequest to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for GetBucketRequest
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a CreateBucketRequest. */
            interface ICreateBucketRequest {

                /** CreateBucketRequest parent */
                parent?: (string|null);

                /** CreateBucketRequest bucket */
                bucket?: (google.storage.v2.IBucket|null);

                /** CreateBucketRequest bucketId */
                bucketId?: (string|null);

                /** CreateBucketRequest predefinedAcl */
                predefinedAcl?: (string|null);

                /** CreateBucketRequest predefinedDefaultObjectAcl */
                predefinedDefaultObjectAcl?: (string|null);

                /** CreateBucketRequest enableObjectRetention */
                enableObjectRetention?: (boolean|null);
            }

            /** Represents a CreateBucketRequest. */
            class CreateBucketRequest implements ICreateBucketRequest {

                /**
                 * Constructs a new CreateBucketRequest.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.storage.v2.ICreateBucketRequest);

                /** CreateBucketRequest parent. */
                public parent: string;

                /** CreateBucketRequest bucket. */
                public bucket?: (google.storage.v2.IBucket|null);

                /** CreateBucketRequest bucketId. */
                public bucketId: string;

                /** CreateBucketRequest predefinedAcl. */
                public predefinedAcl: string;

                /** CreateBucketRequest predefinedDefaultObjectAcl. */
                public predefinedDefaultObjectAcl: string;

                /** CreateBucketRequest enableObjectRetention. */
                public enableObjectRetention: boolean;

                /**
                 * Creates a new CreateBucketRequest instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns CreateBucketRequest instance
                 */
                public static create(properties?: google.storage.v2.ICreateBucketRequest): google.storage.v2.CreateBucketRequest;

                /**
                 * Encodes the specified CreateBucketRequest message. Does not implicitly {@link google.storage.v2.CreateBucketRequest.verify|verify} messages.
                 * @param message CreateBucketRequest message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.storage.v2.ICreateBucketRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified CreateBucketRequest message, length delimited. Does not implicitly {@link google.storage.v2.CreateBucketRequest.verify|verify} messages.
                 * @param message CreateBucketRequest message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.storage.v2.ICreateBucketRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a CreateBucketRequest message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns CreateBucketRequest
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.CreateBucketRequest;

                /**
                 * Decodes a CreateBucketRequest message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns CreateBucketRequest
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.CreateBucketRequest;

                /**
                 * Verifies a CreateBucketRequest message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a CreateBucketRequest message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns CreateBucketRequest
                 */
                public static fromObject(object: { [k: string]: any }): google.storage.v2.CreateBucketRequest;

                /**
                 * Creates a plain object from a CreateBucketRequest message. Also converts values to other types if specified.
                 * @param message CreateBucketRequest
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.storage.v2.CreateBucketRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this CreateBucketRequest to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for CreateBucketRequest
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a ListBucketsRequest. */
            interface IListBucketsRequest {

                /** ListBucketsRequest parent */
                parent?: (string|null);

                /** ListBucketsRequest pageSize */
                pageSize?: (number|null);

                /** ListBucketsRequest pageToken */
                pageToken?: (string|null);

                /** ListBucketsRequest prefix */
                prefix?: (string|null);

                /** ListBucketsRequest readMask */
                readMask?: (google.protobuf.IFieldMask|null);

                /** ListBucketsRequest returnPartialSuccess */
                returnPartialSuccess?: (boolean|null);
            }

            /** Represents a ListBucketsRequest. */
            class ListBucketsRequest implements IListBucketsRequest {

                /**
                 * Constructs a new ListBucketsRequest.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.storage.v2.IListBucketsRequest);

                /** ListBucketsRequest parent. */
                public parent: string;

                /** ListBucketsRequest pageSize. */
                public pageSize: number;

                /** ListBucketsRequest pageToken. */
                public pageToken: string;

                /** ListBucketsRequest prefix. */
                public prefix: string;

                /** ListBucketsRequest readMask. */
                public readMask?: (google.protobuf.IFieldMask|null);

                /** ListBucketsRequest returnPartialSuccess. */
                public returnPartialSuccess: boolean;

                /**
                 * Creates a new ListBucketsRequest instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns ListBucketsRequest instance
                 */
                public static create(properties?: google.storage.v2.IListBucketsRequest): google.storage.v2.ListBucketsRequest;

                /**
                 * Encodes the specified ListBucketsRequest message. Does not implicitly {@link google.storage.v2.ListBucketsRequest.verify|verify} messages.
                 * @param message ListBucketsRequest message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.storage.v2.IListBucketsRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified ListBucketsRequest message, length delimited. Does not implicitly {@link google.storage.v2.ListBucketsRequest.verify|verify} messages.
                 * @param message ListBucketsRequest message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.storage.v2.IListBucketsRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a ListBucketsRequest message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns ListBucketsRequest
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.ListBucketsRequest;

                /**
                 * Decodes a ListBucketsRequest message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns ListBucketsRequest
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.ListBucketsRequest;

                /**
                 * Verifies a ListBucketsRequest message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a ListBucketsRequest message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns ListBucketsRequest
                 */
                public static fromObject(object: { [k: string]: any }): google.storage.v2.ListBucketsRequest;

                /**
                 * Creates a plain object from a ListBucketsRequest message. Also converts values to other types if specified.
                 * @param message ListBucketsRequest
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.storage.v2.ListBucketsRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this ListBucketsRequest to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for ListBucketsRequest
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a ListBucketsResponse. */
            interface IListBucketsResponse {

                /** ListBucketsResponse buckets */
                buckets?: (google.storage.v2.IBucket[]|null);

                /** ListBucketsResponse nextPageToken */
                nextPageToken?: (string|null);

                /** ListBucketsResponse unreachable */
                unreachable?: (string[]|null);
            }

            /** Represents a ListBucketsResponse. */
            class ListBucketsResponse implements IListBucketsResponse {

                /**
                 * Constructs a new ListBucketsResponse.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.storage.v2.IListBucketsResponse);

                /** ListBucketsResponse buckets. */
                public buckets: google.storage.v2.IBucket[];

                /** ListBucketsResponse nextPageToken. */
                public nextPageToken: string;

                /** ListBucketsResponse unreachable. */
                public unreachable: string[];

                /**
                 * Creates a new ListBucketsResponse instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns ListBucketsResponse instance
                 */
                public static create(properties?: google.storage.v2.IListBucketsResponse): google.storage.v2.ListBucketsResponse;

                /**
                 * Encodes the specified ListBucketsResponse message. Does not implicitly {@link google.storage.v2.ListBucketsResponse.verify|verify} messages.
                 * @param message ListBucketsResponse message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.storage.v2.IListBucketsResponse, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified ListBucketsResponse message, length delimited. Does not implicitly {@link google.storage.v2.ListBucketsResponse.verify|verify} messages.
                 * @param message ListBucketsResponse message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.storage.v2.IListBucketsResponse, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a ListBucketsResponse message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns ListBucketsResponse
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.ListBucketsResponse;

                /**
                 * Decodes a ListBucketsResponse message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns ListBucketsResponse
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.ListBucketsResponse;

                /**
                 * Verifies a ListBucketsResponse message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a ListBucketsResponse message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns ListBucketsResponse
                 */
                public static fromObject(object: { [k: string]: any }): google.storage.v2.ListBucketsResponse;

                /**
                 * Creates a plain object from a ListBucketsResponse message. Also converts values to other types if specified.
                 * @param message ListBucketsResponse
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.storage.v2.ListBucketsResponse, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this ListBucketsResponse to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for ListBucketsResponse
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a LockBucketRetentionPolicyRequest. */
            interface ILockBucketRetentionPolicyRequest {

                /** LockBucketRetentionPolicyRequest bucket */
                bucket?: (string|null);

                /** LockBucketRetentionPolicyRequest ifMetagenerationMatch */
                ifMetagenerationMatch?: (number|Long|string|null);
            }

            /** Represents a LockBucketRetentionPolicyRequest. */
            class LockBucketRetentionPolicyRequest implements ILockBucketRetentionPolicyRequest {

                /**
                 * Constructs a new LockBucketRetentionPolicyRequest.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.storage.v2.ILockBucketRetentionPolicyRequest);

                /** LockBucketRetentionPolicyRequest bucket. */
                public bucket: string;

                /** LockBucketRetentionPolicyRequest ifMetagenerationMatch. */
                public ifMetagenerationMatch: (number|Long|string);

                /**
                 * Creates a new LockBucketRetentionPolicyRequest instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns LockBucketRetentionPolicyRequest instance
                 */
                public static create(properties?: google.storage.v2.ILockBucketRetentionPolicyRequest): google.storage.v2.LockBucketRetentionPolicyRequest;

                /**
                 * Encodes the specified LockBucketRetentionPolicyRequest message. Does not implicitly {@link google.storage.v2.LockBucketRetentionPolicyRequest.verify|verify} messages.
                 * @param message LockBucketRetentionPolicyRequest message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.storage.v2.ILockBucketRetentionPolicyRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified LockBucketRetentionPolicyRequest message, length delimited. Does not implicitly {@link google.storage.v2.LockBucketRetentionPolicyRequest.verify|verify} messages.
                 * @param message LockBucketRetentionPolicyRequest message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.storage.v2.ILockBucketRetentionPolicyRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a LockBucketRetentionPolicyRequest message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns LockBucketRetentionPolicyRequest
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.LockBucketRetentionPolicyRequest;

                /**
                 * Decodes a LockBucketRetentionPolicyRequest message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns LockBucketRetentionPolicyRequest
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.LockBucketRetentionPolicyRequest;

                /**
                 * Verifies a LockBucketRetentionPolicyRequest message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a LockBucketRetentionPolicyRequest message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns LockBucketRetentionPolicyRequest
                 */
                public static fromObject(object: { [k: string]: any }): google.storage.v2.LockBucketRetentionPolicyRequest;

                /**
                 * Creates a plain object from a LockBucketRetentionPolicyRequest message. Also converts values to other types if specified.
                 * @param message LockBucketRetentionPolicyRequest
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.storage.v2.LockBucketRetentionPolicyRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this LockBucketRetentionPolicyRequest to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for LockBucketRetentionPolicyRequest
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of an UpdateBucketRequest. */
            interface IUpdateBucketRequest {

                /** UpdateBucketRequest bucket */
                bucket?: (google.storage.v2.IBucket|null);

                /** UpdateBucketRequest ifMetagenerationMatch */
                ifMetagenerationMatch?: (number|Long|string|null);

                /** UpdateBucketRequest ifMetagenerationNotMatch */
                ifMetagenerationNotMatch?: (number|Long|string|null);

                /** UpdateBucketRequest predefinedAcl */
                predefinedAcl?: (string|null);

                /** UpdateBucketRequest predefinedDefaultObjectAcl */
                predefinedDefaultObjectAcl?: (string|null);

                /** UpdateBucketRequest updateMask */
                updateMask?: (google.protobuf.IFieldMask|null);
            }

            /** Represents an UpdateBucketRequest. */
            class UpdateBucketRequest implements IUpdateBucketRequest {

                /**
                 * Constructs a new UpdateBucketRequest.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.storage.v2.IUpdateBucketRequest);

                /** UpdateBucketRequest bucket. */
                public bucket?: (google.storage.v2.IBucket|null);

                /** UpdateBucketRequest ifMetagenerationMatch. */
                public ifMetagenerationMatch?: (number|Long|string|null);

                /** UpdateBucketRequest ifMetagenerationNotMatch. */
                public ifMetagenerationNotMatch?: (number|Long|string|null);

                /** UpdateBucketRequest predefinedAcl. */
                public predefinedAcl: string;

                /** UpdateBucketRequest predefinedDefaultObjectAcl. */
                public predefinedDefaultObjectAcl: string;

                /** UpdateBucketRequest updateMask. */
                public updateMask?: (google.protobuf.IFieldMask|null);

                /**
                 * Creates a new UpdateBucketRequest instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns UpdateBucketRequest instance
                 */
                public static create(properties?: google.storage.v2.IUpdateBucketRequest): google.storage.v2.UpdateBucketRequest;

                /**
                 * Encodes the specified UpdateBucketRequest message. Does not implicitly {@link google.storage.v2.UpdateBucketRequest.verify|verify} messages.
                 * @param message UpdateBucketRequest message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.storage.v2.IUpdateBucketRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified UpdateBucketRequest message, length delimited. Does not implicitly {@link google.storage.v2.UpdateBucketRequest.verify|verify} messages.
                 * @param message UpdateBucketRequest message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.storage.v2.IUpdateBucketRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes an UpdateBucketRequest message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns UpdateBucketRequest
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.UpdateBucketRequest;

                /**
                 * Decodes an UpdateBucketRequest message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns UpdateBucketRequest
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.UpdateBucketRequest;

                /**
                 * Verifies an UpdateBucketRequest message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates an UpdateBucketRequest message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns UpdateBucketRequest
                 */
                public static fromObject(object: { [k: string]: any }): google.storage.v2.UpdateBucketRequest;

                /**
                 * Creates a plain object from an UpdateBucketRequest message. Also converts values to other types if specified.
                 * @param message UpdateBucketRequest
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.storage.v2.UpdateBucketRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this UpdateBucketRequest to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for UpdateBucketRequest
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a ComposeObjectRequest. */
            interface IComposeObjectRequest {

                /** ComposeObjectRequest destination */
                destination?: (google.storage.v2.IStorageObject|null);

                /** ComposeObjectRequest sourceObjects */
                sourceObjects?: (google.storage.v2.ComposeObjectRequest.ISourceObject[]|null);

                /** ComposeObjectRequest destinationPredefinedAcl */
                destinationPredefinedAcl?: (string|null);

                /** ComposeObjectRequest ifGenerationMatch */
                ifGenerationMatch?: (number|Long|string|null);

                /** ComposeObjectRequest ifMetagenerationMatch */
                ifMetagenerationMatch?: (number|Long|string|null);

                /** ComposeObjectRequest kmsKey */
                kmsKey?: (string|null);

                /** ComposeObjectRequest commonObjectRequestParams */
                commonObjectRequestParams?: (google.storage.v2.ICommonObjectRequestParams|null);

                /** ComposeObjectRequest objectChecksums */
                objectChecksums?: (google.storage.v2.IObjectChecksums|null);

                /** ComposeObjectRequest deleteSourceObjects */
                deleteSourceObjects?: (boolean|null);
            }

            /** Represents a ComposeObjectRequest. */
            class ComposeObjectRequest implements IComposeObjectRequest {

                /**
                 * Constructs a new ComposeObjectRequest.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.storage.v2.IComposeObjectRequest);

                /** ComposeObjectRequest destination. */
                public destination?: (google.storage.v2.IStorageObject|null);

                /** ComposeObjectRequest sourceObjects. */
                public sourceObjects: google.storage.v2.ComposeObjectRequest.ISourceObject[];

                /** ComposeObjectRequest destinationPredefinedAcl. */
                public destinationPredefinedAcl: string;

                /** ComposeObjectRequest ifGenerationMatch. */
                public ifGenerationMatch?: (number|Long|string|null);

                /** ComposeObjectRequest ifMetagenerationMatch. */
                public ifMetagenerationMatch?: (number|Long|string|null);

                /** ComposeObjectRequest kmsKey. */
                public kmsKey: string;

                /** ComposeObjectRequest commonObjectRequestParams. */
                public commonObjectRequestParams?: (google.storage.v2.ICommonObjectRequestParams|null);

                /** ComposeObjectRequest objectChecksums. */
                public objectChecksums?: (google.storage.v2.IObjectChecksums|null);

                /** ComposeObjectRequest deleteSourceObjects. */
                public deleteSourceObjects?: (boolean|null);

                /**
                 * Creates a new ComposeObjectRequest instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns ComposeObjectRequest instance
                 */
                public static create(properties?: google.storage.v2.IComposeObjectRequest): google.storage.v2.ComposeObjectRequest;

                /**
                 * Encodes the specified ComposeObjectRequest message. Does not implicitly {@link google.storage.v2.ComposeObjectRequest.verify|verify} messages.
                 * @param message ComposeObjectRequest message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.storage.v2.IComposeObjectRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified ComposeObjectRequest message, length delimited. Does not implicitly {@link google.storage.v2.ComposeObjectRequest.verify|verify} messages.
                 * @param message ComposeObjectRequest message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.storage.v2.IComposeObjectRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a ComposeObjectRequest message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns ComposeObjectRequest
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.ComposeObjectRequest;

                /**
                 * Decodes a ComposeObjectRequest message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns ComposeObjectRequest
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.ComposeObjectRequest;

                /**
                 * Verifies a ComposeObjectRequest message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a ComposeObjectRequest message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns ComposeObjectRequest
                 */
                public static fromObject(object: { [k: string]: any }): google.storage.v2.ComposeObjectRequest;

                /**
                 * Creates a plain object from a ComposeObjectRequest message. Also converts values to other types if specified.
                 * @param message ComposeObjectRequest
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.storage.v2.ComposeObjectRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this ComposeObjectRequest to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for ComposeObjectRequest
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            namespace ComposeObjectRequest {

                /** Properties of a SourceObject. */
                interface ISourceObject {

                    /** SourceObject name */
                    name?: (string|null);

                    /** SourceObject generation */
                    generation?: (number|Long|string|null);

                    /** SourceObject objectPreconditions */
                    objectPreconditions?: (google.storage.v2.ComposeObjectRequest.SourceObject.IObjectPreconditions|null);
                }

                /** Represents a SourceObject. */
                class SourceObject implements ISourceObject {

                    /**
                     * Constructs a new SourceObject.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: google.storage.v2.ComposeObjectRequest.ISourceObject);

                    /** SourceObject name. */
                    public name: string;

                    /** SourceObject generation. */
                    public generation: (number|Long|string);

                    /** SourceObject objectPreconditions. */
                    public objectPreconditions?: (google.storage.v2.ComposeObjectRequest.SourceObject.IObjectPreconditions|null);

                    /**
                     * Creates a new SourceObject instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns SourceObject instance
                     */
                    public static create(properties?: google.storage.v2.ComposeObjectRequest.ISourceObject): google.storage.v2.ComposeObjectRequest.SourceObject;

                    /**
                     * Encodes the specified SourceObject message. Does not implicitly {@link google.storage.v2.ComposeObjectRequest.SourceObject.verify|verify} messages.
                     * @param message SourceObject message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: google.storage.v2.ComposeObjectRequest.ISourceObject, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified SourceObject message, length delimited. Does not implicitly {@link google.storage.v2.ComposeObjectRequest.SourceObject.verify|verify} messages.
                     * @param message SourceObject message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: google.storage.v2.ComposeObjectRequest.ISourceObject, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes a SourceObject message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns SourceObject
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.ComposeObjectRequest.SourceObject;

                    /**
                     * Decodes a SourceObject message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns SourceObject
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.ComposeObjectRequest.SourceObject;

                    /**
                     * Verifies a SourceObject message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates a SourceObject message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns SourceObject
                     */
                    public static fromObject(object: { [k: string]: any }): google.storage.v2.ComposeObjectRequest.SourceObject;

                    /**
                     * Creates a plain object from a SourceObject message. Also converts values to other types if specified.
                     * @param message SourceObject
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: google.storage.v2.ComposeObjectRequest.SourceObject, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this SourceObject to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for SourceObject
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }

                namespace SourceObject {

                    /** Properties of an ObjectPreconditions. */
                    interface IObjectPreconditions {

                        /** ObjectPreconditions ifGenerationMatch */
                        ifGenerationMatch?: (number|Long|string|null);
                    }

                    /** Represents an ObjectPreconditions. */
                    class ObjectPreconditions implements IObjectPreconditions {

                        /**
                         * Constructs a new ObjectPreconditions.
                         * @param [properties] Properties to set
                         */
                        constructor(properties?: google.storage.v2.ComposeObjectRequest.SourceObject.IObjectPreconditions);

                        /** ObjectPreconditions ifGenerationMatch. */
                        public ifGenerationMatch?: (number|Long|string|null);

                        /**
                         * Creates a new ObjectPreconditions instance using the specified properties.
                         * @param [properties] Properties to set
                         * @returns ObjectPreconditions instance
                         */
                        public static create(properties?: google.storage.v2.ComposeObjectRequest.SourceObject.IObjectPreconditions): google.storage.v2.ComposeObjectRequest.SourceObject.ObjectPreconditions;

                        /**
                         * Encodes the specified ObjectPreconditions message. Does not implicitly {@link google.storage.v2.ComposeObjectRequest.SourceObject.ObjectPreconditions.verify|verify} messages.
                         * @param message ObjectPreconditions message or plain object to encode
                         * @param [writer] Writer to encode to
                         * @returns Writer
                         */
                        public static encode(message: google.storage.v2.ComposeObjectRequest.SourceObject.IObjectPreconditions, writer?: $protobuf.Writer): $protobuf.Writer;

                        /**
                         * Encodes the specified ObjectPreconditions message, length delimited. Does not implicitly {@link google.storage.v2.ComposeObjectRequest.SourceObject.ObjectPreconditions.verify|verify} messages.
                         * @param message ObjectPreconditions message or plain object to encode
                         * @param [writer] Writer to encode to
                         * @returns Writer
                         */
                        public static encodeDelimited(message: google.storage.v2.ComposeObjectRequest.SourceObject.IObjectPreconditions, writer?: $protobuf.Writer): $protobuf.Writer;

                        /**
                         * Decodes an ObjectPreconditions message from the specified reader or buffer.
                         * @param reader Reader or buffer to decode from
                         * @param [length] Message length if known beforehand
                         * @returns ObjectPreconditions
                         * @throws {Error} If the payload is not a reader or valid buffer
                         * @throws {$protobuf.util.ProtocolError} If required fields are missing
                         */
                        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.ComposeObjectRequest.SourceObject.ObjectPreconditions;

                        /**
                         * Decodes an ObjectPreconditions message from the specified reader or buffer, length delimited.
                         * @param reader Reader or buffer to decode from
                         * @returns ObjectPreconditions
                         * @throws {Error} If the payload is not a reader or valid buffer
                         * @throws {$protobuf.util.ProtocolError} If required fields are missing
                         */
                        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.ComposeObjectRequest.SourceObject.ObjectPreconditions;

                        /**
                         * Verifies an ObjectPreconditions message.
                         * @param message Plain object to verify
                         * @returns `null` if valid, otherwise the reason why it is not
                         */
                        public static verify(message: { [k: string]: any }): (string|null);

                        /**
                         * Creates an ObjectPreconditions message from a plain object. Also converts values to their respective internal types.
                         * @param object Plain object
                         * @returns ObjectPreconditions
                         */
                        public static fromObject(object: { [k: string]: any }): google.storage.v2.ComposeObjectRequest.SourceObject.ObjectPreconditions;

                        /**
                         * Creates a plain object from an ObjectPreconditions message. Also converts values to other types if specified.
                         * @param message ObjectPreconditions
                         * @param [options] Conversion options
                         * @returns Plain object
                         */
                        public static toObject(message: google.storage.v2.ComposeObjectRequest.SourceObject.ObjectPreconditions, options?: $protobuf.IConversionOptions): { [k: string]: any };

                        /**
                         * Converts this ObjectPreconditions to JSON.
                         * @returns JSON object
                         */
                        public toJSON(): { [k: string]: any };

                        /**
                         * Gets the default type url for ObjectPreconditions
                         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                         * @returns The default type url
                         */
                        public static getTypeUrl(typeUrlPrefix?: string): string;
                    }
                }
            }

            /** Properties of a DeleteObjectRequest. */
            interface IDeleteObjectRequest {

                /** DeleteObjectRequest bucket */
                bucket?: (string|null);

                /** DeleteObjectRequest object */
                object?: (string|null);

                /** DeleteObjectRequest generation */
                generation?: (number|Long|string|null);

                /** DeleteObjectRequest ifGenerationMatch */
                ifGenerationMatch?: (number|Long|string|null);

                /** DeleteObjectRequest ifGenerationNotMatch */
                ifGenerationNotMatch?: (number|Long|string|null);

                /** DeleteObjectRequest ifMetagenerationMatch */
                ifMetagenerationMatch?: (number|Long|string|null);

                /** DeleteObjectRequest ifMetagenerationNotMatch */
                ifMetagenerationNotMatch?: (number|Long|string|null);

                /** DeleteObjectRequest commonObjectRequestParams */
                commonObjectRequestParams?: (google.storage.v2.ICommonObjectRequestParams|null);
            }

            /** Represents a DeleteObjectRequest. */
            class DeleteObjectRequest implements IDeleteObjectRequest {

                /**
                 * Constructs a new DeleteObjectRequest.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.storage.v2.IDeleteObjectRequest);

                /** DeleteObjectRequest bucket. */
                public bucket: string;

                /** DeleteObjectRequest object. */
                public object: string;

                /** DeleteObjectRequest generation. */
                public generation: (number|Long|string);

                /** DeleteObjectRequest ifGenerationMatch. */
                public ifGenerationMatch?: (number|Long|string|null);

                /** DeleteObjectRequest ifGenerationNotMatch. */
                public ifGenerationNotMatch?: (number|Long|string|null);

                /** DeleteObjectRequest ifMetagenerationMatch. */
                public ifMetagenerationMatch?: (number|Long|string|null);

                /** DeleteObjectRequest ifMetagenerationNotMatch. */
                public ifMetagenerationNotMatch?: (number|Long|string|null);

                /** DeleteObjectRequest commonObjectRequestParams. */
                public commonObjectRequestParams?: (google.storage.v2.ICommonObjectRequestParams|null);

                /**
                 * Creates a new DeleteObjectRequest instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns DeleteObjectRequest instance
                 */
                public static create(properties?: google.storage.v2.IDeleteObjectRequest): google.storage.v2.DeleteObjectRequest;

                /**
                 * Encodes the specified DeleteObjectRequest message. Does not implicitly {@link google.storage.v2.DeleteObjectRequest.verify|verify} messages.
                 * @param message DeleteObjectRequest message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.storage.v2.IDeleteObjectRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified DeleteObjectRequest message, length delimited. Does not implicitly {@link google.storage.v2.DeleteObjectRequest.verify|verify} messages.
                 * @param message DeleteObjectRequest message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.storage.v2.IDeleteObjectRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a DeleteObjectRequest message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns DeleteObjectRequest
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.DeleteObjectRequest;

                /**
                 * Decodes a DeleteObjectRequest message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns DeleteObjectRequest
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.DeleteObjectRequest;

                /**
                 * Verifies a DeleteObjectRequest message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a DeleteObjectRequest message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns DeleteObjectRequest
                 */
                public static fromObject(object: { [k: string]: any }): google.storage.v2.DeleteObjectRequest;

                /**
                 * Creates a plain object from a DeleteObjectRequest message. Also converts values to other types if specified.
                 * @param message DeleteObjectRequest
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.storage.v2.DeleteObjectRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this DeleteObjectRequest to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for DeleteObjectRequest
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a RestoreObjectRequest. */
            interface IRestoreObjectRequest {

                /** RestoreObjectRequest bucket */
                bucket?: (string|null);

                /** RestoreObjectRequest object */
                object?: (string|null);

                /** RestoreObjectRequest generation */
                generation?: (number|Long|string|null);

                /** RestoreObjectRequest restoreToken */
                restoreToken?: (string|null);

                /** RestoreObjectRequest ifGenerationMatch */
                ifGenerationMatch?: (number|Long|string|null);

                /** RestoreObjectRequest ifGenerationNotMatch */
                ifGenerationNotMatch?: (number|Long|string|null);

                /** RestoreObjectRequest ifMetagenerationMatch */
                ifMetagenerationMatch?: (number|Long|string|null);

                /** RestoreObjectRequest ifMetagenerationNotMatch */
                ifMetagenerationNotMatch?: (number|Long|string|null);

                /** RestoreObjectRequest copySourceAcl */
                copySourceAcl?: (boolean|null);

                /** RestoreObjectRequest commonObjectRequestParams */
                commonObjectRequestParams?: (google.storage.v2.ICommonObjectRequestParams|null);
            }

            /** Represents a RestoreObjectRequest. */
            class RestoreObjectRequest implements IRestoreObjectRequest {

                /**
                 * Constructs a new RestoreObjectRequest.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.storage.v2.IRestoreObjectRequest);

                /** RestoreObjectRequest bucket. */
                public bucket: string;

                /** RestoreObjectRequest object. */
                public object: string;

                /** RestoreObjectRequest generation. */
                public generation: (number|Long|string);

                /** RestoreObjectRequest restoreToken. */
                public restoreToken: string;

                /** RestoreObjectRequest ifGenerationMatch. */
                public ifGenerationMatch?: (number|Long|string|null);

                /** RestoreObjectRequest ifGenerationNotMatch. */
                public ifGenerationNotMatch?: (number|Long|string|null);

                /** RestoreObjectRequest ifMetagenerationMatch. */
                public ifMetagenerationMatch?: (number|Long|string|null);

                /** RestoreObjectRequest ifMetagenerationNotMatch. */
                public ifMetagenerationNotMatch?: (number|Long|string|null);

                /** RestoreObjectRequest copySourceAcl. */
                public copySourceAcl?: (boolean|null);

                /** RestoreObjectRequest commonObjectRequestParams. */
                public commonObjectRequestParams?: (google.storage.v2.ICommonObjectRequestParams|null);

                /**
                 * Creates a new RestoreObjectRequest instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns RestoreObjectRequest instance
                 */
                public static create(properties?: google.storage.v2.IRestoreObjectRequest): google.storage.v2.RestoreObjectRequest;

                /**
                 * Encodes the specified RestoreObjectRequest message. Does not implicitly {@link google.storage.v2.RestoreObjectRequest.verify|verify} messages.
                 * @param message RestoreObjectRequest message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.storage.v2.IRestoreObjectRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified RestoreObjectRequest message, length delimited. Does not implicitly {@link google.storage.v2.RestoreObjectRequest.verify|verify} messages.
                 * @param message RestoreObjectRequest message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.storage.v2.IRestoreObjectRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a RestoreObjectRequest message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns RestoreObjectRequest
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.RestoreObjectRequest;

                /**
                 * Decodes a RestoreObjectRequest message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns RestoreObjectRequest
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.RestoreObjectRequest;

                /**
                 * Verifies a RestoreObjectRequest message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a RestoreObjectRequest message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns RestoreObjectRequest
                 */
                public static fromObject(object: { [k: string]: any }): google.storage.v2.RestoreObjectRequest;

                /**
                 * Creates a plain object from a RestoreObjectRequest message. Also converts values to other types if specified.
                 * @param message RestoreObjectRequest
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.storage.v2.RestoreObjectRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this RestoreObjectRequest to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for RestoreObjectRequest
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a CancelResumableWriteRequest. */
            interface ICancelResumableWriteRequest {

                /** CancelResumableWriteRequest uploadId */
                uploadId?: (string|null);
            }

            /** Represents a CancelResumableWriteRequest. */
            class CancelResumableWriteRequest implements ICancelResumableWriteRequest {

                /**
                 * Constructs a new CancelResumableWriteRequest.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.storage.v2.ICancelResumableWriteRequest);

                /** CancelResumableWriteRequest uploadId. */
                public uploadId: string;

                /**
                 * Creates a new CancelResumableWriteRequest instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns CancelResumableWriteRequest instance
                 */
                public static create(properties?: google.storage.v2.ICancelResumableWriteRequest): google.storage.v2.CancelResumableWriteRequest;

                /**
                 * Encodes the specified CancelResumableWriteRequest message. Does not implicitly {@link google.storage.v2.CancelResumableWriteRequest.verify|verify} messages.
                 * @param message CancelResumableWriteRequest message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.storage.v2.ICancelResumableWriteRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified CancelResumableWriteRequest message, length delimited. Does not implicitly {@link google.storage.v2.CancelResumableWriteRequest.verify|verify} messages.
                 * @param message CancelResumableWriteRequest message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.storage.v2.ICancelResumableWriteRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a CancelResumableWriteRequest message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns CancelResumableWriteRequest
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.CancelResumableWriteRequest;

                /**
                 * Decodes a CancelResumableWriteRequest message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns CancelResumableWriteRequest
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.CancelResumableWriteRequest;

                /**
                 * Verifies a CancelResumableWriteRequest message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a CancelResumableWriteRequest message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns CancelResumableWriteRequest
                 */
                public static fromObject(object: { [k: string]: any }): google.storage.v2.CancelResumableWriteRequest;

                /**
                 * Creates a plain object from a CancelResumableWriteRequest message. Also converts values to other types if specified.
                 * @param message CancelResumableWriteRequest
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.storage.v2.CancelResumableWriteRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this CancelResumableWriteRequest to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for CancelResumableWriteRequest
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a CancelResumableWriteResponse. */
            interface ICancelResumableWriteResponse {
            }

            /** Represents a CancelResumableWriteResponse. */
            class CancelResumableWriteResponse implements ICancelResumableWriteResponse {

                /**
                 * Constructs a new CancelResumableWriteResponse.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.storage.v2.ICancelResumableWriteResponse);

                /**
                 * Creates a new CancelResumableWriteResponse instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns CancelResumableWriteResponse instance
                 */
                public static create(properties?: google.storage.v2.ICancelResumableWriteResponse): google.storage.v2.CancelResumableWriteResponse;

                /**
                 * Encodes the specified CancelResumableWriteResponse message. Does not implicitly {@link google.storage.v2.CancelResumableWriteResponse.verify|verify} messages.
                 * @param message CancelResumableWriteResponse message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.storage.v2.ICancelResumableWriteResponse, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified CancelResumableWriteResponse message, length delimited. Does not implicitly {@link google.storage.v2.CancelResumableWriteResponse.verify|verify} messages.
                 * @param message CancelResumableWriteResponse message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.storage.v2.ICancelResumableWriteResponse, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a CancelResumableWriteResponse message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns CancelResumableWriteResponse
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.CancelResumableWriteResponse;

                /**
                 * Decodes a CancelResumableWriteResponse message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns CancelResumableWriteResponse
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.CancelResumableWriteResponse;

                /**
                 * Verifies a CancelResumableWriteResponse message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a CancelResumableWriteResponse message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns CancelResumableWriteResponse
                 */
                public static fromObject(object: { [k: string]: any }): google.storage.v2.CancelResumableWriteResponse;

                /**
                 * Creates a plain object from a CancelResumableWriteResponse message. Also converts values to other types if specified.
                 * @param message CancelResumableWriteResponse
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.storage.v2.CancelResumableWriteResponse, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this CancelResumableWriteResponse to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for CancelResumableWriteResponse
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a ReadObjectRequest. */
            interface IReadObjectRequest {

                /** ReadObjectRequest bucket */
                bucket?: (string|null);

                /** ReadObjectRequest object */
                object?: (string|null);

                /** ReadObjectRequest generation */
                generation?: (number|Long|string|null);

                /** ReadObjectRequest readOffset */
                readOffset?: (number|Long|string|null);

                /** ReadObjectRequest readLimit */
                readLimit?: (number|Long|string|null);

                /** ReadObjectRequest ifGenerationMatch */
                ifGenerationMatch?: (number|Long|string|null);

                /** ReadObjectRequest ifGenerationNotMatch */
                ifGenerationNotMatch?: (number|Long|string|null);

                /** ReadObjectRequest ifMetagenerationMatch */
                ifMetagenerationMatch?: (number|Long|string|null);

                /** ReadObjectRequest ifMetagenerationNotMatch */
                ifMetagenerationNotMatch?: (number|Long|string|null);

                /** ReadObjectRequest commonObjectRequestParams */
                commonObjectRequestParams?: (google.storage.v2.ICommonObjectRequestParams|null);

                /** ReadObjectRequest readMask */
                readMask?: (google.protobuf.IFieldMask|null);
            }

            /** Represents a ReadObjectRequest. */
            class ReadObjectRequest implements IReadObjectRequest {

                /**
                 * Constructs a new ReadObjectRequest.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.storage.v2.IReadObjectRequest);

                /** ReadObjectRequest bucket. */
                public bucket: string;

                /** ReadObjectRequest object. */
                public object: string;

                /** ReadObjectRequest generation. */
                public generation: (number|Long|string);

                /** ReadObjectRequest readOffset. */
                public readOffset: (number|Long|string);

                /** ReadObjectRequest readLimit. */
                public readLimit: (number|Long|string);

                /** ReadObjectRequest ifGenerationMatch. */
                public ifGenerationMatch?: (number|Long|string|null);

                /** ReadObjectRequest ifGenerationNotMatch. */
                public ifGenerationNotMatch?: (number|Long|string|null);

                /** ReadObjectRequest ifMetagenerationMatch. */
                public ifMetagenerationMatch?: (number|Long|string|null);

                /** ReadObjectRequest ifMetagenerationNotMatch. */
                public ifMetagenerationNotMatch?: (number|Long|string|null);

                /** ReadObjectRequest commonObjectRequestParams. */
                public commonObjectRequestParams?: (google.storage.v2.ICommonObjectRequestParams|null);

                /** ReadObjectRequest readMask. */
                public readMask?: (google.protobuf.IFieldMask|null);

                /**
                 * Creates a new ReadObjectRequest instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns ReadObjectRequest instance
                 */
                public static create(properties?: google.storage.v2.IReadObjectRequest): google.storage.v2.ReadObjectRequest;

                /**
                 * Encodes the specified ReadObjectRequest message. Does not implicitly {@link google.storage.v2.ReadObjectRequest.verify|verify} messages.
                 * @param message ReadObjectRequest message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.storage.v2.IReadObjectRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified ReadObjectRequest message, length delimited. Does not implicitly {@link google.storage.v2.ReadObjectRequest.verify|verify} messages.
                 * @param message ReadObjectRequest message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.storage.v2.IReadObjectRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a ReadObjectRequest message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns ReadObjectRequest
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.ReadObjectRequest;

                /**
                 * Decodes a ReadObjectRequest message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns ReadObjectRequest
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.ReadObjectRequest;

                /**
                 * Verifies a ReadObjectRequest message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a ReadObjectRequest message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns ReadObjectRequest
                 */
                public static fromObject(object: { [k: string]: any }): google.storage.v2.ReadObjectRequest;

                /**
                 * Creates a plain object from a ReadObjectRequest message. Also converts values to other types if specified.
                 * @param message ReadObjectRequest
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.storage.v2.ReadObjectRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this ReadObjectRequest to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for ReadObjectRequest
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a GetObjectRequest. */
            interface IGetObjectRequest {

                /** GetObjectRequest bucket */
                bucket?: (string|null);

                /** GetObjectRequest object */
                object?: (string|null);

                /** GetObjectRequest generation */
                generation?: (number|Long|string|null);

                /** GetObjectRequest softDeleted */
                softDeleted?: (boolean|null);

                /** GetObjectRequest ifGenerationMatch */
                ifGenerationMatch?: (number|Long|string|null);

                /** GetObjectRequest ifGenerationNotMatch */
                ifGenerationNotMatch?: (number|Long|string|null);

                /** GetObjectRequest ifMetagenerationMatch */
                ifMetagenerationMatch?: (number|Long|string|null);

                /** GetObjectRequest ifMetagenerationNotMatch */
                ifMetagenerationNotMatch?: (number|Long|string|null);

                /** GetObjectRequest commonObjectRequestParams */
                commonObjectRequestParams?: (google.storage.v2.ICommonObjectRequestParams|null);

                /** GetObjectRequest readMask */
                readMask?: (google.protobuf.IFieldMask|null);

                /** GetObjectRequest restoreToken */
                restoreToken?: (string|null);
            }

            /** Represents a GetObjectRequest. */
            class GetObjectRequest implements IGetObjectRequest {

                /**
                 * Constructs a new GetObjectRequest.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.storage.v2.IGetObjectRequest);

                /** GetObjectRequest bucket. */
                public bucket: string;

                /** GetObjectRequest object. */
                public object: string;

                /** GetObjectRequest generation. */
                public generation: (number|Long|string);

                /** GetObjectRequest softDeleted. */
                public softDeleted?: (boolean|null);

                /** GetObjectRequest ifGenerationMatch. */
                public ifGenerationMatch?: (number|Long|string|null);

                /** GetObjectRequest ifGenerationNotMatch. */
                public ifGenerationNotMatch?: (number|Long|string|null);

                /** GetObjectRequest ifMetagenerationMatch. */
                public ifMetagenerationMatch?: (number|Long|string|null);

                /** GetObjectRequest ifMetagenerationNotMatch. */
                public ifMetagenerationNotMatch?: (number|Long|string|null);

                /** GetObjectRequest commonObjectRequestParams. */
                public commonObjectRequestParams?: (google.storage.v2.ICommonObjectRequestParams|null);

                /** GetObjectRequest readMask. */
                public readMask?: (google.protobuf.IFieldMask|null);

                /** GetObjectRequest restoreToken. */
                public restoreToken: string;

                /**
                 * Creates a new GetObjectRequest instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns GetObjectRequest instance
                 */
                public static create(properties?: google.storage.v2.IGetObjectRequest): google.storage.v2.GetObjectRequest;

                /**
                 * Encodes the specified GetObjectRequest message. Does not implicitly {@link google.storage.v2.GetObjectRequest.verify|verify} messages.
                 * @param message GetObjectRequest message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.storage.v2.IGetObjectRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified GetObjectRequest message, length delimited. Does not implicitly {@link google.storage.v2.GetObjectRequest.verify|verify} messages.
                 * @param message GetObjectRequest message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.storage.v2.IGetObjectRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a GetObjectRequest message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns GetObjectRequest
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.GetObjectRequest;

                /**
                 * Decodes a GetObjectRequest message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns GetObjectRequest
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.GetObjectRequest;

                /**
                 * Verifies a GetObjectRequest message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a GetObjectRequest message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns GetObjectRequest
                 */
                public static fromObject(object: { [k: string]: any }): google.storage.v2.GetObjectRequest;

                /**
                 * Creates a plain object from a GetObjectRequest message. Also converts values to other types if specified.
                 * @param message GetObjectRequest
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.storage.v2.GetObjectRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this GetObjectRequest to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for GetObjectRequest
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a ReadObjectResponse. */
            interface IReadObjectResponse {

                /** ReadObjectResponse checksummedData */
                checksummedData?: (google.storage.v2.IChecksummedData|null);

                /** ReadObjectResponse objectChecksums */
                objectChecksums?: (google.storage.v2.IObjectChecksums|null);

                /** ReadObjectResponse contentRange */
                contentRange?: (google.storage.v2.IContentRange|null);

                /** ReadObjectResponse metadata */
                metadata?: (google.storage.v2.IStorageObject|null);
            }

            /** Represents a ReadObjectResponse. */
            class ReadObjectResponse implements IReadObjectResponse {

                /**
                 * Constructs a new ReadObjectResponse.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.storage.v2.IReadObjectResponse);

                /** ReadObjectResponse checksummedData. */
                public checksummedData?: (google.storage.v2.IChecksummedData|null);

                /** ReadObjectResponse objectChecksums. */
                public objectChecksums?: (google.storage.v2.IObjectChecksums|null);

                /** ReadObjectResponse contentRange. */
                public contentRange?: (google.storage.v2.IContentRange|null);

                /** ReadObjectResponse metadata. */
                public metadata?: (google.storage.v2.IStorageObject|null);

                /**
                 * Creates a new ReadObjectResponse instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns ReadObjectResponse instance
                 */
                public static create(properties?: google.storage.v2.IReadObjectResponse): google.storage.v2.ReadObjectResponse;

                /**
                 * Encodes the specified ReadObjectResponse message. Does not implicitly {@link google.storage.v2.ReadObjectResponse.verify|verify} messages.
                 * @param message ReadObjectResponse message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.storage.v2.IReadObjectResponse, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified ReadObjectResponse message, length delimited. Does not implicitly {@link google.storage.v2.ReadObjectResponse.verify|verify} messages.
                 * @param message ReadObjectResponse message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.storage.v2.IReadObjectResponse, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a ReadObjectResponse message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns ReadObjectResponse
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.ReadObjectResponse;

                /**
                 * Decodes a ReadObjectResponse message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns ReadObjectResponse
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.ReadObjectResponse;

                /**
                 * Verifies a ReadObjectResponse message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a ReadObjectResponse message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns ReadObjectResponse
                 */
                public static fromObject(object: { [k: string]: any }): google.storage.v2.ReadObjectResponse;

                /**
                 * Creates a plain object from a ReadObjectResponse message. Also converts values to other types if specified.
                 * @param message ReadObjectResponse
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.storage.v2.ReadObjectResponse, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this ReadObjectResponse to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for ReadObjectResponse
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a BidiReadObjectSpec. */
            interface IBidiReadObjectSpec {

                /** BidiReadObjectSpec bucket */
                bucket?: (string|null);

                /** BidiReadObjectSpec object */
                object?: (string|null);

                /** BidiReadObjectSpec generation */
                generation?: (number|Long|string|null);

                /** BidiReadObjectSpec ifGenerationMatch */
                ifGenerationMatch?: (number|Long|string|null);

                /** BidiReadObjectSpec ifGenerationNotMatch */
                ifGenerationNotMatch?: (number|Long|string|null);

                /** BidiReadObjectSpec ifMetagenerationMatch */
                ifMetagenerationMatch?: (number|Long|string|null);

                /** BidiReadObjectSpec ifMetagenerationNotMatch */
                ifMetagenerationNotMatch?: (number|Long|string|null);

                /** BidiReadObjectSpec commonObjectRequestParams */
                commonObjectRequestParams?: (google.storage.v2.ICommonObjectRequestParams|null);

                /** BidiReadObjectSpec readMask */
                readMask?: (google.protobuf.IFieldMask|null);

                /** BidiReadObjectSpec readHandle */
                readHandle?: (google.storage.v2.IBidiReadHandle|null);

                /** BidiReadObjectSpec routingToken */
                routingToken?: (string|null);
            }

            /** Represents a BidiReadObjectSpec. */
            class BidiReadObjectSpec implements IBidiReadObjectSpec {

                /**
                 * Constructs a new BidiReadObjectSpec.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.storage.v2.IBidiReadObjectSpec);

                /** BidiReadObjectSpec bucket. */
                public bucket: string;

                /** BidiReadObjectSpec object. */
                public object: string;

                /** BidiReadObjectSpec generation. */
                public generation: (number|Long|string);

                /** BidiReadObjectSpec ifGenerationMatch. */
                public ifGenerationMatch?: (number|Long|string|null);

                /** BidiReadObjectSpec ifGenerationNotMatch. */
                public ifGenerationNotMatch?: (number|Long|string|null);

                /** BidiReadObjectSpec ifMetagenerationMatch. */
                public ifMetagenerationMatch?: (number|Long|string|null);

                /** BidiReadObjectSpec ifMetagenerationNotMatch. */
                public ifMetagenerationNotMatch?: (number|Long|string|null);

                /** BidiReadObjectSpec commonObjectRequestParams. */
                public commonObjectRequestParams?: (google.storage.v2.ICommonObjectRequestParams|null);

                /** BidiReadObjectSpec readMask. */
                public readMask?: (google.protobuf.IFieldMask|null);

                /** BidiReadObjectSpec readHandle. */
                public readHandle?: (google.storage.v2.IBidiReadHandle|null);

                /** BidiReadObjectSpec routingToken. */
                public routingToken?: (string|null);

                /**
                 * Creates a new BidiReadObjectSpec instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns BidiReadObjectSpec instance
                 */
                public static create(properties?: google.storage.v2.IBidiReadObjectSpec): google.storage.v2.BidiReadObjectSpec;

                /**
                 * Encodes the specified BidiReadObjectSpec message. Does not implicitly {@link google.storage.v2.BidiReadObjectSpec.verify|verify} messages.
                 * @param message BidiReadObjectSpec message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.storage.v2.IBidiReadObjectSpec, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified BidiReadObjectSpec message, length delimited. Does not implicitly {@link google.storage.v2.BidiReadObjectSpec.verify|verify} messages.
                 * @param message BidiReadObjectSpec message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.storage.v2.IBidiReadObjectSpec, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a BidiReadObjectSpec message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns BidiReadObjectSpec
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.BidiReadObjectSpec;

                /**
                 * Decodes a BidiReadObjectSpec message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns BidiReadObjectSpec
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.BidiReadObjectSpec;

                /**
                 * Verifies a BidiReadObjectSpec message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a BidiReadObjectSpec message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns BidiReadObjectSpec
                 */
                public static fromObject(object: { [k: string]: any }): google.storage.v2.BidiReadObjectSpec;

                /**
                 * Creates a plain object from a BidiReadObjectSpec message. Also converts values to other types if specified.
                 * @param message BidiReadObjectSpec
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.storage.v2.BidiReadObjectSpec, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this BidiReadObjectSpec to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for BidiReadObjectSpec
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a BidiReadObjectRequest. */
            interface IBidiReadObjectRequest {

                /** BidiReadObjectRequest readObjectSpec */
                readObjectSpec?: (google.storage.v2.IBidiReadObjectSpec|null);

                /** BidiReadObjectRequest readRanges */
                readRanges?: (google.storage.v2.IReadRange[]|null);
            }

            /** Represents a BidiReadObjectRequest. */
            class BidiReadObjectRequest implements IBidiReadObjectRequest {

                /**
                 * Constructs a new BidiReadObjectRequest.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.storage.v2.IBidiReadObjectRequest);

                /** BidiReadObjectRequest readObjectSpec. */
                public readObjectSpec?: (google.storage.v2.IBidiReadObjectSpec|null);

                /** BidiReadObjectRequest readRanges. */
                public readRanges: google.storage.v2.IReadRange[];

                /**
                 * Creates a new BidiReadObjectRequest instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns BidiReadObjectRequest instance
                 */
                public static create(properties?: google.storage.v2.IBidiReadObjectRequest): google.storage.v2.BidiReadObjectRequest;

                /**
                 * Encodes the specified BidiReadObjectRequest message. Does not implicitly {@link google.storage.v2.BidiReadObjectRequest.verify|verify} messages.
                 * @param message BidiReadObjectRequest message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.storage.v2.IBidiReadObjectRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified BidiReadObjectRequest message, length delimited. Does not implicitly {@link google.storage.v2.BidiReadObjectRequest.verify|verify} messages.
                 * @param message BidiReadObjectRequest message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.storage.v2.IBidiReadObjectRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a BidiReadObjectRequest message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns BidiReadObjectRequest
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.BidiReadObjectRequest;

                /**
                 * Decodes a BidiReadObjectRequest message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns BidiReadObjectRequest
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.BidiReadObjectRequest;

                /**
                 * Verifies a BidiReadObjectRequest message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a BidiReadObjectRequest message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns BidiReadObjectRequest
                 */
                public static fromObject(object: { [k: string]: any }): google.storage.v2.BidiReadObjectRequest;

                /**
                 * Creates a plain object from a BidiReadObjectRequest message. Also converts values to other types if specified.
                 * @param message BidiReadObjectRequest
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.storage.v2.BidiReadObjectRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this BidiReadObjectRequest to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for BidiReadObjectRequest
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a BidiReadObjectResponse. */
            interface IBidiReadObjectResponse {

                /** BidiReadObjectResponse objectDataRanges */
                objectDataRanges?: (google.storage.v2.IObjectRangeData[]|null);

                /** BidiReadObjectResponse metadata */
                metadata?: (google.storage.v2.IStorageObject|null);

                /** BidiReadObjectResponse readHandle */
                readHandle?: (google.storage.v2.IBidiReadHandle|null);
            }

            /** Represents a BidiReadObjectResponse. */
            class BidiReadObjectResponse implements IBidiReadObjectResponse {

                /**
                 * Constructs a new BidiReadObjectResponse.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.storage.v2.IBidiReadObjectResponse);

                /** BidiReadObjectResponse objectDataRanges. */
                public objectDataRanges: google.storage.v2.IObjectRangeData[];

                /** BidiReadObjectResponse metadata. */
                public metadata?: (google.storage.v2.IStorageObject|null);

                /** BidiReadObjectResponse readHandle. */
                public readHandle?: (google.storage.v2.IBidiReadHandle|null);

                /**
                 * Creates a new BidiReadObjectResponse instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns BidiReadObjectResponse instance
                 */
                public static create(properties?: google.storage.v2.IBidiReadObjectResponse): google.storage.v2.BidiReadObjectResponse;

                /**
                 * Encodes the specified BidiReadObjectResponse message. Does not implicitly {@link google.storage.v2.BidiReadObjectResponse.verify|verify} messages.
                 * @param message BidiReadObjectResponse message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.storage.v2.IBidiReadObjectResponse, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified BidiReadObjectResponse message, length delimited. Does not implicitly {@link google.storage.v2.BidiReadObjectResponse.verify|verify} messages.
                 * @param message BidiReadObjectResponse message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.storage.v2.IBidiReadObjectResponse, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a BidiReadObjectResponse message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns BidiReadObjectResponse
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.BidiReadObjectResponse;

                /**
                 * Decodes a BidiReadObjectResponse message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns BidiReadObjectResponse
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.BidiReadObjectResponse;

                /**
                 * Verifies a BidiReadObjectResponse message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a BidiReadObjectResponse message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns BidiReadObjectResponse
                 */
                public static fromObject(object: { [k: string]: any }): google.storage.v2.BidiReadObjectResponse;

                /**
                 * Creates a plain object from a BidiReadObjectResponse message. Also converts values to other types if specified.
                 * @param message BidiReadObjectResponse
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.storage.v2.BidiReadObjectResponse, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this BidiReadObjectResponse to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for BidiReadObjectResponse
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a BidiReadObjectRedirectedError. */
            interface IBidiReadObjectRedirectedError {

                /** BidiReadObjectRedirectedError readHandle */
                readHandle?: (google.storage.v2.IBidiReadHandle|null);

                /** BidiReadObjectRedirectedError routingToken */
                routingToken?: (string|null);
            }

            /** Represents a BidiReadObjectRedirectedError. */
            class BidiReadObjectRedirectedError implements IBidiReadObjectRedirectedError {

                /**
                 * Constructs a new BidiReadObjectRedirectedError.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.storage.v2.IBidiReadObjectRedirectedError);

                /** BidiReadObjectRedirectedError readHandle. */
                public readHandle?: (google.storage.v2.IBidiReadHandle|null);

                /** BidiReadObjectRedirectedError routingToken. */
                public routingToken?: (string|null);

                /**
                 * Creates a new BidiReadObjectRedirectedError instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns BidiReadObjectRedirectedError instance
                 */
                public static create(properties?: google.storage.v2.IBidiReadObjectRedirectedError): google.storage.v2.BidiReadObjectRedirectedError;

                /**
                 * Encodes the specified BidiReadObjectRedirectedError message. Does not implicitly {@link google.storage.v2.BidiReadObjectRedirectedError.verify|verify} messages.
                 * @param message BidiReadObjectRedirectedError message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.storage.v2.IBidiReadObjectRedirectedError, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified BidiReadObjectRedirectedError message, length delimited. Does not implicitly {@link google.storage.v2.BidiReadObjectRedirectedError.verify|verify} messages.
                 * @param message BidiReadObjectRedirectedError message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.storage.v2.IBidiReadObjectRedirectedError, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a BidiReadObjectRedirectedError message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns BidiReadObjectRedirectedError
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.BidiReadObjectRedirectedError;

                /**
                 * Decodes a BidiReadObjectRedirectedError message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns BidiReadObjectRedirectedError
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.BidiReadObjectRedirectedError;

                /**
                 * Verifies a BidiReadObjectRedirectedError message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a BidiReadObjectRedirectedError message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns BidiReadObjectRedirectedError
                 */
                public static fromObject(object: { [k: string]: any }): google.storage.v2.BidiReadObjectRedirectedError;

                /**
                 * Creates a plain object from a BidiReadObjectRedirectedError message. Also converts values to other types if specified.
                 * @param message BidiReadObjectRedirectedError
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.storage.v2.BidiReadObjectRedirectedError, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this BidiReadObjectRedirectedError to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for BidiReadObjectRedirectedError
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a BidiWriteObjectRedirectedError. */
            interface IBidiWriteObjectRedirectedError {

                /** BidiWriteObjectRedirectedError routingToken */
                routingToken?: (string|null);

                /** BidiWriteObjectRedirectedError writeHandle */
                writeHandle?: (google.storage.v2.IBidiWriteHandle|null);

                /** BidiWriteObjectRedirectedError generation */
                generation?: (number|Long|string|null);
            }

            /** Represents a BidiWriteObjectRedirectedError. */
            class BidiWriteObjectRedirectedError implements IBidiWriteObjectRedirectedError {

                /**
                 * Constructs a new BidiWriteObjectRedirectedError.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.storage.v2.IBidiWriteObjectRedirectedError);

                /** BidiWriteObjectRedirectedError routingToken. */
                public routingToken?: (string|null);

                /** BidiWriteObjectRedirectedError writeHandle. */
                public writeHandle?: (google.storage.v2.IBidiWriteHandle|null);

                /** BidiWriteObjectRedirectedError generation. */
                public generation?: (number|Long|string|null);

                /**
                 * Creates a new BidiWriteObjectRedirectedError instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns BidiWriteObjectRedirectedError instance
                 */
                public static create(properties?: google.storage.v2.IBidiWriteObjectRedirectedError): google.storage.v2.BidiWriteObjectRedirectedError;

                /**
                 * Encodes the specified BidiWriteObjectRedirectedError message. Does not implicitly {@link google.storage.v2.BidiWriteObjectRedirectedError.verify|verify} messages.
                 * @param message BidiWriteObjectRedirectedError message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.storage.v2.IBidiWriteObjectRedirectedError, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified BidiWriteObjectRedirectedError message, length delimited. Does not implicitly {@link google.storage.v2.BidiWriteObjectRedirectedError.verify|verify} messages.
                 * @param message BidiWriteObjectRedirectedError message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.storage.v2.IBidiWriteObjectRedirectedError, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a BidiWriteObjectRedirectedError message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns BidiWriteObjectRedirectedError
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.BidiWriteObjectRedirectedError;

                /**
                 * Decodes a BidiWriteObjectRedirectedError message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns BidiWriteObjectRedirectedError
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.BidiWriteObjectRedirectedError;

                /**
                 * Verifies a BidiWriteObjectRedirectedError message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a BidiWriteObjectRedirectedError message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns BidiWriteObjectRedirectedError
                 */
                public static fromObject(object: { [k: string]: any }): google.storage.v2.BidiWriteObjectRedirectedError;

                /**
                 * Creates a plain object from a BidiWriteObjectRedirectedError message. Also converts values to other types if specified.
                 * @param message BidiWriteObjectRedirectedError
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.storage.v2.BidiWriteObjectRedirectedError, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this BidiWriteObjectRedirectedError to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for BidiWriteObjectRedirectedError
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a BidiReadObjectError. */
            interface IBidiReadObjectError {

                /** BidiReadObjectError readRangeErrors */
                readRangeErrors?: (google.storage.v2.IReadRangeError[]|null);
            }

            /** Represents a BidiReadObjectError. */
            class BidiReadObjectError implements IBidiReadObjectError {

                /**
                 * Constructs a new BidiReadObjectError.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.storage.v2.IBidiReadObjectError);

                /** BidiReadObjectError readRangeErrors. */
                public readRangeErrors: google.storage.v2.IReadRangeError[];

                /**
                 * Creates a new BidiReadObjectError instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns BidiReadObjectError instance
                 */
                public static create(properties?: google.storage.v2.IBidiReadObjectError): google.storage.v2.BidiReadObjectError;

                /**
                 * Encodes the specified BidiReadObjectError message. Does not implicitly {@link google.storage.v2.BidiReadObjectError.verify|verify} messages.
                 * @param message BidiReadObjectError message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.storage.v2.IBidiReadObjectError, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified BidiReadObjectError message, length delimited. Does not implicitly {@link google.storage.v2.BidiReadObjectError.verify|verify} messages.
                 * @param message BidiReadObjectError message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.storage.v2.IBidiReadObjectError, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a BidiReadObjectError message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns BidiReadObjectError
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.BidiReadObjectError;

                /**
                 * Decodes a BidiReadObjectError message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns BidiReadObjectError
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.BidiReadObjectError;

                /**
                 * Verifies a BidiReadObjectError message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a BidiReadObjectError message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns BidiReadObjectError
                 */
                public static fromObject(object: { [k: string]: any }): google.storage.v2.BidiReadObjectError;

                /**
                 * Creates a plain object from a BidiReadObjectError message. Also converts values to other types if specified.
                 * @param message BidiReadObjectError
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.storage.v2.BidiReadObjectError, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this BidiReadObjectError to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for BidiReadObjectError
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a ReadRangeError. */
            interface IReadRangeError {

                /** ReadRangeError readId */
                readId?: (number|Long|string|null);

                /** ReadRangeError status */
                status?: (google.rpc.IStatus|null);
            }

            /** Represents a ReadRangeError. */
            class ReadRangeError implements IReadRangeError {

                /**
                 * Constructs a new ReadRangeError.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.storage.v2.IReadRangeError);

                /** ReadRangeError readId. */
                public readId: (number|Long|string);

                /** ReadRangeError status. */
                public status?: (google.rpc.IStatus|null);

                /**
                 * Creates a new ReadRangeError instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns ReadRangeError instance
                 */
                public static create(properties?: google.storage.v2.IReadRangeError): google.storage.v2.ReadRangeError;

                /**
                 * Encodes the specified ReadRangeError message. Does not implicitly {@link google.storage.v2.ReadRangeError.verify|verify} messages.
                 * @param message ReadRangeError message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.storage.v2.IReadRangeError, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified ReadRangeError message, length delimited. Does not implicitly {@link google.storage.v2.ReadRangeError.verify|verify} messages.
                 * @param message ReadRangeError message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.storage.v2.IReadRangeError, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a ReadRangeError message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns ReadRangeError
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.ReadRangeError;

                /**
                 * Decodes a ReadRangeError message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns ReadRangeError
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.ReadRangeError;

                /**
                 * Verifies a ReadRangeError message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a ReadRangeError message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns ReadRangeError
                 */
                public static fromObject(object: { [k: string]: any }): google.storage.v2.ReadRangeError;

                /**
                 * Creates a plain object from a ReadRangeError message. Also converts values to other types if specified.
                 * @param message ReadRangeError
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.storage.v2.ReadRangeError, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this ReadRangeError to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for ReadRangeError
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a ReadRange. */
            interface IReadRange {

                /** ReadRange readOffset */
                readOffset?: (number|Long|string|null);

                /** ReadRange readLength */
                readLength?: (number|Long|string|null);

                /** ReadRange readId */
                readId?: (number|Long|string|null);
            }

            /** Represents a ReadRange. */
            class ReadRange implements IReadRange {

                /**
                 * Constructs a new ReadRange.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.storage.v2.IReadRange);

                /** ReadRange readOffset. */
                public readOffset: (number|Long|string);

                /** ReadRange readLength. */
                public readLength: (number|Long|string);

                /** ReadRange readId. */
                public readId: (number|Long|string);

                /**
                 * Creates a new ReadRange instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns ReadRange instance
                 */
                public static create(properties?: google.storage.v2.IReadRange): google.storage.v2.ReadRange;

                /**
                 * Encodes the specified ReadRange message. Does not implicitly {@link google.storage.v2.ReadRange.verify|verify} messages.
                 * @param message ReadRange message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.storage.v2.IReadRange, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified ReadRange message, length delimited. Does not implicitly {@link google.storage.v2.ReadRange.verify|verify} messages.
                 * @param message ReadRange message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.storage.v2.IReadRange, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a ReadRange message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns ReadRange
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.ReadRange;

                /**
                 * Decodes a ReadRange message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns ReadRange
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.ReadRange;

                /**
                 * Verifies a ReadRange message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a ReadRange message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns ReadRange
                 */
                public static fromObject(object: { [k: string]: any }): google.storage.v2.ReadRange;

                /**
                 * Creates a plain object from a ReadRange message. Also converts values to other types if specified.
                 * @param message ReadRange
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.storage.v2.ReadRange, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this ReadRange to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for ReadRange
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of an ObjectRangeData. */
            interface IObjectRangeData {

                /** ObjectRangeData checksummedData */
                checksummedData?: (google.storage.v2.IChecksummedData|null);

                /** ObjectRangeData readRange */
                readRange?: (google.storage.v2.IReadRange|null);

                /** ObjectRangeData rangeEnd */
                rangeEnd?: (boolean|null);
            }

            /** Represents an ObjectRangeData. */
            class ObjectRangeData implements IObjectRangeData {

                /**
                 * Constructs a new ObjectRangeData.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.storage.v2.IObjectRangeData);

                /** ObjectRangeData checksummedData. */
                public checksummedData?: (google.storage.v2.IChecksummedData|null);

                /** ObjectRangeData readRange. */
                public readRange?: (google.storage.v2.IReadRange|null);

                /** ObjectRangeData rangeEnd. */
                public rangeEnd: boolean;

                /**
                 * Creates a new ObjectRangeData instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns ObjectRangeData instance
                 */
                public static create(properties?: google.storage.v2.IObjectRangeData): google.storage.v2.ObjectRangeData;

                /**
                 * Encodes the specified ObjectRangeData message. Does not implicitly {@link google.storage.v2.ObjectRangeData.verify|verify} messages.
                 * @param message ObjectRangeData message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.storage.v2.IObjectRangeData, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified ObjectRangeData message, length delimited. Does not implicitly {@link google.storage.v2.ObjectRangeData.verify|verify} messages.
                 * @param message ObjectRangeData message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.storage.v2.IObjectRangeData, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes an ObjectRangeData message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns ObjectRangeData
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.ObjectRangeData;

                /**
                 * Decodes an ObjectRangeData message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns ObjectRangeData
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.ObjectRangeData;

                /**
                 * Verifies an ObjectRangeData message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates an ObjectRangeData message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns ObjectRangeData
                 */
                public static fromObject(object: { [k: string]: any }): google.storage.v2.ObjectRangeData;

                /**
                 * Creates a plain object from an ObjectRangeData message. Also converts values to other types if specified.
                 * @param message ObjectRangeData
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.storage.v2.ObjectRangeData, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this ObjectRangeData to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for ObjectRangeData
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a BidiReadHandle. */
            interface IBidiReadHandle {

                /** BidiReadHandle handle */
                handle?: (Uint8Array|Buffer|string|null);
            }

            /** Represents a BidiReadHandle. */
            class BidiReadHandle implements IBidiReadHandle {

                /**
                 * Constructs a new BidiReadHandle.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.storage.v2.IBidiReadHandle);

                /** BidiReadHandle handle. */
                public handle: (Uint8Array|Buffer|string);

                /**
                 * Creates a new BidiReadHandle instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns BidiReadHandle instance
                 */
                public static create(properties?: google.storage.v2.IBidiReadHandle): google.storage.v2.BidiReadHandle;

                /**
                 * Encodes the specified BidiReadHandle message. Does not implicitly {@link google.storage.v2.BidiReadHandle.verify|verify} messages.
                 * @param message BidiReadHandle message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.storage.v2.IBidiReadHandle, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified BidiReadHandle message, length delimited. Does not implicitly {@link google.storage.v2.BidiReadHandle.verify|verify} messages.
                 * @param message BidiReadHandle message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.storage.v2.IBidiReadHandle, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a BidiReadHandle message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns BidiReadHandle
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.BidiReadHandle;

                /**
                 * Decodes a BidiReadHandle message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns BidiReadHandle
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.BidiReadHandle;

                /**
                 * Verifies a BidiReadHandle message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a BidiReadHandle message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns BidiReadHandle
                 */
                public static fromObject(object: { [k: string]: any }): google.storage.v2.BidiReadHandle;

                /**
                 * Creates a plain object from a BidiReadHandle message. Also converts values to other types if specified.
                 * @param message BidiReadHandle
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.storage.v2.BidiReadHandle, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this BidiReadHandle to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for BidiReadHandle
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a BidiWriteHandle. */
            interface IBidiWriteHandle {

                /** BidiWriteHandle handle */
                handle?: (Uint8Array|Buffer|string|null);
            }

            /** Represents a BidiWriteHandle. */
            class BidiWriteHandle implements IBidiWriteHandle {

                /**
                 * Constructs a new BidiWriteHandle.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.storage.v2.IBidiWriteHandle);

                /** BidiWriteHandle handle. */
                public handle: (Uint8Array|Buffer|string);

                /**
                 * Creates a new BidiWriteHandle instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns BidiWriteHandle instance
                 */
                public static create(properties?: google.storage.v2.IBidiWriteHandle): google.storage.v2.BidiWriteHandle;

                /**
                 * Encodes the specified BidiWriteHandle message. Does not implicitly {@link google.storage.v2.BidiWriteHandle.verify|verify} messages.
                 * @param message BidiWriteHandle message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.storage.v2.IBidiWriteHandle, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified BidiWriteHandle message, length delimited. Does not implicitly {@link google.storage.v2.BidiWriteHandle.verify|verify} messages.
                 * @param message BidiWriteHandle message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.storage.v2.IBidiWriteHandle, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a BidiWriteHandle message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns BidiWriteHandle
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.BidiWriteHandle;

                /**
                 * Decodes a BidiWriteHandle message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns BidiWriteHandle
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.BidiWriteHandle;

                /**
                 * Verifies a BidiWriteHandle message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a BidiWriteHandle message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns BidiWriteHandle
                 */
                public static fromObject(object: { [k: string]: any }): google.storage.v2.BidiWriteHandle;

                /**
                 * Creates a plain object from a BidiWriteHandle message. Also converts values to other types if specified.
                 * @param message BidiWriteHandle
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.storage.v2.BidiWriteHandle, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this BidiWriteHandle to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for BidiWriteHandle
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a WriteObjectSpec. */
            interface IWriteObjectSpec {

                /** WriteObjectSpec resource */
                resource?: (google.storage.v2.IStorageObject|null);

                /** WriteObjectSpec predefinedAcl */
                predefinedAcl?: (string|null);

                /** WriteObjectSpec ifGenerationMatch */
                ifGenerationMatch?: (number|Long|string|null);

                /** WriteObjectSpec ifGenerationNotMatch */
                ifGenerationNotMatch?: (number|Long|string|null);

                /** WriteObjectSpec ifMetagenerationMatch */
                ifMetagenerationMatch?: (number|Long|string|null);

                /** WriteObjectSpec ifMetagenerationNotMatch */
                ifMetagenerationNotMatch?: (number|Long|string|null);

                /** WriteObjectSpec objectSize */
                objectSize?: (number|Long|string|null);

                /** WriteObjectSpec appendable */
                appendable?: (boolean|null);
            }

            /** Represents a WriteObjectSpec. */
            class WriteObjectSpec implements IWriteObjectSpec {

                /**
                 * Constructs a new WriteObjectSpec.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.storage.v2.IWriteObjectSpec);

                /** WriteObjectSpec resource. */
                public resource?: (google.storage.v2.IStorageObject|null);

                /** WriteObjectSpec predefinedAcl. */
                public predefinedAcl: string;

                /** WriteObjectSpec ifGenerationMatch. */
                public ifGenerationMatch?: (number|Long|string|null);

                /** WriteObjectSpec ifGenerationNotMatch. */
                public ifGenerationNotMatch?: (number|Long|string|null);

                /** WriteObjectSpec ifMetagenerationMatch. */
                public ifMetagenerationMatch?: (number|Long|string|null);

                /** WriteObjectSpec ifMetagenerationNotMatch. */
                public ifMetagenerationNotMatch?: (number|Long|string|null);

                /** WriteObjectSpec objectSize. */
                public objectSize?: (number|Long|string|null);

                /** WriteObjectSpec appendable. */
                public appendable?: (boolean|null);

                /**
                 * Creates a new WriteObjectSpec instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns WriteObjectSpec instance
                 */
                public static create(properties?: google.storage.v2.IWriteObjectSpec): google.storage.v2.WriteObjectSpec;

                /**
                 * Encodes the specified WriteObjectSpec message. Does not implicitly {@link google.storage.v2.WriteObjectSpec.verify|verify} messages.
                 * @param message WriteObjectSpec message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.storage.v2.IWriteObjectSpec, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified WriteObjectSpec message, length delimited. Does not implicitly {@link google.storage.v2.WriteObjectSpec.verify|verify} messages.
                 * @param message WriteObjectSpec message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.storage.v2.IWriteObjectSpec, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a WriteObjectSpec message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns WriteObjectSpec
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.WriteObjectSpec;

                /**
                 * Decodes a WriteObjectSpec message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns WriteObjectSpec
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.WriteObjectSpec;

                /**
                 * Verifies a WriteObjectSpec message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a WriteObjectSpec message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns WriteObjectSpec
                 */
                public static fromObject(object: { [k: string]: any }): google.storage.v2.WriteObjectSpec;

                /**
                 * Creates a plain object from a WriteObjectSpec message. Also converts values to other types if specified.
                 * @param message WriteObjectSpec
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.storage.v2.WriteObjectSpec, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this WriteObjectSpec to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for WriteObjectSpec
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a WriteObjectRequest. */
            interface IWriteObjectRequest {

                /** WriteObjectRequest uploadId */
                uploadId?: (string|null);

                /** WriteObjectRequest writeObjectSpec */
                writeObjectSpec?: (google.storage.v2.IWriteObjectSpec|null);

                /** WriteObjectRequest writeOffset */
                writeOffset?: (number|Long|string|null);

                /** WriteObjectRequest checksummedData */
                checksummedData?: (google.storage.v2.IChecksummedData|null);

                /** WriteObjectRequest objectChecksums */
                objectChecksums?: (google.storage.v2.IObjectChecksums|null);

                /** WriteObjectRequest finishWrite */
                finishWrite?: (boolean|null);

                /** WriteObjectRequest commonObjectRequestParams */
                commonObjectRequestParams?: (google.storage.v2.ICommonObjectRequestParams|null);
            }

            /** Represents a WriteObjectRequest. */
            class WriteObjectRequest implements IWriteObjectRequest {

                /**
                 * Constructs a new WriteObjectRequest.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.storage.v2.IWriteObjectRequest);

                /** WriteObjectRequest uploadId. */
                public uploadId?: (string|null);

                /** WriteObjectRequest writeObjectSpec. */
                public writeObjectSpec?: (google.storage.v2.IWriteObjectSpec|null);

                /** WriteObjectRequest writeOffset. */
                public writeOffset: (number|Long|string);

                /** WriteObjectRequest checksummedData. */
                public checksummedData?: (google.storage.v2.IChecksummedData|null);

                /** WriteObjectRequest objectChecksums. */
                public objectChecksums?: (google.storage.v2.IObjectChecksums|null);

                /** WriteObjectRequest finishWrite. */
                public finishWrite: boolean;

                /** WriteObjectRequest commonObjectRequestParams. */
                public commonObjectRequestParams?: (google.storage.v2.ICommonObjectRequestParams|null);

                /** WriteObjectRequest firstMessage. */
                public firstMessage?: ("uploadId"|"writeObjectSpec");

                /** WriteObjectRequest data. */
                public data?: "checksummedData";

                /**
                 * Creates a new WriteObjectRequest instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns WriteObjectRequest instance
                 */
                public static create(properties?: google.storage.v2.IWriteObjectRequest): google.storage.v2.WriteObjectRequest;

                /**
                 * Encodes the specified WriteObjectRequest message. Does not implicitly {@link google.storage.v2.WriteObjectRequest.verify|verify} messages.
                 * @param message WriteObjectRequest message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.storage.v2.IWriteObjectRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified WriteObjectRequest message, length delimited. Does not implicitly {@link google.storage.v2.WriteObjectRequest.verify|verify} messages.
                 * @param message WriteObjectRequest message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.storage.v2.IWriteObjectRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a WriteObjectRequest message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns WriteObjectRequest
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.WriteObjectRequest;

                /**
                 * Decodes a WriteObjectRequest message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns WriteObjectRequest
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.WriteObjectRequest;

                /**
                 * Verifies a WriteObjectRequest message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a WriteObjectRequest message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns WriteObjectRequest
                 */
                public static fromObject(object: { [k: string]: any }): google.storage.v2.WriteObjectRequest;

                /**
                 * Creates a plain object from a WriteObjectRequest message. Also converts values to other types if specified.
                 * @param message WriteObjectRequest
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.storage.v2.WriteObjectRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this WriteObjectRequest to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for WriteObjectRequest
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a WriteObjectResponse. */
            interface IWriteObjectResponse {

                /** WriteObjectResponse persistedSize */
                persistedSize?: (number|Long|string|null);

                /** WriteObjectResponse resource */
                resource?: (google.storage.v2.IStorageObject|null);

                /** WriteObjectResponse persistedDataChecksums */
                persistedDataChecksums?: (google.storage.v2.IObjectChecksums|null);
            }

            /** Represents a WriteObjectResponse. */
            class WriteObjectResponse implements IWriteObjectResponse {

                /**
                 * Constructs a new WriteObjectResponse.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.storage.v2.IWriteObjectResponse);

                /** WriteObjectResponse persistedSize. */
                public persistedSize?: (number|Long|string|null);

                /** WriteObjectResponse resource. */
                public resource?: (google.storage.v2.IStorageObject|null);

                /** WriteObjectResponse persistedDataChecksums. */
                public persistedDataChecksums?: (google.storage.v2.IObjectChecksums|null);

                /** WriteObjectResponse writeStatus. */
                public writeStatus?: ("persistedSize"|"resource");

                /**
                 * Creates a new WriteObjectResponse instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns WriteObjectResponse instance
                 */
                public static create(properties?: google.storage.v2.IWriteObjectResponse): google.storage.v2.WriteObjectResponse;

                /**
                 * Encodes the specified WriteObjectResponse message. Does not implicitly {@link google.storage.v2.WriteObjectResponse.verify|verify} messages.
                 * @param message WriteObjectResponse message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.storage.v2.IWriteObjectResponse, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified WriteObjectResponse message, length delimited. Does not implicitly {@link google.storage.v2.WriteObjectResponse.verify|verify} messages.
                 * @param message WriteObjectResponse message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.storage.v2.IWriteObjectResponse, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a WriteObjectResponse message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns WriteObjectResponse
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.WriteObjectResponse;

                /**
                 * Decodes a WriteObjectResponse message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns WriteObjectResponse
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.WriteObjectResponse;

                /**
                 * Verifies a WriteObjectResponse message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a WriteObjectResponse message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns WriteObjectResponse
                 */
                public static fromObject(object: { [k: string]: any }): google.storage.v2.WriteObjectResponse;

                /**
                 * Creates a plain object from a WriteObjectResponse message. Also converts values to other types if specified.
                 * @param message WriteObjectResponse
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.storage.v2.WriteObjectResponse, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this WriteObjectResponse to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for WriteObjectResponse
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of an AppendObjectSpec. */
            interface IAppendObjectSpec {

                /** AppendObjectSpec bucket */
                bucket?: (string|null);

                /** AppendObjectSpec object */
                object?: (string|null);

                /** AppendObjectSpec generation */
                generation?: (number|Long|string|null);

                /** AppendObjectSpec ifMetagenerationMatch */
                ifMetagenerationMatch?: (number|Long|string|null);

                /** AppendObjectSpec ifMetagenerationNotMatch */
                ifMetagenerationNotMatch?: (number|Long|string|null);

                /** AppendObjectSpec routingToken */
                routingToken?: (string|null);

                /** AppendObjectSpec writeHandle */
                writeHandle?: (google.storage.v2.IBidiWriteHandle|null);
            }

            /** Represents an AppendObjectSpec. */
            class AppendObjectSpec implements IAppendObjectSpec {

                /**
                 * Constructs a new AppendObjectSpec.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.storage.v2.IAppendObjectSpec);

                /** AppendObjectSpec bucket. */
                public bucket: string;

                /** AppendObjectSpec object. */
                public object: string;

                /** AppendObjectSpec generation. */
                public generation: (number|Long|string);

                /** AppendObjectSpec ifMetagenerationMatch. */
                public ifMetagenerationMatch?: (number|Long|string|null);

                /** AppendObjectSpec ifMetagenerationNotMatch. */
                public ifMetagenerationNotMatch?: (number|Long|string|null);

                /** AppendObjectSpec routingToken. */
                public routingToken?: (string|null);

                /** AppendObjectSpec writeHandle. */
                public writeHandle?: (google.storage.v2.IBidiWriteHandle|null);

                /**
                 * Creates a new AppendObjectSpec instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns AppendObjectSpec instance
                 */
                public static create(properties?: google.storage.v2.IAppendObjectSpec): google.storage.v2.AppendObjectSpec;

                /**
                 * Encodes the specified AppendObjectSpec message. Does not implicitly {@link google.storage.v2.AppendObjectSpec.verify|verify} messages.
                 * @param message AppendObjectSpec message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.storage.v2.IAppendObjectSpec, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified AppendObjectSpec message, length delimited. Does not implicitly {@link google.storage.v2.AppendObjectSpec.verify|verify} messages.
                 * @param message AppendObjectSpec message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.storage.v2.IAppendObjectSpec, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes an AppendObjectSpec message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns AppendObjectSpec
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.AppendObjectSpec;

                /**
                 * Decodes an AppendObjectSpec message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns AppendObjectSpec
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.AppendObjectSpec;

                /**
                 * Verifies an AppendObjectSpec message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates an AppendObjectSpec message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns AppendObjectSpec
                 */
                public static fromObject(object: { [k: string]: any }): google.storage.v2.AppendObjectSpec;

                /**
                 * Creates a plain object from an AppendObjectSpec message. Also converts values to other types if specified.
                 * @param message AppendObjectSpec
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.storage.v2.AppendObjectSpec, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this AppendObjectSpec to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for AppendObjectSpec
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a BidiWriteObjectRequest. */
            interface IBidiWriteObjectRequest {

                /** BidiWriteObjectRequest uploadId */
                uploadId?: (string|null);

                /** BidiWriteObjectRequest writeObjectSpec */
                writeObjectSpec?: (google.storage.v2.IWriteObjectSpec|null);

                /** BidiWriteObjectRequest appendObjectSpec */
                appendObjectSpec?: (google.storage.v2.IAppendObjectSpec|null);

                /** BidiWriteObjectRequest writeOffset */
                writeOffset?: (number|Long|string|null);

                /** BidiWriteObjectRequest checksummedData */
                checksummedData?: (google.storage.v2.IChecksummedData|null);

                /** BidiWriteObjectRequest objectChecksums */
                objectChecksums?: (google.storage.v2.IObjectChecksums|null);

                /** BidiWriteObjectRequest stateLookup */
                stateLookup?: (boolean|null);

                /** BidiWriteObjectRequest flush */
                flush?: (boolean|null);

                /** BidiWriteObjectRequest finishWrite */
                finishWrite?: (boolean|null);

                /** BidiWriteObjectRequest commonObjectRequestParams */
                commonObjectRequestParams?: (google.storage.v2.ICommonObjectRequestParams|null);
            }

            /** Represents a BidiWriteObjectRequest. */
            class BidiWriteObjectRequest implements IBidiWriteObjectRequest {

                /**
                 * Constructs a new BidiWriteObjectRequest.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.storage.v2.IBidiWriteObjectRequest);

                /** BidiWriteObjectRequest uploadId. */
                public uploadId?: (string|null);

                /** BidiWriteObjectRequest writeObjectSpec. */
                public writeObjectSpec?: (google.storage.v2.IWriteObjectSpec|null);

                /** BidiWriteObjectRequest appendObjectSpec. */
                public appendObjectSpec?: (google.storage.v2.IAppendObjectSpec|null);

                /** BidiWriteObjectRequest writeOffset. */
                public writeOffset: (number|Long|string);

                /** BidiWriteObjectRequest checksummedData. */
                public checksummedData?: (google.storage.v2.IChecksummedData|null);

                /** BidiWriteObjectRequest objectChecksums. */
                public objectChecksums?: (google.storage.v2.IObjectChecksums|null);

                /** BidiWriteObjectRequest stateLookup. */
                public stateLookup: boolean;

                /** BidiWriteObjectRequest flush. */
                public flush: boolean;

                /** BidiWriteObjectRequest finishWrite. */
                public finishWrite: boolean;

                /** BidiWriteObjectRequest commonObjectRequestParams. */
                public commonObjectRequestParams?: (google.storage.v2.ICommonObjectRequestParams|null);

                /** BidiWriteObjectRequest firstMessage. */
                public firstMessage?: ("uploadId"|"writeObjectSpec"|"appendObjectSpec");

                /** BidiWriteObjectRequest data. */
                public data?: "checksummedData";

                /**
                 * Creates a new BidiWriteObjectRequest instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns BidiWriteObjectRequest instance
                 */
                public static create(properties?: google.storage.v2.IBidiWriteObjectRequest): google.storage.v2.BidiWriteObjectRequest;

                /**
                 * Encodes the specified BidiWriteObjectRequest message. Does not implicitly {@link google.storage.v2.BidiWriteObjectRequest.verify|verify} messages.
                 * @param message BidiWriteObjectRequest message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.storage.v2.IBidiWriteObjectRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified BidiWriteObjectRequest message, length delimited. Does not implicitly {@link google.storage.v2.BidiWriteObjectRequest.verify|verify} messages.
                 * @param message BidiWriteObjectRequest message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.storage.v2.IBidiWriteObjectRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a BidiWriteObjectRequest message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns BidiWriteObjectRequest
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.BidiWriteObjectRequest;

                /**
                 * Decodes a BidiWriteObjectRequest message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns BidiWriteObjectRequest
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.BidiWriteObjectRequest;

                /**
                 * Verifies a BidiWriteObjectRequest message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a BidiWriteObjectRequest message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns BidiWriteObjectRequest
                 */
                public static fromObject(object: { [k: string]: any }): google.storage.v2.BidiWriteObjectRequest;

                /**
                 * Creates a plain object from a BidiWriteObjectRequest message. Also converts values to other types if specified.
                 * @param message BidiWriteObjectRequest
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.storage.v2.BidiWriteObjectRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this BidiWriteObjectRequest to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for BidiWriteObjectRequest
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a BidiWriteObjectResponse. */
            interface IBidiWriteObjectResponse {

                /** BidiWriteObjectResponse persistedSize */
                persistedSize?: (number|Long|string|null);

                /** BidiWriteObjectResponse resource */
                resource?: (google.storage.v2.IStorageObject|null);

                /** BidiWriteObjectResponse persistedDataChecksums */
                persistedDataChecksums?: (google.storage.v2.IObjectChecksums|null);

                /** BidiWriteObjectResponse writeHandle */
                writeHandle?: (google.storage.v2.IBidiWriteHandle|null);
            }

            /** Represents a BidiWriteObjectResponse. */
            class BidiWriteObjectResponse implements IBidiWriteObjectResponse {

                /**
                 * Constructs a new BidiWriteObjectResponse.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.storage.v2.IBidiWriteObjectResponse);

                /** BidiWriteObjectResponse persistedSize. */
                public persistedSize?: (number|Long|string|null);

                /** BidiWriteObjectResponse resource. */
                public resource?: (google.storage.v2.IStorageObject|null);

                /** BidiWriteObjectResponse persistedDataChecksums. */
                public persistedDataChecksums?: (google.storage.v2.IObjectChecksums|null);

                /** BidiWriteObjectResponse writeHandle. */
                public writeHandle?: (google.storage.v2.IBidiWriteHandle|null);

                /** BidiWriteObjectResponse writeStatus. */
                public writeStatus?: ("persistedSize"|"resource");

                /**
                 * Creates a new BidiWriteObjectResponse instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns BidiWriteObjectResponse instance
                 */
                public static create(properties?: google.storage.v2.IBidiWriteObjectResponse): google.storage.v2.BidiWriteObjectResponse;

                /**
                 * Encodes the specified BidiWriteObjectResponse message. Does not implicitly {@link google.storage.v2.BidiWriteObjectResponse.verify|verify} messages.
                 * @param message BidiWriteObjectResponse message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.storage.v2.IBidiWriteObjectResponse, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified BidiWriteObjectResponse message, length delimited. Does not implicitly {@link google.storage.v2.BidiWriteObjectResponse.verify|verify} messages.
                 * @param message BidiWriteObjectResponse message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.storage.v2.IBidiWriteObjectResponse, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a BidiWriteObjectResponse message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns BidiWriteObjectResponse
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.BidiWriteObjectResponse;

                /**
                 * Decodes a BidiWriteObjectResponse message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns BidiWriteObjectResponse
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.BidiWriteObjectResponse;

                /**
                 * Verifies a BidiWriteObjectResponse message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a BidiWriteObjectResponse message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns BidiWriteObjectResponse
                 */
                public static fromObject(object: { [k: string]: any }): google.storage.v2.BidiWriteObjectResponse;

                /**
                 * Creates a plain object from a BidiWriteObjectResponse message. Also converts values to other types if specified.
                 * @param message BidiWriteObjectResponse
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.storage.v2.BidiWriteObjectResponse, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this BidiWriteObjectResponse to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for BidiWriteObjectResponse
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a ListObjectsRequest. */
            interface IListObjectsRequest {

                /** ListObjectsRequest parent */
                parent?: (string|null);

                /** ListObjectsRequest pageSize */
                pageSize?: (number|null);

                /** ListObjectsRequest pageToken */
                pageToken?: (string|null);

                /** ListObjectsRequest delimiter */
                delimiter?: (string|null);

                /** ListObjectsRequest includeTrailingDelimiter */
                includeTrailingDelimiter?: (boolean|null);

                /** ListObjectsRequest prefix */
                prefix?: (string|null);

                /** ListObjectsRequest versions */
                versions?: (boolean|null);

                /** ListObjectsRequest readMask */
                readMask?: (google.protobuf.IFieldMask|null);

                /** ListObjectsRequest lexicographicStart */
                lexicographicStart?: (string|null);

                /** ListObjectsRequest lexicographicEnd */
                lexicographicEnd?: (string|null);

                /** ListObjectsRequest softDeleted */
                softDeleted?: (boolean|null);

                /** ListObjectsRequest includeFoldersAsPrefixes */
                includeFoldersAsPrefixes?: (boolean|null);

                /** ListObjectsRequest matchGlob */
                matchGlob?: (string|null);

                /** ListObjectsRequest filter */
                filter?: (string|null);
            }

            /** Represents a ListObjectsRequest. */
            class ListObjectsRequest implements IListObjectsRequest {

                /**
                 * Constructs a new ListObjectsRequest.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.storage.v2.IListObjectsRequest);

                /** ListObjectsRequest parent. */
                public parent: string;

                /** ListObjectsRequest pageSize. */
                public pageSize: number;

                /** ListObjectsRequest pageToken. */
                public pageToken: string;

                /** ListObjectsRequest delimiter. */
                public delimiter: string;

                /** ListObjectsRequest includeTrailingDelimiter. */
                public includeTrailingDelimiter: boolean;

                /** ListObjectsRequest prefix. */
                public prefix: string;

                /** ListObjectsRequest versions. */
                public versions: boolean;

                /** ListObjectsRequest readMask. */
                public readMask?: (google.protobuf.IFieldMask|null);

                /** ListObjectsRequest lexicographicStart. */
                public lexicographicStart: string;

                /** ListObjectsRequest lexicographicEnd. */
                public lexicographicEnd: string;

                /** ListObjectsRequest softDeleted. */
                public softDeleted: boolean;

                /** ListObjectsRequest includeFoldersAsPrefixes. */
                public includeFoldersAsPrefixes: boolean;

                /** ListObjectsRequest matchGlob. */
                public matchGlob: string;

                /** ListObjectsRequest filter. */
                public filter: string;

                /**
                 * Creates a new ListObjectsRequest instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns ListObjectsRequest instance
                 */
                public static create(properties?: google.storage.v2.IListObjectsRequest): google.storage.v2.ListObjectsRequest;

                /**
                 * Encodes the specified ListObjectsRequest message. Does not implicitly {@link google.storage.v2.ListObjectsRequest.verify|verify} messages.
                 * @param message ListObjectsRequest message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.storage.v2.IListObjectsRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified ListObjectsRequest message, length delimited. Does not implicitly {@link google.storage.v2.ListObjectsRequest.verify|verify} messages.
                 * @param message ListObjectsRequest message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.storage.v2.IListObjectsRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a ListObjectsRequest message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns ListObjectsRequest
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.ListObjectsRequest;

                /**
                 * Decodes a ListObjectsRequest message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns ListObjectsRequest
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.ListObjectsRequest;

                /**
                 * Verifies a ListObjectsRequest message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a ListObjectsRequest message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns ListObjectsRequest
                 */
                public static fromObject(object: { [k: string]: any }): google.storage.v2.ListObjectsRequest;

                /**
                 * Creates a plain object from a ListObjectsRequest message. Also converts values to other types if specified.
                 * @param message ListObjectsRequest
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.storage.v2.ListObjectsRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this ListObjectsRequest to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for ListObjectsRequest
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a QueryWriteStatusRequest. */
            interface IQueryWriteStatusRequest {

                /** QueryWriteStatusRequest uploadId */
                uploadId?: (string|null);

                /** QueryWriteStatusRequest commonObjectRequestParams */
                commonObjectRequestParams?: (google.storage.v2.ICommonObjectRequestParams|null);
            }

            /** Represents a QueryWriteStatusRequest. */
            class QueryWriteStatusRequest implements IQueryWriteStatusRequest {

                /**
                 * Constructs a new QueryWriteStatusRequest.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.storage.v2.IQueryWriteStatusRequest);

                /** QueryWriteStatusRequest uploadId. */
                public uploadId: string;

                /** QueryWriteStatusRequest commonObjectRequestParams. */
                public commonObjectRequestParams?: (google.storage.v2.ICommonObjectRequestParams|null);

                /**
                 * Creates a new QueryWriteStatusRequest instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns QueryWriteStatusRequest instance
                 */
                public static create(properties?: google.storage.v2.IQueryWriteStatusRequest): google.storage.v2.QueryWriteStatusRequest;

                /**
                 * Encodes the specified QueryWriteStatusRequest message. Does not implicitly {@link google.storage.v2.QueryWriteStatusRequest.verify|verify} messages.
                 * @param message QueryWriteStatusRequest message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.storage.v2.IQueryWriteStatusRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified QueryWriteStatusRequest message, length delimited. Does not implicitly {@link google.storage.v2.QueryWriteStatusRequest.verify|verify} messages.
                 * @param message QueryWriteStatusRequest message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.storage.v2.IQueryWriteStatusRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a QueryWriteStatusRequest message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns QueryWriteStatusRequest
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.QueryWriteStatusRequest;

                /**
                 * Decodes a QueryWriteStatusRequest message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns QueryWriteStatusRequest
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.QueryWriteStatusRequest;

                /**
                 * Verifies a QueryWriteStatusRequest message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a QueryWriteStatusRequest message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns QueryWriteStatusRequest
                 */
                public static fromObject(object: { [k: string]: any }): google.storage.v2.QueryWriteStatusRequest;

                /**
                 * Creates a plain object from a QueryWriteStatusRequest message. Also converts values to other types if specified.
                 * @param message QueryWriteStatusRequest
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.storage.v2.QueryWriteStatusRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this QueryWriteStatusRequest to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for QueryWriteStatusRequest
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a QueryWriteStatusResponse. */
            interface IQueryWriteStatusResponse {

                /** QueryWriteStatusResponse persistedSize */
                persistedSize?: (number|Long|string|null);

                /** QueryWriteStatusResponse resource */
                resource?: (google.storage.v2.IStorageObject|null);

                /** QueryWriteStatusResponse persistedDataChecksums */
                persistedDataChecksums?: (google.storage.v2.IObjectChecksums|null);
            }

            /** Represents a QueryWriteStatusResponse. */
            class QueryWriteStatusResponse implements IQueryWriteStatusResponse {

                /**
                 * Constructs a new QueryWriteStatusResponse.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.storage.v2.IQueryWriteStatusResponse);

                /** QueryWriteStatusResponse persistedSize. */
                public persistedSize?: (number|Long|string|null);

                /** QueryWriteStatusResponse resource. */
                public resource?: (google.storage.v2.IStorageObject|null);

                /** QueryWriteStatusResponse persistedDataChecksums. */
                public persistedDataChecksums?: (google.storage.v2.IObjectChecksums|null);

                /** QueryWriteStatusResponse writeStatus. */
                public writeStatus?: ("persistedSize"|"resource");

                /**
                 * Creates a new QueryWriteStatusResponse instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns QueryWriteStatusResponse instance
                 */
                public static create(properties?: google.storage.v2.IQueryWriteStatusResponse): google.storage.v2.QueryWriteStatusResponse;

                /**
                 * Encodes the specified QueryWriteStatusResponse message. Does not implicitly {@link google.storage.v2.QueryWriteStatusResponse.verify|verify} messages.
                 * @param message QueryWriteStatusResponse message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.storage.v2.IQueryWriteStatusResponse, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified QueryWriteStatusResponse message, length delimited. Does not implicitly {@link google.storage.v2.QueryWriteStatusResponse.verify|verify} messages.
                 * @param message QueryWriteStatusResponse message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.storage.v2.IQueryWriteStatusResponse, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a QueryWriteStatusResponse message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns QueryWriteStatusResponse
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.QueryWriteStatusResponse;

                /**
                 * Decodes a QueryWriteStatusResponse message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns QueryWriteStatusResponse
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.QueryWriteStatusResponse;

                /**
                 * Verifies a QueryWriteStatusResponse message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a QueryWriteStatusResponse message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns QueryWriteStatusResponse
                 */
                public static fromObject(object: { [k: string]: any }): google.storage.v2.QueryWriteStatusResponse;

                /**
                 * Creates a plain object from a QueryWriteStatusResponse message. Also converts values to other types if specified.
                 * @param message QueryWriteStatusResponse
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.storage.v2.QueryWriteStatusResponse, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this QueryWriteStatusResponse to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for QueryWriteStatusResponse
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a RewriteObjectRequest. */
            interface IRewriteObjectRequest {

                /** RewriteObjectRequest destinationName */
                destinationName?: (string|null);

                /** RewriteObjectRequest destinationBucket */
                destinationBucket?: (string|null);

                /** RewriteObjectRequest destinationKmsKey */
                destinationKmsKey?: (string|null);

                /** RewriteObjectRequest destination */
                destination?: (google.storage.v2.IStorageObject|null);

                /** RewriteObjectRequest sourceBucket */
                sourceBucket?: (string|null);

                /** RewriteObjectRequest sourceObject */
                sourceObject?: (string|null);

                /** RewriteObjectRequest sourceGeneration */
                sourceGeneration?: (number|Long|string|null);

                /** RewriteObjectRequest rewriteToken */
                rewriteToken?: (string|null);

                /** RewriteObjectRequest destinationPredefinedAcl */
                destinationPredefinedAcl?: (string|null);

                /** RewriteObjectRequest ifGenerationMatch */
                ifGenerationMatch?: (number|Long|string|null);

                /** RewriteObjectRequest ifGenerationNotMatch */
                ifGenerationNotMatch?: (number|Long|string|null);

                /** RewriteObjectRequest ifMetagenerationMatch */
                ifMetagenerationMatch?: (number|Long|string|null);

                /** RewriteObjectRequest ifMetagenerationNotMatch */
                ifMetagenerationNotMatch?: (number|Long|string|null);

                /** RewriteObjectRequest ifSourceGenerationMatch */
                ifSourceGenerationMatch?: (number|Long|string|null);

                /** RewriteObjectRequest ifSourceGenerationNotMatch */
                ifSourceGenerationNotMatch?: (number|Long|string|null);

                /** RewriteObjectRequest ifSourceMetagenerationMatch */
                ifSourceMetagenerationMatch?: (number|Long|string|null);

                /** RewriteObjectRequest ifSourceMetagenerationNotMatch */
                ifSourceMetagenerationNotMatch?: (number|Long|string|null);

                /** RewriteObjectRequest maxBytesRewrittenPerCall */
                maxBytesRewrittenPerCall?: (number|Long|string|null);

                /** RewriteObjectRequest copySourceEncryptionAlgorithm */
                copySourceEncryptionAlgorithm?: (string|null);

                /** RewriteObjectRequest copySourceEncryptionKeyBytes */
                copySourceEncryptionKeyBytes?: (Uint8Array|Buffer|string|null);

                /** RewriteObjectRequest copySourceEncryptionKeySha256Bytes */
                copySourceEncryptionKeySha256Bytes?: (Uint8Array|Buffer|string|null);

                /** RewriteObjectRequest commonObjectRequestParams */
                commonObjectRequestParams?: (google.storage.v2.ICommonObjectRequestParams|null);

                /** RewriteObjectRequest objectChecksums */
                objectChecksums?: (google.storage.v2.IObjectChecksums|null);
            }

            /** Represents a RewriteObjectRequest. */
            class RewriteObjectRequest implements IRewriteObjectRequest {

                /**
                 * Constructs a new RewriteObjectRequest.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.storage.v2.IRewriteObjectRequest);

                /** RewriteObjectRequest destinationName. */
                public destinationName: string;

                /** RewriteObjectRequest destinationBucket. */
                public destinationBucket: string;

                /** RewriteObjectRequest destinationKmsKey. */
                public destinationKmsKey: string;

                /** RewriteObjectRequest destination. */
                public destination?: (google.storage.v2.IStorageObject|null);

                /** RewriteObjectRequest sourceBucket. */
                public sourceBucket: string;

                /** RewriteObjectRequest sourceObject. */
                public sourceObject: string;

                /** RewriteObjectRequest sourceGeneration. */
                public sourceGeneration: (number|Long|string);

                /** RewriteObjectRequest rewriteToken. */
                public rewriteToken: string;

                /** RewriteObjectRequest destinationPredefinedAcl. */
                public destinationPredefinedAcl: string;

                /** RewriteObjectRequest ifGenerationMatch. */
                public ifGenerationMatch?: (number|Long|string|null);

                /** RewriteObjectRequest ifGenerationNotMatch. */
                public ifGenerationNotMatch?: (number|Long|string|null);

                /** RewriteObjectRequest ifMetagenerationMatch. */
                public ifMetagenerationMatch?: (number|Long|string|null);

                /** RewriteObjectRequest ifMetagenerationNotMatch. */
                public ifMetagenerationNotMatch?: (number|Long|string|null);

                /** RewriteObjectRequest ifSourceGenerationMatch. */
                public ifSourceGenerationMatch?: (number|Long|string|null);

                /** RewriteObjectRequest ifSourceGenerationNotMatch. */
                public ifSourceGenerationNotMatch?: (number|Long|string|null);

                /** RewriteObjectRequest ifSourceMetagenerationMatch. */
                public ifSourceMetagenerationMatch?: (number|Long|string|null);

                /** RewriteObjectRequest ifSourceMetagenerationNotMatch. */
                public ifSourceMetagenerationNotMatch?: (number|Long|string|null);

                /** RewriteObjectRequest maxBytesRewrittenPerCall. */
                public maxBytesRewrittenPerCall: (number|Long|string);

                /** RewriteObjectRequest copySourceEncryptionAlgorithm. */
                public copySourceEncryptionAlgorithm: string;

                /** RewriteObjectRequest copySourceEncryptionKeyBytes. */
                public copySourceEncryptionKeyBytes: (Uint8Array|Buffer|string);

                /** RewriteObjectRequest copySourceEncryptionKeySha256Bytes. */
                public copySourceEncryptionKeySha256Bytes: (Uint8Array|Buffer|string);

                /** RewriteObjectRequest commonObjectRequestParams. */
                public commonObjectRequestParams?: (google.storage.v2.ICommonObjectRequestParams|null);

                /** RewriteObjectRequest objectChecksums. */
                public objectChecksums?: (google.storage.v2.IObjectChecksums|null);

                /**
                 * Creates a new RewriteObjectRequest instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns RewriteObjectRequest instance
                 */
                public static create(properties?: google.storage.v2.IRewriteObjectRequest): google.storage.v2.RewriteObjectRequest;

                /**
                 * Encodes the specified RewriteObjectRequest message. Does not implicitly {@link google.storage.v2.RewriteObjectRequest.verify|verify} messages.
                 * @param message RewriteObjectRequest message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.storage.v2.IRewriteObjectRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified RewriteObjectRequest message, length delimited. Does not implicitly {@link google.storage.v2.RewriteObjectRequest.verify|verify} messages.
                 * @param message RewriteObjectRequest message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.storage.v2.IRewriteObjectRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a RewriteObjectRequest message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns RewriteObjectRequest
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.RewriteObjectRequest;

                /**
                 * Decodes a RewriteObjectRequest message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns RewriteObjectRequest
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.RewriteObjectRequest;

                /**
                 * Verifies a RewriteObjectRequest message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a RewriteObjectRequest message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns RewriteObjectRequest
                 */
                public static fromObject(object: { [k: string]: any }): google.storage.v2.RewriteObjectRequest;

                /**
                 * Creates a plain object from a RewriteObjectRequest message. Also converts values to other types if specified.
                 * @param message RewriteObjectRequest
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.storage.v2.RewriteObjectRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this RewriteObjectRequest to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for RewriteObjectRequest
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a RewriteResponse. */
            interface IRewriteResponse {

                /** RewriteResponse totalBytesRewritten */
                totalBytesRewritten?: (number|Long|string|null);

                /** RewriteResponse objectSize */
                objectSize?: (number|Long|string|null);

                /** RewriteResponse done */
                done?: (boolean|null);

                /** RewriteResponse rewriteToken */
                rewriteToken?: (string|null);

                /** RewriteResponse resource */
                resource?: (google.storage.v2.IStorageObject|null);
            }

            /** Represents a RewriteResponse. */
            class RewriteResponse implements IRewriteResponse {

                /**
                 * Constructs a new RewriteResponse.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.storage.v2.IRewriteResponse);

                /** RewriteResponse totalBytesRewritten. */
                public totalBytesRewritten: (number|Long|string);

                /** RewriteResponse objectSize. */
                public objectSize: (number|Long|string);

                /** RewriteResponse done. */
                public done: boolean;

                /** RewriteResponse rewriteToken. */
                public rewriteToken: string;

                /** RewriteResponse resource. */
                public resource?: (google.storage.v2.IStorageObject|null);

                /**
                 * Creates a new RewriteResponse instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns RewriteResponse instance
                 */
                public static create(properties?: google.storage.v2.IRewriteResponse): google.storage.v2.RewriteResponse;

                /**
                 * Encodes the specified RewriteResponse message. Does not implicitly {@link google.storage.v2.RewriteResponse.verify|verify} messages.
                 * @param message RewriteResponse message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.storage.v2.IRewriteResponse, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified RewriteResponse message, length delimited. Does not implicitly {@link google.storage.v2.RewriteResponse.verify|verify} messages.
                 * @param message RewriteResponse message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.storage.v2.IRewriteResponse, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a RewriteResponse message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns RewriteResponse
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.RewriteResponse;

                /**
                 * Decodes a RewriteResponse message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns RewriteResponse
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.RewriteResponse;

                /**
                 * Verifies a RewriteResponse message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a RewriteResponse message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns RewriteResponse
                 */
                public static fromObject(object: { [k: string]: any }): google.storage.v2.RewriteResponse;

                /**
                 * Creates a plain object from a RewriteResponse message. Also converts values to other types if specified.
                 * @param message RewriteResponse
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.storage.v2.RewriteResponse, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this RewriteResponse to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for RewriteResponse
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a MoveObjectRequest. */
            interface IMoveObjectRequest {

                /** MoveObjectRequest bucket */
                bucket?: (string|null);

                /** MoveObjectRequest sourceObject */
                sourceObject?: (string|null);

                /** MoveObjectRequest destinationObject */
                destinationObject?: (string|null);

                /** MoveObjectRequest ifSourceGenerationMatch */
                ifSourceGenerationMatch?: (number|Long|string|null);

                /** MoveObjectRequest ifSourceGenerationNotMatch */
                ifSourceGenerationNotMatch?: (number|Long|string|null);

                /** MoveObjectRequest ifSourceMetagenerationMatch */
                ifSourceMetagenerationMatch?: (number|Long|string|null);

                /** MoveObjectRequest ifSourceMetagenerationNotMatch */
                ifSourceMetagenerationNotMatch?: (number|Long|string|null);

                /** MoveObjectRequest ifGenerationMatch */
                ifGenerationMatch?: (number|Long|string|null);

                /** MoveObjectRequest ifGenerationNotMatch */
                ifGenerationNotMatch?: (number|Long|string|null);

                /** MoveObjectRequest ifMetagenerationMatch */
                ifMetagenerationMatch?: (number|Long|string|null);

                /** MoveObjectRequest ifMetagenerationNotMatch */
                ifMetagenerationNotMatch?: (number|Long|string|null);
            }

            /** Represents a MoveObjectRequest. */
            class MoveObjectRequest implements IMoveObjectRequest {

                /**
                 * Constructs a new MoveObjectRequest.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.storage.v2.IMoveObjectRequest);

                /** MoveObjectRequest bucket. */
                public bucket: string;

                /** MoveObjectRequest sourceObject. */
                public sourceObject: string;

                /** MoveObjectRequest destinationObject. */
                public destinationObject: string;

                /** MoveObjectRequest ifSourceGenerationMatch. */
                public ifSourceGenerationMatch?: (number|Long|string|null);

                /** MoveObjectRequest ifSourceGenerationNotMatch. */
                public ifSourceGenerationNotMatch?: (number|Long|string|null);

                /** MoveObjectRequest ifSourceMetagenerationMatch. */
                public ifSourceMetagenerationMatch?: (number|Long|string|null);

                /** MoveObjectRequest ifSourceMetagenerationNotMatch. */
                public ifSourceMetagenerationNotMatch?: (number|Long|string|null);

                /** MoveObjectRequest ifGenerationMatch. */
                public ifGenerationMatch?: (number|Long|string|null);

                /** MoveObjectRequest ifGenerationNotMatch. */
                public ifGenerationNotMatch?: (number|Long|string|null);

                /** MoveObjectRequest ifMetagenerationMatch. */
                public ifMetagenerationMatch?: (number|Long|string|null);

                /** MoveObjectRequest ifMetagenerationNotMatch. */
                public ifMetagenerationNotMatch?: (number|Long|string|null);

                /**
                 * Creates a new MoveObjectRequest instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns MoveObjectRequest instance
                 */
                public static create(properties?: google.storage.v2.IMoveObjectRequest): google.storage.v2.MoveObjectRequest;

                /**
                 * Encodes the specified MoveObjectRequest message. Does not implicitly {@link google.storage.v2.MoveObjectRequest.verify|verify} messages.
                 * @param message MoveObjectRequest message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.storage.v2.IMoveObjectRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified MoveObjectRequest message, length delimited. Does not implicitly {@link google.storage.v2.MoveObjectRequest.verify|verify} messages.
                 * @param message MoveObjectRequest message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.storage.v2.IMoveObjectRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a MoveObjectRequest message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns MoveObjectRequest
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.MoveObjectRequest;

                /**
                 * Decodes a MoveObjectRequest message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns MoveObjectRequest
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.MoveObjectRequest;

                /**
                 * Verifies a MoveObjectRequest message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a MoveObjectRequest message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns MoveObjectRequest
                 */
                public static fromObject(object: { [k: string]: any }): google.storage.v2.MoveObjectRequest;

                /**
                 * Creates a plain object from a MoveObjectRequest message. Also converts values to other types if specified.
                 * @param message MoveObjectRequest
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.storage.v2.MoveObjectRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this MoveObjectRequest to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for MoveObjectRequest
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a StartResumableWriteRequest. */
            interface IStartResumableWriteRequest {

                /** StartResumableWriteRequest writeObjectSpec */
                writeObjectSpec?: (google.storage.v2.IWriteObjectSpec|null);

                /** StartResumableWriteRequest commonObjectRequestParams */
                commonObjectRequestParams?: (google.storage.v2.ICommonObjectRequestParams|null);

                /** StartResumableWriteRequest objectChecksums */
                objectChecksums?: (google.storage.v2.IObjectChecksums|null);
            }

            /** Represents a StartResumableWriteRequest. */
            class StartResumableWriteRequest implements IStartResumableWriteRequest {

                /**
                 * Constructs a new StartResumableWriteRequest.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.storage.v2.IStartResumableWriteRequest);

                /** StartResumableWriteRequest writeObjectSpec. */
                public writeObjectSpec?: (google.storage.v2.IWriteObjectSpec|null);

                /** StartResumableWriteRequest commonObjectRequestParams. */
                public commonObjectRequestParams?: (google.storage.v2.ICommonObjectRequestParams|null);

                /** StartResumableWriteRequest objectChecksums. */
                public objectChecksums?: (google.storage.v2.IObjectChecksums|null);

                /**
                 * Creates a new StartResumableWriteRequest instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns StartResumableWriteRequest instance
                 */
                public static create(properties?: google.storage.v2.IStartResumableWriteRequest): google.storage.v2.StartResumableWriteRequest;

                /**
                 * Encodes the specified StartResumableWriteRequest message. Does not implicitly {@link google.storage.v2.StartResumableWriteRequest.verify|verify} messages.
                 * @param message StartResumableWriteRequest message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.storage.v2.IStartResumableWriteRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified StartResumableWriteRequest message, length delimited. Does not implicitly {@link google.storage.v2.StartResumableWriteRequest.verify|verify} messages.
                 * @param message StartResumableWriteRequest message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.storage.v2.IStartResumableWriteRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a StartResumableWriteRequest message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns StartResumableWriteRequest
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.StartResumableWriteRequest;

                /**
                 * Decodes a StartResumableWriteRequest message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns StartResumableWriteRequest
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.StartResumableWriteRequest;

                /**
                 * Verifies a StartResumableWriteRequest message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a StartResumableWriteRequest message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns StartResumableWriteRequest
                 */
                public static fromObject(object: { [k: string]: any }): google.storage.v2.StartResumableWriteRequest;

                /**
                 * Creates a plain object from a StartResumableWriteRequest message. Also converts values to other types if specified.
                 * @param message StartResumableWriteRequest
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.storage.v2.StartResumableWriteRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this StartResumableWriteRequest to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for StartResumableWriteRequest
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a StartResumableWriteResponse. */
            interface IStartResumableWriteResponse {

                /** StartResumableWriteResponse uploadId */
                uploadId?: (string|null);
            }

            /** Represents a StartResumableWriteResponse. */
            class StartResumableWriteResponse implements IStartResumableWriteResponse {

                /**
                 * Constructs a new StartResumableWriteResponse.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.storage.v2.IStartResumableWriteResponse);

                /** StartResumableWriteResponse uploadId. */
                public uploadId: string;

                /**
                 * Creates a new StartResumableWriteResponse instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns StartResumableWriteResponse instance
                 */
                public static create(properties?: google.storage.v2.IStartResumableWriteResponse): google.storage.v2.StartResumableWriteResponse;

                /**
                 * Encodes the specified StartResumableWriteResponse message. Does not implicitly {@link google.storage.v2.StartResumableWriteResponse.verify|verify} messages.
                 * @param message StartResumableWriteResponse message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.storage.v2.IStartResumableWriteResponse, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified StartResumableWriteResponse message, length delimited. Does not implicitly {@link google.storage.v2.StartResumableWriteResponse.verify|verify} messages.
                 * @param message StartResumableWriteResponse message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.storage.v2.IStartResumableWriteResponse, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a StartResumableWriteResponse message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns StartResumableWriteResponse
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.StartResumableWriteResponse;

                /**
                 * Decodes a StartResumableWriteResponse message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns StartResumableWriteResponse
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.StartResumableWriteResponse;

                /**
                 * Verifies a StartResumableWriteResponse message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a StartResumableWriteResponse message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns StartResumableWriteResponse
                 */
                public static fromObject(object: { [k: string]: any }): google.storage.v2.StartResumableWriteResponse;

                /**
                 * Creates a plain object from a StartResumableWriteResponse message. Also converts values to other types if specified.
                 * @param message StartResumableWriteResponse
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.storage.v2.StartResumableWriteResponse, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this StartResumableWriteResponse to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for StartResumableWriteResponse
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of an UpdateObjectRequest. */
            interface IUpdateObjectRequest {

                /** UpdateObjectRequest object */
                object?: (google.storage.v2.IStorageObject|null);

                /** UpdateObjectRequest ifGenerationMatch */
                ifGenerationMatch?: (number|Long|string|null);

                /** UpdateObjectRequest ifGenerationNotMatch */
                ifGenerationNotMatch?: (number|Long|string|null);

                /** UpdateObjectRequest ifMetagenerationMatch */
                ifMetagenerationMatch?: (number|Long|string|null);

                /** UpdateObjectRequest ifMetagenerationNotMatch */
                ifMetagenerationNotMatch?: (number|Long|string|null);

                /** UpdateObjectRequest predefinedAcl */
                predefinedAcl?: (string|null);

                /** UpdateObjectRequest updateMask */
                updateMask?: (google.protobuf.IFieldMask|null);

                /** UpdateObjectRequest commonObjectRequestParams */
                commonObjectRequestParams?: (google.storage.v2.ICommonObjectRequestParams|null);

                /** UpdateObjectRequest overrideUnlockedRetention */
                overrideUnlockedRetention?: (boolean|null);
            }

            /** Represents an UpdateObjectRequest. */
            class UpdateObjectRequest implements IUpdateObjectRequest {

                /**
                 * Constructs a new UpdateObjectRequest.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.storage.v2.IUpdateObjectRequest);

                /** UpdateObjectRequest object. */
                public object?: (google.storage.v2.IStorageObject|null);

                /** UpdateObjectRequest ifGenerationMatch. */
                public ifGenerationMatch?: (number|Long|string|null);

                /** UpdateObjectRequest ifGenerationNotMatch. */
                public ifGenerationNotMatch?: (number|Long|string|null);

                /** UpdateObjectRequest ifMetagenerationMatch. */
                public ifMetagenerationMatch?: (number|Long|string|null);

                /** UpdateObjectRequest ifMetagenerationNotMatch. */
                public ifMetagenerationNotMatch?: (number|Long|string|null);

                /** UpdateObjectRequest predefinedAcl. */
                public predefinedAcl: string;

                /** UpdateObjectRequest updateMask. */
                public updateMask?: (google.protobuf.IFieldMask|null);

                /** UpdateObjectRequest commonObjectRequestParams. */
                public commonObjectRequestParams?: (google.storage.v2.ICommonObjectRequestParams|null);

                /** UpdateObjectRequest overrideUnlockedRetention. */
                public overrideUnlockedRetention: boolean;

                /**
                 * Creates a new UpdateObjectRequest instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns UpdateObjectRequest instance
                 */
                public static create(properties?: google.storage.v2.IUpdateObjectRequest): google.storage.v2.UpdateObjectRequest;

                /**
                 * Encodes the specified UpdateObjectRequest message. Does not implicitly {@link google.storage.v2.UpdateObjectRequest.verify|verify} messages.
                 * @param message UpdateObjectRequest message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.storage.v2.IUpdateObjectRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified UpdateObjectRequest message, length delimited. Does not implicitly {@link google.storage.v2.UpdateObjectRequest.verify|verify} messages.
                 * @param message UpdateObjectRequest message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.storage.v2.IUpdateObjectRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes an UpdateObjectRequest message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns UpdateObjectRequest
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.UpdateObjectRequest;

                /**
                 * Decodes an UpdateObjectRequest message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns UpdateObjectRequest
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.UpdateObjectRequest;

                /**
                 * Verifies an UpdateObjectRequest message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates an UpdateObjectRequest message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns UpdateObjectRequest
                 */
                public static fromObject(object: { [k: string]: any }): google.storage.v2.UpdateObjectRequest;

                /**
                 * Creates a plain object from an UpdateObjectRequest message. Also converts values to other types if specified.
                 * @param message UpdateObjectRequest
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.storage.v2.UpdateObjectRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this UpdateObjectRequest to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for UpdateObjectRequest
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a CommonObjectRequestParams. */
            interface ICommonObjectRequestParams {

                /** CommonObjectRequestParams encryptionAlgorithm */
                encryptionAlgorithm?: (string|null);

                /** CommonObjectRequestParams encryptionKeyBytes */
                encryptionKeyBytes?: (Uint8Array|Buffer|string|null);

                /** CommonObjectRequestParams encryptionKeySha256Bytes */
                encryptionKeySha256Bytes?: (Uint8Array|Buffer|string|null);
            }

            /** Represents a CommonObjectRequestParams. */
            class CommonObjectRequestParams implements ICommonObjectRequestParams {

                /**
                 * Constructs a new CommonObjectRequestParams.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.storage.v2.ICommonObjectRequestParams);

                /** CommonObjectRequestParams encryptionAlgorithm. */
                public encryptionAlgorithm: string;

                /** CommonObjectRequestParams encryptionKeyBytes. */
                public encryptionKeyBytes: (Uint8Array|Buffer|string);

                /** CommonObjectRequestParams encryptionKeySha256Bytes. */
                public encryptionKeySha256Bytes: (Uint8Array|Buffer|string);

                /**
                 * Creates a new CommonObjectRequestParams instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns CommonObjectRequestParams instance
                 */
                public static create(properties?: google.storage.v2.ICommonObjectRequestParams): google.storage.v2.CommonObjectRequestParams;

                /**
                 * Encodes the specified CommonObjectRequestParams message. Does not implicitly {@link google.storage.v2.CommonObjectRequestParams.verify|verify} messages.
                 * @param message CommonObjectRequestParams message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.storage.v2.ICommonObjectRequestParams, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified CommonObjectRequestParams message, length delimited. Does not implicitly {@link google.storage.v2.CommonObjectRequestParams.verify|verify} messages.
                 * @param message CommonObjectRequestParams message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.storage.v2.ICommonObjectRequestParams, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a CommonObjectRequestParams message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns CommonObjectRequestParams
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.CommonObjectRequestParams;

                /**
                 * Decodes a CommonObjectRequestParams message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns CommonObjectRequestParams
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.CommonObjectRequestParams;

                /**
                 * Verifies a CommonObjectRequestParams message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a CommonObjectRequestParams message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns CommonObjectRequestParams
                 */
                public static fromObject(object: { [k: string]: any }): google.storage.v2.CommonObjectRequestParams;

                /**
                 * Creates a plain object from a CommonObjectRequestParams message. Also converts values to other types if specified.
                 * @param message CommonObjectRequestParams
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.storage.v2.CommonObjectRequestParams, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this CommonObjectRequestParams to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for CommonObjectRequestParams
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a ServiceConstants. */
            interface IServiceConstants {
            }

            /** Represents a ServiceConstants. */
            class ServiceConstants implements IServiceConstants {

                /**
                 * Constructs a new ServiceConstants.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.storage.v2.IServiceConstants);

                /**
                 * Creates a new ServiceConstants instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns ServiceConstants instance
                 */
                public static create(properties?: google.storage.v2.IServiceConstants): google.storage.v2.ServiceConstants;

                /**
                 * Encodes the specified ServiceConstants message. Does not implicitly {@link google.storage.v2.ServiceConstants.verify|verify} messages.
                 * @param message ServiceConstants message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.storage.v2.IServiceConstants, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified ServiceConstants message, length delimited. Does not implicitly {@link google.storage.v2.ServiceConstants.verify|verify} messages.
                 * @param message ServiceConstants message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.storage.v2.IServiceConstants, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a ServiceConstants message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns ServiceConstants
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.ServiceConstants;

                /**
                 * Decodes a ServiceConstants message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns ServiceConstants
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.ServiceConstants;

                /**
                 * Verifies a ServiceConstants message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a ServiceConstants message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns ServiceConstants
                 */
                public static fromObject(object: { [k: string]: any }): google.storage.v2.ServiceConstants;

                /**
                 * Creates a plain object from a ServiceConstants message. Also converts values to other types if specified.
                 * @param message ServiceConstants
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.storage.v2.ServiceConstants, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this ServiceConstants to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for ServiceConstants
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            namespace ServiceConstants {

                /** Values enum. */
                enum Values {
                    VALUES_UNSPECIFIED = 0,
                    MAX_READ_CHUNK_BYTES = 2097152,
                    MAX_WRITE_CHUNK_BYTES = 2097152,
                    MAX_OBJECT_SIZE_MB = 5242880,
                    MAX_CUSTOM_METADATA_FIELD_NAME_BYTES = 1024,
                    MAX_CUSTOM_METADATA_FIELD_VALUE_BYTES = 4096,
                    MAX_CUSTOM_METADATA_TOTAL_SIZE_BYTES = 8192,
                    MAX_BUCKET_METADATA_TOTAL_SIZE_BYTES = 20480,
                    MAX_NOTIFICATION_CONFIGS_PER_BUCKET = 100,
                    MAX_LIFECYCLE_RULES_PER_BUCKET = 100,
                    MAX_NOTIFICATION_CUSTOM_ATTRIBUTES = 5,
                    MAX_NOTIFICATION_CUSTOM_ATTRIBUTE_KEY_LENGTH = 256,
                    MAX_NOTIFICATION_CUSTOM_ATTRIBUTE_VALUE_LENGTH = 1024,
                    MAX_LABELS_ENTRIES_COUNT = 64,
                    MAX_LABELS_KEY_VALUE_LENGTH = 63,
                    MAX_LABELS_KEY_VALUE_BYTES = 128,
                    MAX_OBJECT_IDS_PER_DELETE_OBJECTS_REQUEST = 1000,
                    SPLIT_TOKEN_MAX_VALID_DAYS = 14
                }
            }

            /** Properties of a Bucket. */
            interface IBucket {

                /** Bucket name */
                name?: (string|null);

                /** Bucket bucketId */
                bucketId?: (string|null);

                /** Bucket etag */
                etag?: (string|null);

                /** Bucket project */
                project?: (string|null);

                /** Bucket metageneration */
                metageneration?: (number|Long|string|null);

                /** Bucket location */
                location?: (string|null);

                /** Bucket locationType */
                locationType?: (string|null);

                /** Bucket storageClass */
                storageClass?: (string|null);

                /** Bucket rpo */
                rpo?: (string|null);

                /** Bucket acl */
                acl?: (google.storage.v2.IBucketAccessControl[]|null);

                /** Bucket defaultObjectAcl */
                defaultObjectAcl?: (google.storage.v2.IObjectAccessControl[]|null);

                /** Bucket lifecycle */
                lifecycle?: (google.storage.v2.Bucket.ILifecycle|null);

                /** Bucket createTime */
                createTime?: (google.protobuf.ITimestamp|null);

                /** Bucket cors */
                cors?: (google.storage.v2.Bucket.ICors[]|null);

                /** Bucket updateTime */
                updateTime?: (google.protobuf.ITimestamp|null);

                /** Bucket defaultEventBasedHold */
                defaultEventBasedHold?: (boolean|null);

                /** Bucket labels */
                labels?: ({ [k: string]: string }|null);

                /** Bucket website */
                website?: (google.storage.v2.Bucket.IWebsite|null);

                /** Bucket versioning */
                versioning?: (google.storage.v2.Bucket.IVersioning|null);

                /** Bucket logging */
                logging?: (google.storage.v2.Bucket.ILogging|null);

                /** Bucket owner */
                owner?: (google.storage.v2.IOwner|null);

                /** Bucket encryption */
                encryption?: (google.storage.v2.Bucket.IEncryption|null);

                /** Bucket billing */
                billing?: (google.storage.v2.Bucket.IBilling|null);

                /** Bucket retentionPolicy */
                retentionPolicy?: (google.storage.v2.Bucket.IRetentionPolicy|null);

                /** Bucket iamConfig */
                iamConfig?: (google.storage.v2.Bucket.IIamConfig|null);

                /** Bucket satisfiesPzs */
                satisfiesPzs?: (boolean|null);

                /** Bucket customPlacementConfig */
                customPlacementConfig?: (google.storage.v2.Bucket.ICustomPlacementConfig|null);

                /** Bucket autoclass */
                autoclass?: (google.storage.v2.Bucket.IAutoclass|null);

                /** Bucket hierarchicalNamespace */
                hierarchicalNamespace?: (google.storage.v2.Bucket.IHierarchicalNamespace|null);

                /** Bucket softDeletePolicy */
                softDeletePolicy?: (google.storage.v2.Bucket.ISoftDeletePolicy|null);

                /** Bucket objectRetention */
                objectRetention?: (google.storage.v2.Bucket.IObjectRetention|null);

                /** Bucket ipFilter */
                ipFilter?: (google.storage.v2.Bucket.IIpFilter|null);
            }

            /** Represents a Bucket. */
            class Bucket implements IBucket {

                /**
                 * Constructs a new Bucket.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.storage.v2.IBucket);

                /** Bucket name. */
                public name: string;

                /** Bucket bucketId. */
                public bucketId: string;

                /** Bucket etag. */
                public etag: string;

                /** Bucket project. */
                public project: string;

                /** Bucket metageneration. */
                public metageneration: (number|Long|string);

                /** Bucket location. */
                public location: string;

                /** Bucket locationType. */
                public locationType: string;

                /** Bucket storageClass. */
                public storageClass: string;

                /** Bucket rpo. */
                public rpo: string;

                /** Bucket acl. */
                public acl: google.storage.v2.IBucketAccessControl[];

                /** Bucket defaultObjectAcl. */
                public defaultObjectAcl: google.storage.v2.IObjectAccessControl[];

                /** Bucket lifecycle. */
                public lifecycle?: (google.storage.v2.Bucket.ILifecycle|null);

                /** Bucket createTime. */
                public createTime?: (google.protobuf.ITimestamp|null);

                /** Bucket cors. */
                public cors: google.storage.v2.Bucket.ICors[];

                /** Bucket updateTime. */
                public updateTime?: (google.protobuf.ITimestamp|null);

                /** Bucket defaultEventBasedHold. */
                public defaultEventBasedHold: boolean;

                /** Bucket labels. */
                public labels: { [k: string]: string };

                /** Bucket website. */
                public website?: (google.storage.v2.Bucket.IWebsite|null);

                /** Bucket versioning. */
                public versioning?: (google.storage.v2.Bucket.IVersioning|null);

                /** Bucket logging. */
                public logging?: (google.storage.v2.Bucket.ILogging|null);

                /** Bucket owner. */
                public owner?: (google.storage.v2.IOwner|null);

                /** Bucket encryption. */
                public encryption?: (google.storage.v2.Bucket.IEncryption|null);

                /** Bucket billing. */
                public billing?: (google.storage.v2.Bucket.IBilling|null);

                /** Bucket retentionPolicy. */
                public retentionPolicy?: (google.storage.v2.Bucket.IRetentionPolicy|null);

                /** Bucket iamConfig. */
                public iamConfig?: (google.storage.v2.Bucket.IIamConfig|null);

                /** Bucket satisfiesPzs. */
                public satisfiesPzs: boolean;

                /** Bucket customPlacementConfig. */
                public customPlacementConfig?: (google.storage.v2.Bucket.ICustomPlacementConfig|null);

                /** Bucket autoclass. */
                public autoclass?: (google.storage.v2.Bucket.IAutoclass|null);

                /** Bucket hierarchicalNamespace. */
                public hierarchicalNamespace?: (google.storage.v2.Bucket.IHierarchicalNamespace|null);

                /** Bucket softDeletePolicy. */
                public softDeletePolicy?: (google.storage.v2.Bucket.ISoftDeletePolicy|null);

                /** Bucket objectRetention. */
                public objectRetention?: (google.storage.v2.Bucket.IObjectRetention|null);

                /** Bucket ipFilter. */
                public ipFilter?: (google.storage.v2.Bucket.IIpFilter|null);

                /**
                 * Creates a new Bucket instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns Bucket instance
                 */
                public static create(properties?: google.storage.v2.IBucket): google.storage.v2.Bucket;

                /**
                 * Encodes the specified Bucket message. Does not implicitly {@link google.storage.v2.Bucket.verify|verify} messages.
                 * @param message Bucket message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.storage.v2.IBucket, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified Bucket message, length delimited. Does not implicitly {@link google.storage.v2.Bucket.verify|verify} messages.
                 * @param message Bucket message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.storage.v2.IBucket, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a Bucket message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns Bucket
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.Bucket;

                /**
                 * Decodes a Bucket message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns Bucket
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.Bucket;

                /**
                 * Verifies a Bucket message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a Bucket message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns Bucket
                 */
                public static fromObject(object: { [k: string]: any }): google.storage.v2.Bucket;

                /**
                 * Creates a plain object from a Bucket message. Also converts values to other types if specified.
                 * @param message Bucket
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.storage.v2.Bucket, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this Bucket to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for Bucket
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            namespace Bucket {

                /** Properties of a Billing. */
                interface IBilling {

                    /** Billing requesterPays */
                    requesterPays?: (boolean|null);
                }

                /** Represents a Billing. */
                class Billing implements IBilling {

                    /**
                     * Constructs a new Billing.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: google.storage.v2.Bucket.IBilling);

                    /** Billing requesterPays. */
                    public requesterPays: boolean;

                    /**
                     * Creates a new Billing instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns Billing instance
                     */
                    public static create(properties?: google.storage.v2.Bucket.IBilling): google.storage.v2.Bucket.Billing;

                    /**
                     * Encodes the specified Billing message. Does not implicitly {@link google.storage.v2.Bucket.Billing.verify|verify} messages.
                     * @param message Billing message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: google.storage.v2.Bucket.IBilling, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified Billing message, length delimited. Does not implicitly {@link google.storage.v2.Bucket.Billing.verify|verify} messages.
                     * @param message Billing message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: google.storage.v2.Bucket.IBilling, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes a Billing message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns Billing
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.Bucket.Billing;

                    /**
                     * Decodes a Billing message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns Billing
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.Bucket.Billing;

                    /**
                     * Verifies a Billing message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates a Billing message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns Billing
                     */
                    public static fromObject(object: { [k: string]: any }): google.storage.v2.Bucket.Billing;

                    /**
                     * Creates a plain object from a Billing message. Also converts values to other types if specified.
                     * @param message Billing
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: google.storage.v2.Bucket.Billing, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this Billing to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for Billing
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }

                /** Properties of a Cors. */
                interface ICors {

                    /** Cors origin */
                    origin?: (string[]|null);

                    /** Cors method */
                    method?: (string[]|null);

                    /** Cors responseHeader */
                    responseHeader?: (string[]|null);

                    /** Cors maxAgeSeconds */
                    maxAgeSeconds?: (number|null);
                }

                /** Represents a Cors. */
                class Cors implements ICors {

                    /**
                     * Constructs a new Cors.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: google.storage.v2.Bucket.ICors);

                    /** Cors origin. */
                    public origin: string[];

                    /** Cors method. */
                    public method: string[];

                    /** Cors responseHeader. */
                    public responseHeader: string[];

                    /** Cors maxAgeSeconds. */
                    public maxAgeSeconds: number;

                    /**
                     * Creates a new Cors instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns Cors instance
                     */
                    public static create(properties?: google.storage.v2.Bucket.ICors): google.storage.v2.Bucket.Cors;

                    /**
                     * Encodes the specified Cors message. Does not implicitly {@link google.storage.v2.Bucket.Cors.verify|verify} messages.
                     * @param message Cors message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: google.storage.v2.Bucket.ICors, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified Cors message, length delimited. Does not implicitly {@link google.storage.v2.Bucket.Cors.verify|verify} messages.
                     * @param message Cors message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: google.storage.v2.Bucket.ICors, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes a Cors message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns Cors
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.Bucket.Cors;

                    /**
                     * Decodes a Cors message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns Cors
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.Bucket.Cors;

                    /**
                     * Verifies a Cors message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates a Cors message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns Cors
                     */
                    public static fromObject(object: { [k: string]: any }): google.storage.v2.Bucket.Cors;

                    /**
                     * Creates a plain object from a Cors message. Also converts values to other types if specified.
                     * @param message Cors
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: google.storage.v2.Bucket.Cors, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this Cors to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for Cors
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }

                /** Properties of an Encryption. */
                interface IEncryption {

                    /** Encryption defaultKmsKey */
                    defaultKmsKey?: (string|null);

                    /** Encryption googleManagedEncryptionEnforcementConfig */
                    googleManagedEncryptionEnforcementConfig?: (google.storage.v2.Bucket.Encryption.IGoogleManagedEncryptionEnforcementConfig|null);

                    /** Encryption customerManagedEncryptionEnforcementConfig */
                    customerManagedEncryptionEnforcementConfig?: (google.storage.v2.Bucket.Encryption.ICustomerManagedEncryptionEnforcementConfig|null);

                    /** Encryption customerSuppliedEncryptionEnforcementConfig */
                    customerSuppliedEncryptionEnforcementConfig?: (google.storage.v2.Bucket.Encryption.ICustomerSuppliedEncryptionEnforcementConfig|null);
                }

                /** Represents an Encryption. */
                class Encryption implements IEncryption {

                    /**
                     * Constructs a new Encryption.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: google.storage.v2.Bucket.IEncryption);

                    /** Encryption defaultKmsKey. */
                    public defaultKmsKey: string;

                    /** Encryption googleManagedEncryptionEnforcementConfig. */
                    public googleManagedEncryptionEnforcementConfig?: (google.storage.v2.Bucket.Encryption.IGoogleManagedEncryptionEnforcementConfig|null);

                    /** Encryption customerManagedEncryptionEnforcementConfig. */
                    public customerManagedEncryptionEnforcementConfig?: (google.storage.v2.Bucket.Encryption.ICustomerManagedEncryptionEnforcementConfig|null);

                    /** Encryption customerSuppliedEncryptionEnforcementConfig. */
                    public customerSuppliedEncryptionEnforcementConfig?: (google.storage.v2.Bucket.Encryption.ICustomerSuppliedEncryptionEnforcementConfig|null);

                    /**
                     * Creates a new Encryption instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns Encryption instance
                     */
                    public static create(properties?: google.storage.v2.Bucket.IEncryption): google.storage.v2.Bucket.Encryption;

                    /**
                     * Encodes the specified Encryption message. Does not implicitly {@link google.storage.v2.Bucket.Encryption.verify|verify} messages.
                     * @param message Encryption message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: google.storage.v2.Bucket.IEncryption, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified Encryption message, length delimited. Does not implicitly {@link google.storage.v2.Bucket.Encryption.verify|verify} messages.
                     * @param message Encryption message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: google.storage.v2.Bucket.IEncryption, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes an Encryption message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns Encryption
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.Bucket.Encryption;

                    /**
                     * Decodes an Encryption message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns Encryption
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.Bucket.Encryption;

                    /**
                     * Verifies an Encryption message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates an Encryption message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns Encryption
                     */
                    public static fromObject(object: { [k: string]: any }): google.storage.v2.Bucket.Encryption;

                    /**
                     * Creates a plain object from an Encryption message. Also converts values to other types if specified.
                     * @param message Encryption
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: google.storage.v2.Bucket.Encryption, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this Encryption to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for Encryption
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }

                namespace Encryption {

                    /** Properties of a GoogleManagedEncryptionEnforcementConfig. */
                    interface IGoogleManagedEncryptionEnforcementConfig {

                        /** GoogleManagedEncryptionEnforcementConfig restrictionMode */
                        restrictionMode?: (string|null);

                        /** GoogleManagedEncryptionEnforcementConfig effectiveTime */
                        effectiveTime?: (google.protobuf.ITimestamp|null);
                    }

                    /** Represents a GoogleManagedEncryptionEnforcementConfig. */
                    class GoogleManagedEncryptionEnforcementConfig implements IGoogleManagedEncryptionEnforcementConfig {

                        /**
                         * Constructs a new GoogleManagedEncryptionEnforcementConfig.
                         * @param [properties] Properties to set
                         */
                        constructor(properties?: google.storage.v2.Bucket.Encryption.IGoogleManagedEncryptionEnforcementConfig);

                        /** GoogleManagedEncryptionEnforcementConfig restrictionMode. */
                        public restrictionMode?: (string|null);

                        /** GoogleManagedEncryptionEnforcementConfig effectiveTime. */
                        public effectiveTime?: (google.protobuf.ITimestamp|null);

                        /**
                         * Creates a new GoogleManagedEncryptionEnforcementConfig instance using the specified properties.
                         * @param [properties] Properties to set
                         * @returns GoogleManagedEncryptionEnforcementConfig instance
                         */
                        public static create(properties?: google.storage.v2.Bucket.Encryption.IGoogleManagedEncryptionEnforcementConfig): google.storage.v2.Bucket.Encryption.GoogleManagedEncryptionEnforcementConfig;

                        /**
                         * Encodes the specified GoogleManagedEncryptionEnforcementConfig message. Does not implicitly {@link google.storage.v2.Bucket.Encryption.GoogleManagedEncryptionEnforcementConfig.verify|verify} messages.
                         * @param message GoogleManagedEncryptionEnforcementConfig message or plain object to encode
                         * @param [writer] Writer to encode to
                         * @returns Writer
                         */
                        public static encode(message: google.storage.v2.Bucket.Encryption.IGoogleManagedEncryptionEnforcementConfig, writer?: $protobuf.Writer): $protobuf.Writer;

                        /**
                         * Encodes the specified GoogleManagedEncryptionEnforcementConfig message, length delimited. Does not implicitly {@link google.storage.v2.Bucket.Encryption.GoogleManagedEncryptionEnforcementConfig.verify|verify} messages.
                         * @param message GoogleManagedEncryptionEnforcementConfig message or plain object to encode
                         * @param [writer] Writer to encode to
                         * @returns Writer
                         */
                        public static encodeDelimited(message: google.storage.v2.Bucket.Encryption.IGoogleManagedEncryptionEnforcementConfig, writer?: $protobuf.Writer): $protobuf.Writer;

                        /**
                         * Decodes a GoogleManagedEncryptionEnforcementConfig message from the specified reader or buffer.
                         * @param reader Reader or buffer to decode from
                         * @param [length] Message length if known beforehand
                         * @returns GoogleManagedEncryptionEnforcementConfig
                         * @throws {Error} If the payload is not a reader or valid buffer
                         * @throws {$protobuf.util.ProtocolError} If required fields are missing
                         */
                        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.Bucket.Encryption.GoogleManagedEncryptionEnforcementConfig;

                        /**
                         * Decodes a GoogleManagedEncryptionEnforcementConfig message from the specified reader or buffer, length delimited.
                         * @param reader Reader or buffer to decode from
                         * @returns GoogleManagedEncryptionEnforcementConfig
                         * @throws {Error} If the payload is not a reader or valid buffer
                         * @throws {$protobuf.util.ProtocolError} If required fields are missing
                         */
                        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.Bucket.Encryption.GoogleManagedEncryptionEnforcementConfig;

                        /**
                         * Verifies a GoogleManagedEncryptionEnforcementConfig message.
                         * @param message Plain object to verify
                         * @returns `null` if valid, otherwise the reason why it is not
                         */
                        public static verify(message: { [k: string]: any }): (string|null);

                        /**
                         * Creates a GoogleManagedEncryptionEnforcementConfig message from a plain object. Also converts values to their respective internal types.
                         * @param object Plain object
                         * @returns GoogleManagedEncryptionEnforcementConfig
                         */
                        public static fromObject(object: { [k: string]: any }): google.storage.v2.Bucket.Encryption.GoogleManagedEncryptionEnforcementConfig;

                        /**
                         * Creates a plain object from a GoogleManagedEncryptionEnforcementConfig message. Also converts values to other types if specified.
                         * @param message GoogleManagedEncryptionEnforcementConfig
                         * @param [options] Conversion options
                         * @returns Plain object
                         */
                        public static toObject(message: google.storage.v2.Bucket.Encryption.GoogleManagedEncryptionEnforcementConfig, options?: $protobuf.IConversionOptions): { [k: string]: any };

                        /**
                         * Converts this GoogleManagedEncryptionEnforcementConfig to JSON.
                         * @returns JSON object
                         */
                        public toJSON(): { [k: string]: any };

                        /**
                         * Gets the default type url for GoogleManagedEncryptionEnforcementConfig
                         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                         * @returns The default type url
                         */
                        public static getTypeUrl(typeUrlPrefix?: string): string;
                    }

                    /** Properties of a CustomerManagedEncryptionEnforcementConfig. */
                    interface ICustomerManagedEncryptionEnforcementConfig {

                        /** CustomerManagedEncryptionEnforcementConfig restrictionMode */
                        restrictionMode?: (string|null);

                        /** CustomerManagedEncryptionEnforcementConfig effectiveTime */
                        effectiveTime?: (google.protobuf.ITimestamp|null);
                    }

                    /** Represents a CustomerManagedEncryptionEnforcementConfig. */
                    class CustomerManagedEncryptionEnforcementConfig implements ICustomerManagedEncryptionEnforcementConfig {

                        /**
                         * Constructs a new CustomerManagedEncryptionEnforcementConfig.
                         * @param [properties] Properties to set
                         */
                        constructor(properties?: google.storage.v2.Bucket.Encryption.ICustomerManagedEncryptionEnforcementConfig);

                        /** CustomerManagedEncryptionEnforcementConfig restrictionMode. */
                        public restrictionMode?: (string|null);

                        /** CustomerManagedEncryptionEnforcementConfig effectiveTime. */
                        public effectiveTime?: (google.protobuf.ITimestamp|null);

                        /**
                         * Creates a new CustomerManagedEncryptionEnforcementConfig instance using the specified properties.
                         * @param [properties] Properties to set
                         * @returns CustomerManagedEncryptionEnforcementConfig instance
                         */
                        public static create(properties?: google.storage.v2.Bucket.Encryption.ICustomerManagedEncryptionEnforcementConfig): google.storage.v2.Bucket.Encryption.CustomerManagedEncryptionEnforcementConfig;

                        /**
                         * Encodes the specified CustomerManagedEncryptionEnforcementConfig message. Does not implicitly {@link google.storage.v2.Bucket.Encryption.CustomerManagedEncryptionEnforcementConfig.verify|verify} messages.
                         * @param message CustomerManagedEncryptionEnforcementConfig message or plain object to encode
                         * @param [writer] Writer to encode to
                         * @returns Writer
                         */
                        public static encode(message: google.storage.v2.Bucket.Encryption.ICustomerManagedEncryptionEnforcementConfig, writer?: $protobuf.Writer): $protobuf.Writer;

                        /**
                         * Encodes the specified CustomerManagedEncryptionEnforcementConfig message, length delimited. Does not implicitly {@link google.storage.v2.Bucket.Encryption.CustomerManagedEncryptionEnforcementConfig.verify|verify} messages.
                         * @param message CustomerManagedEncryptionEnforcementConfig message or plain object to encode
                         * @param [writer] Writer to encode to
                         * @returns Writer
                         */
                        public static encodeDelimited(message: google.storage.v2.Bucket.Encryption.ICustomerManagedEncryptionEnforcementConfig, writer?: $protobuf.Writer): $protobuf.Writer;

                        /**
                         * Decodes a CustomerManagedEncryptionEnforcementConfig message from the specified reader or buffer.
                         * @param reader Reader or buffer to decode from
                         * @param [length] Message length if known beforehand
                         * @returns CustomerManagedEncryptionEnforcementConfig
                         * @throws {Error} If the payload is not a reader or valid buffer
                         * @throws {$protobuf.util.ProtocolError} If required fields are missing
                         */
                        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.Bucket.Encryption.CustomerManagedEncryptionEnforcementConfig;

                        /**
                         * Decodes a CustomerManagedEncryptionEnforcementConfig message from the specified reader or buffer, length delimited.
                         * @param reader Reader or buffer to decode from
                         * @returns CustomerManagedEncryptionEnforcementConfig
                         * @throws {Error} If the payload is not a reader or valid buffer
                         * @throws {$protobuf.util.ProtocolError} If required fields are missing
                         */
                        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.Bucket.Encryption.CustomerManagedEncryptionEnforcementConfig;

                        /**
                         * Verifies a CustomerManagedEncryptionEnforcementConfig message.
                         * @param message Plain object to verify
                         * @returns `null` if valid, otherwise the reason why it is not
                         */
                        public static verify(message: { [k: string]: any }): (string|null);

                        /**
                         * Creates a CustomerManagedEncryptionEnforcementConfig message from a plain object. Also converts values to their respective internal types.
                         * @param object Plain object
                         * @returns CustomerManagedEncryptionEnforcementConfig
                         */
                        public static fromObject(object: { [k: string]: any }): google.storage.v2.Bucket.Encryption.CustomerManagedEncryptionEnforcementConfig;

                        /**
                         * Creates a plain object from a CustomerManagedEncryptionEnforcementConfig message. Also converts values to other types if specified.
                         * @param message CustomerManagedEncryptionEnforcementConfig
                         * @param [options] Conversion options
                         * @returns Plain object
                         */
                        public static toObject(message: google.storage.v2.Bucket.Encryption.CustomerManagedEncryptionEnforcementConfig, options?: $protobuf.IConversionOptions): { [k: string]: any };

                        /**
                         * Converts this CustomerManagedEncryptionEnforcementConfig to JSON.
                         * @returns JSON object
                         */
                        public toJSON(): { [k: string]: any };

                        /**
                         * Gets the default type url for CustomerManagedEncryptionEnforcementConfig
                         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                         * @returns The default type url
                         */
                        public static getTypeUrl(typeUrlPrefix?: string): string;
                    }

                    /** Properties of a CustomerSuppliedEncryptionEnforcementConfig. */
                    interface ICustomerSuppliedEncryptionEnforcementConfig {

                        /** CustomerSuppliedEncryptionEnforcementConfig restrictionMode */
                        restrictionMode?: (string|null);

                        /** CustomerSuppliedEncryptionEnforcementConfig effectiveTime */
                        effectiveTime?: (google.protobuf.ITimestamp|null);
                    }

                    /** Represents a CustomerSuppliedEncryptionEnforcementConfig. */
                    class CustomerSuppliedEncryptionEnforcementConfig implements ICustomerSuppliedEncryptionEnforcementConfig {

                        /**
                         * Constructs a new CustomerSuppliedEncryptionEnforcementConfig.
                         * @param [properties] Properties to set
                         */
                        constructor(properties?: google.storage.v2.Bucket.Encryption.ICustomerSuppliedEncryptionEnforcementConfig);

                        /** CustomerSuppliedEncryptionEnforcementConfig restrictionMode. */
                        public restrictionMode?: (string|null);

                        /** CustomerSuppliedEncryptionEnforcementConfig effectiveTime. */
                        public effectiveTime?: (google.protobuf.ITimestamp|null);

                        /**
                         * Creates a new CustomerSuppliedEncryptionEnforcementConfig instance using the specified properties.
                         * @param [properties] Properties to set
                         * @returns CustomerSuppliedEncryptionEnforcementConfig instance
                         */
                        public static create(properties?: google.storage.v2.Bucket.Encryption.ICustomerSuppliedEncryptionEnforcementConfig): google.storage.v2.Bucket.Encryption.CustomerSuppliedEncryptionEnforcementConfig;

                        /**
                         * Encodes the specified CustomerSuppliedEncryptionEnforcementConfig message. Does not implicitly {@link google.storage.v2.Bucket.Encryption.CustomerSuppliedEncryptionEnforcementConfig.verify|verify} messages.
                         * @param message CustomerSuppliedEncryptionEnforcementConfig message or plain object to encode
                         * @param [writer] Writer to encode to
                         * @returns Writer
                         */
                        public static encode(message: google.storage.v2.Bucket.Encryption.ICustomerSuppliedEncryptionEnforcementConfig, writer?: $protobuf.Writer): $protobuf.Writer;

                        /**
                         * Encodes the specified CustomerSuppliedEncryptionEnforcementConfig message, length delimited. Does not implicitly {@link google.storage.v2.Bucket.Encryption.CustomerSuppliedEncryptionEnforcementConfig.verify|verify} messages.
                         * @param message CustomerSuppliedEncryptionEnforcementConfig message or plain object to encode
                         * @param [writer] Writer to encode to
                         * @returns Writer
                         */
                        public static encodeDelimited(message: google.storage.v2.Bucket.Encryption.ICustomerSuppliedEncryptionEnforcementConfig, writer?: $protobuf.Writer): $protobuf.Writer;

                        /**
                         * Decodes a CustomerSuppliedEncryptionEnforcementConfig message from the specified reader or buffer.
                         * @param reader Reader or buffer to decode from
                         * @param [length] Message length if known beforehand
                         * @returns CustomerSuppliedEncryptionEnforcementConfig
                         * @throws {Error} If the payload is not a reader or valid buffer
                         * @throws {$protobuf.util.ProtocolError} If required fields are missing
                         */
                        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.Bucket.Encryption.CustomerSuppliedEncryptionEnforcementConfig;

                        /**
                         * Decodes a CustomerSuppliedEncryptionEnforcementConfig message from the specified reader or buffer, length delimited.
                         * @param reader Reader or buffer to decode from
                         * @returns CustomerSuppliedEncryptionEnforcementConfig
                         * @throws {Error} If the payload is not a reader or valid buffer
                         * @throws {$protobuf.util.ProtocolError} If required fields are missing
                         */
                        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.Bucket.Encryption.CustomerSuppliedEncryptionEnforcementConfig;

                        /**
                         * Verifies a CustomerSuppliedEncryptionEnforcementConfig message.
                         * @param message Plain object to verify
                         * @returns `null` if valid, otherwise the reason why it is not
                         */
                        public static verify(message: { [k: string]: any }): (string|null);

                        /**
                         * Creates a CustomerSuppliedEncryptionEnforcementConfig message from a plain object. Also converts values to their respective internal types.
                         * @param object Plain object
                         * @returns CustomerSuppliedEncryptionEnforcementConfig
                         */
                        public static fromObject(object: { [k: string]: any }): google.storage.v2.Bucket.Encryption.CustomerSuppliedEncryptionEnforcementConfig;

                        /**
                         * Creates a plain object from a CustomerSuppliedEncryptionEnforcementConfig message. Also converts values to other types if specified.
                         * @param message CustomerSuppliedEncryptionEnforcementConfig
                         * @param [options] Conversion options
                         * @returns Plain object
                         */
                        public static toObject(message: google.storage.v2.Bucket.Encryption.CustomerSuppliedEncryptionEnforcementConfig, options?: $protobuf.IConversionOptions): { [k: string]: any };

                        /**
                         * Converts this CustomerSuppliedEncryptionEnforcementConfig to JSON.
                         * @returns JSON object
                         */
                        public toJSON(): { [k: string]: any };

                        /**
                         * Gets the default type url for CustomerSuppliedEncryptionEnforcementConfig
                         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                         * @returns The default type url
                         */
                        public static getTypeUrl(typeUrlPrefix?: string): string;
                    }
                }

                /** Properties of an IamConfig. */
                interface IIamConfig {

                    /** IamConfig uniformBucketLevelAccess */
                    uniformBucketLevelAccess?: (google.storage.v2.Bucket.IamConfig.IUniformBucketLevelAccess|null);

                    /** IamConfig publicAccessPrevention */
                    publicAccessPrevention?: (string|null);
                }

                /** Represents an IamConfig. */
                class IamConfig implements IIamConfig {

                    /**
                     * Constructs a new IamConfig.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: google.storage.v2.Bucket.IIamConfig);

                    /** IamConfig uniformBucketLevelAccess. */
                    public uniformBucketLevelAccess?: (google.storage.v2.Bucket.IamConfig.IUniformBucketLevelAccess|null);

                    /** IamConfig publicAccessPrevention. */
                    public publicAccessPrevention: string;

                    /**
                     * Creates a new IamConfig instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns IamConfig instance
                     */
                    public static create(properties?: google.storage.v2.Bucket.IIamConfig): google.storage.v2.Bucket.IamConfig;

                    /**
                     * Encodes the specified IamConfig message. Does not implicitly {@link google.storage.v2.Bucket.IamConfig.verify|verify} messages.
                     * @param message IamConfig message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: google.storage.v2.Bucket.IIamConfig, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified IamConfig message, length delimited. Does not implicitly {@link google.storage.v2.Bucket.IamConfig.verify|verify} messages.
                     * @param message IamConfig message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: google.storage.v2.Bucket.IIamConfig, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes an IamConfig message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns IamConfig
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.Bucket.IamConfig;

                    /**
                     * Decodes an IamConfig message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns IamConfig
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.Bucket.IamConfig;

                    /**
                     * Verifies an IamConfig message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates an IamConfig message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns IamConfig
                     */
                    public static fromObject(object: { [k: string]: any }): google.storage.v2.Bucket.IamConfig;

                    /**
                     * Creates a plain object from an IamConfig message. Also converts values to other types if specified.
                     * @param message IamConfig
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: google.storage.v2.Bucket.IamConfig, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this IamConfig to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for IamConfig
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }

                namespace IamConfig {

                    /** Properties of an UniformBucketLevelAccess. */
                    interface IUniformBucketLevelAccess {

                        /** UniformBucketLevelAccess enabled */
                        enabled?: (boolean|null);

                        /** UniformBucketLevelAccess lockTime */
                        lockTime?: (google.protobuf.ITimestamp|null);
                    }

                    /** Represents an UniformBucketLevelAccess. */
                    class UniformBucketLevelAccess implements IUniformBucketLevelAccess {

                        /**
                         * Constructs a new UniformBucketLevelAccess.
                         * @param [properties] Properties to set
                         */
                        constructor(properties?: google.storage.v2.Bucket.IamConfig.IUniformBucketLevelAccess);

                        /** UniformBucketLevelAccess enabled. */
                        public enabled: boolean;

                        /** UniformBucketLevelAccess lockTime. */
                        public lockTime?: (google.protobuf.ITimestamp|null);

                        /**
                         * Creates a new UniformBucketLevelAccess instance using the specified properties.
                         * @param [properties] Properties to set
                         * @returns UniformBucketLevelAccess instance
                         */
                        public static create(properties?: google.storage.v2.Bucket.IamConfig.IUniformBucketLevelAccess): google.storage.v2.Bucket.IamConfig.UniformBucketLevelAccess;

                        /**
                         * Encodes the specified UniformBucketLevelAccess message. Does not implicitly {@link google.storage.v2.Bucket.IamConfig.UniformBucketLevelAccess.verify|verify} messages.
                         * @param message UniformBucketLevelAccess message or plain object to encode
                         * @param [writer] Writer to encode to
                         * @returns Writer
                         */
                        public static encode(message: google.storage.v2.Bucket.IamConfig.IUniformBucketLevelAccess, writer?: $protobuf.Writer): $protobuf.Writer;

                        /**
                         * Encodes the specified UniformBucketLevelAccess message, length delimited. Does not implicitly {@link google.storage.v2.Bucket.IamConfig.UniformBucketLevelAccess.verify|verify} messages.
                         * @param message UniformBucketLevelAccess message or plain object to encode
                         * @param [writer] Writer to encode to
                         * @returns Writer
                         */
                        public static encodeDelimited(message: google.storage.v2.Bucket.IamConfig.IUniformBucketLevelAccess, writer?: $protobuf.Writer): $protobuf.Writer;

                        /**
                         * Decodes an UniformBucketLevelAccess message from the specified reader or buffer.
                         * @param reader Reader or buffer to decode from
                         * @param [length] Message length if known beforehand
                         * @returns UniformBucketLevelAccess
                         * @throws {Error} If the payload is not a reader or valid buffer
                         * @throws {$protobuf.util.ProtocolError} If required fields are missing
                         */
                        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.Bucket.IamConfig.UniformBucketLevelAccess;

                        /**
                         * Decodes an UniformBucketLevelAccess message from the specified reader or buffer, length delimited.
                         * @param reader Reader or buffer to decode from
                         * @returns UniformBucketLevelAccess
                         * @throws {Error} If the payload is not a reader or valid buffer
                         * @throws {$protobuf.util.ProtocolError} If required fields are missing
                         */
                        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.Bucket.IamConfig.UniformBucketLevelAccess;

                        /**
                         * Verifies an UniformBucketLevelAccess message.
                         * @param message Plain object to verify
                         * @returns `null` if valid, otherwise the reason why it is not
                         */
                        public static verify(message: { [k: string]: any }): (string|null);

                        /**
                         * Creates an UniformBucketLevelAccess message from a plain object. Also converts values to their respective internal types.
                         * @param object Plain object
                         * @returns UniformBucketLevelAccess
                         */
                        public static fromObject(object: { [k: string]: any }): google.storage.v2.Bucket.IamConfig.UniformBucketLevelAccess;

                        /**
                         * Creates a plain object from an UniformBucketLevelAccess message. Also converts values to other types if specified.
                         * @param message UniformBucketLevelAccess
                         * @param [options] Conversion options
                         * @returns Plain object
                         */
                        public static toObject(message: google.storage.v2.Bucket.IamConfig.UniformBucketLevelAccess, options?: $protobuf.IConversionOptions): { [k: string]: any };

                        /**
                         * Converts this UniformBucketLevelAccess to JSON.
                         * @returns JSON object
                         */
                        public toJSON(): { [k: string]: any };

                        /**
                         * Gets the default type url for UniformBucketLevelAccess
                         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                         * @returns The default type url
                         */
                        public static getTypeUrl(typeUrlPrefix?: string): string;
                    }
                }

                /** Properties of a Lifecycle. */
                interface ILifecycle {

                    /** Lifecycle rule */
                    rule?: (google.storage.v2.Bucket.Lifecycle.IRule[]|null);
                }

                /** Represents a Lifecycle. */
                class Lifecycle implements ILifecycle {

                    /**
                     * Constructs a new Lifecycle.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: google.storage.v2.Bucket.ILifecycle);

                    /** Lifecycle rule. */
                    public rule: google.storage.v2.Bucket.Lifecycle.IRule[];

                    /**
                     * Creates a new Lifecycle instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns Lifecycle instance
                     */
                    public static create(properties?: google.storage.v2.Bucket.ILifecycle): google.storage.v2.Bucket.Lifecycle;

                    /**
                     * Encodes the specified Lifecycle message. Does not implicitly {@link google.storage.v2.Bucket.Lifecycle.verify|verify} messages.
                     * @param message Lifecycle message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: google.storage.v2.Bucket.ILifecycle, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified Lifecycle message, length delimited. Does not implicitly {@link google.storage.v2.Bucket.Lifecycle.verify|verify} messages.
                     * @param message Lifecycle message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: google.storage.v2.Bucket.ILifecycle, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes a Lifecycle message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns Lifecycle
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.Bucket.Lifecycle;

                    /**
                     * Decodes a Lifecycle message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns Lifecycle
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.Bucket.Lifecycle;

                    /**
                     * Verifies a Lifecycle message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates a Lifecycle message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns Lifecycle
                     */
                    public static fromObject(object: { [k: string]: any }): google.storage.v2.Bucket.Lifecycle;

                    /**
                     * Creates a plain object from a Lifecycle message. Also converts values to other types if specified.
                     * @param message Lifecycle
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: google.storage.v2.Bucket.Lifecycle, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this Lifecycle to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for Lifecycle
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }

                namespace Lifecycle {

                    /** Properties of a Rule. */
                    interface IRule {

                        /** Rule action */
                        action?: (google.storage.v2.Bucket.Lifecycle.Rule.IAction|null);

                        /** Rule condition */
                        condition?: (google.storage.v2.Bucket.Lifecycle.Rule.ICondition|null);
                    }

                    /** Represents a Rule. */
                    class Rule implements IRule {

                        /**
                         * Constructs a new Rule.
                         * @param [properties] Properties to set
                         */
                        constructor(properties?: google.storage.v2.Bucket.Lifecycle.IRule);

                        /** Rule action. */
                        public action?: (google.storage.v2.Bucket.Lifecycle.Rule.IAction|null);

                        /** Rule condition. */
                        public condition?: (google.storage.v2.Bucket.Lifecycle.Rule.ICondition|null);

                        /**
                         * Creates a new Rule instance using the specified properties.
                         * @param [properties] Properties to set
                         * @returns Rule instance
                         */
                        public static create(properties?: google.storage.v2.Bucket.Lifecycle.IRule): google.storage.v2.Bucket.Lifecycle.Rule;

                        /**
                         * Encodes the specified Rule message. Does not implicitly {@link google.storage.v2.Bucket.Lifecycle.Rule.verify|verify} messages.
                         * @param message Rule message or plain object to encode
                         * @param [writer] Writer to encode to
                         * @returns Writer
                         */
                        public static encode(message: google.storage.v2.Bucket.Lifecycle.IRule, writer?: $protobuf.Writer): $protobuf.Writer;

                        /**
                         * Encodes the specified Rule message, length delimited. Does not implicitly {@link google.storage.v2.Bucket.Lifecycle.Rule.verify|verify} messages.
                         * @param message Rule message or plain object to encode
                         * @param [writer] Writer to encode to
                         * @returns Writer
                         */
                        public static encodeDelimited(message: google.storage.v2.Bucket.Lifecycle.IRule, writer?: $protobuf.Writer): $protobuf.Writer;

                        /**
                         * Decodes a Rule message from the specified reader or buffer.
                         * @param reader Reader or buffer to decode from
                         * @param [length] Message length if known beforehand
                         * @returns Rule
                         * @throws {Error} If the payload is not a reader or valid buffer
                         * @throws {$protobuf.util.ProtocolError} If required fields are missing
                         */
                        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.Bucket.Lifecycle.Rule;

                        /**
                         * Decodes a Rule message from the specified reader or buffer, length delimited.
                         * @param reader Reader or buffer to decode from
                         * @returns Rule
                         * @throws {Error} If the payload is not a reader or valid buffer
                         * @throws {$protobuf.util.ProtocolError} If required fields are missing
                         */
                        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.Bucket.Lifecycle.Rule;

                        /**
                         * Verifies a Rule message.
                         * @param message Plain object to verify
                         * @returns `null` if valid, otherwise the reason why it is not
                         */
                        public static verify(message: { [k: string]: any }): (string|null);

                        /**
                         * Creates a Rule message from a plain object. Also converts values to their respective internal types.
                         * @param object Plain object
                         * @returns Rule
                         */
                        public static fromObject(object: { [k: string]: any }): google.storage.v2.Bucket.Lifecycle.Rule;

                        /**
                         * Creates a plain object from a Rule message. Also converts values to other types if specified.
                         * @param message Rule
                         * @param [options] Conversion options
                         * @returns Plain object
                         */
                        public static toObject(message: google.storage.v2.Bucket.Lifecycle.Rule, options?: $protobuf.IConversionOptions): { [k: string]: any };

                        /**
                         * Converts this Rule to JSON.
                         * @returns JSON object
                         */
                        public toJSON(): { [k: string]: any };

                        /**
                         * Gets the default type url for Rule
                         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                         * @returns The default type url
                         */
                        public static getTypeUrl(typeUrlPrefix?: string): string;
                    }

                    namespace Rule {

                        /** Properties of an Action. */
                        interface IAction {

                            /** Action type */
                            type?: (string|null);

                            /** Action storageClass */
                            storageClass?: (string|null);
                        }

                        /** Represents an Action. */
                        class Action implements IAction {

                            /**
                             * Constructs a new Action.
                             * @param [properties] Properties to set
                             */
                            constructor(properties?: google.storage.v2.Bucket.Lifecycle.Rule.IAction);

                            /** Action type. */
                            public type: string;

                            /** Action storageClass. */
                            public storageClass: string;

                            /**
                             * Creates a new Action instance using the specified properties.
                             * @param [properties] Properties to set
                             * @returns Action instance
                             */
                            public static create(properties?: google.storage.v2.Bucket.Lifecycle.Rule.IAction): google.storage.v2.Bucket.Lifecycle.Rule.Action;

                            /**
                             * Encodes the specified Action message. Does not implicitly {@link google.storage.v2.Bucket.Lifecycle.Rule.Action.verify|verify} messages.
                             * @param message Action message or plain object to encode
                             * @param [writer] Writer to encode to
                             * @returns Writer
                             */
                            public static encode(message: google.storage.v2.Bucket.Lifecycle.Rule.IAction, writer?: $protobuf.Writer): $protobuf.Writer;

                            /**
                             * Encodes the specified Action message, length delimited. Does not implicitly {@link google.storage.v2.Bucket.Lifecycle.Rule.Action.verify|verify} messages.
                             * @param message Action message or plain object to encode
                             * @param [writer] Writer to encode to
                             * @returns Writer
                             */
                            public static encodeDelimited(message: google.storage.v2.Bucket.Lifecycle.Rule.IAction, writer?: $protobuf.Writer): $protobuf.Writer;

                            /**
                             * Decodes an Action message from the specified reader or buffer.
                             * @param reader Reader or buffer to decode from
                             * @param [length] Message length if known beforehand
                             * @returns Action
                             * @throws {Error} If the payload is not a reader or valid buffer
                             * @throws {$protobuf.util.ProtocolError} If required fields are missing
                             */
                            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.Bucket.Lifecycle.Rule.Action;

                            /**
                             * Decodes an Action message from the specified reader or buffer, length delimited.
                             * @param reader Reader or buffer to decode from
                             * @returns Action
                             * @throws {Error} If the payload is not a reader or valid buffer
                             * @throws {$protobuf.util.ProtocolError} If required fields are missing
                             */
                            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.Bucket.Lifecycle.Rule.Action;

                            /**
                             * Verifies an Action message.
                             * @param message Plain object to verify
                             * @returns `null` if valid, otherwise the reason why it is not
                             */
                            public static verify(message: { [k: string]: any }): (string|null);

                            /**
                             * Creates an Action message from a plain object. Also converts values to their respective internal types.
                             * @param object Plain object
                             * @returns Action
                             */
                            public static fromObject(object: { [k: string]: any }): google.storage.v2.Bucket.Lifecycle.Rule.Action;

                            /**
                             * Creates a plain object from an Action message. Also converts values to other types if specified.
                             * @param message Action
                             * @param [options] Conversion options
                             * @returns Plain object
                             */
                            public static toObject(message: google.storage.v2.Bucket.Lifecycle.Rule.Action, options?: $protobuf.IConversionOptions): { [k: string]: any };

                            /**
                             * Converts this Action to JSON.
                             * @returns JSON object
                             */
                            public toJSON(): { [k: string]: any };

                            /**
                             * Gets the default type url for Action
                             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                             * @returns The default type url
                             */
                            public static getTypeUrl(typeUrlPrefix?: string): string;
                        }

                        /** Properties of a Condition. */
                        interface ICondition {

                            /** Condition ageDays */
                            ageDays?: (number|null);

                            /** Condition createdBefore */
                            createdBefore?: (google.type.IDate|null);

                            /** Condition isLive */
                            isLive?: (boolean|null);

                            /** Condition numNewerVersions */
                            numNewerVersions?: (number|null);

                            /** Condition matchesStorageClass */
                            matchesStorageClass?: (string[]|null);

                            /** Condition daysSinceCustomTime */
                            daysSinceCustomTime?: (number|null);

                            /** Condition customTimeBefore */
                            customTimeBefore?: (google.type.IDate|null);

                            /** Condition daysSinceNoncurrentTime */
                            daysSinceNoncurrentTime?: (number|null);

                            /** Condition noncurrentTimeBefore */
                            noncurrentTimeBefore?: (google.type.IDate|null);

                            /** Condition matchesPrefix */
                            matchesPrefix?: (string[]|null);

                            /** Condition matchesSuffix */
                            matchesSuffix?: (string[]|null);
                        }

                        /** Represents a Condition. */
                        class Condition implements ICondition {

                            /**
                             * Constructs a new Condition.
                             * @param [properties] Properties to set
                             */
                            constructor(properties?: google.storage.v2.Bucket.Lifecycle.Rule.ICondition);

                            /** Condition ageDays. */
                            public ageDays?: (number|null);

                            /** Condition createdBefore. */
                            public createdBefore?: (google.type.IDate|null);

                            /** Condition isLive. */
                            public isLive?: (boolean|null);

                            /** Condition numNewerVersions. */
                            public numNewerVersions?: (number|null);

                            /** Condition matchesStorageClass. */
                            public matchesStorageClass: string[];

                            /** Condition daysSinceCustomTime. */
                            public daysSinceCustomTime?: (number|null);

                            /** Condition customTimeBefore. */
                            public customTimeBefore?: (google.type.IDate|null);

                            /** Condition daysSinceNoncurrentTime. */
                            public daysSinceNoncurrentTime?: (number|null);

                            /** Condition noncurrentTimeBefore. */
                            public noncurrentTimeBefore?: (google.type.IDate|null);

                            /** Condition matchesPrefix. */
                            public matchesPrefix: string[];

                            /** Condition matchesSuffix. */
                            public matchesSuffix: string[];

                            /**
                             * Creates a new Condition instance using the specified properties.
                             * @param [properties] Properties to set
                             * @returns Condition instance
                             */
                            public static create(properties?: google.storage.v2.Bucket.Lifecycle.Rule.ICondition): google.storage.v2.Bucket.Lifecycle.Rule.Condition;

                            /**
                             * Encodes the specified Condition message. Does not implicitly {@link google.storage.v2.Bucket.Lifecycle.Rule.Condition.verify|verify} messages.
                             * @param message Condition message or plain object to encode
                             * @param [writer] Writer to encode to
                             * @returns Writer
                             */
                            public static encode(message: google.storage.v2.Bucket.Lifecycle.Rule.ICondition, writer?: $protobuf.Writer): $protobuf.Writer;

                            /**
                             * Encodes the specified Condition message, length delimited. Does not implicitly {@link google.storage.v2.Bucket.Lifecycle.Rule.Condition.verify|verify} messages.
                             * @param message Condition message or plain object to encode
                             * @param [writer] Writer to encode to
                             * @returns Writer
                             */
                            public static encodeDelimited(message: google.storage.v2.Bucket.Lifecycle.Rule.ICondition, writer?: $protobuf.Writer): $protobuf.Writer;

                            /**
                             * Decodes a Condition message from the specified reader or buffer.
                             * @param reader Reader or buffer to decode from
                             * @param [length] Message length if known beforehand
                             * @returns Condition
                             * @throws {Error} If the payload is not a reader or valid buffer
                             * @throws {$protobuf.util.ProtocolError} If required fields are missing
                             */
                            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.Bucket.Lifecycle.Rule.Condition;

                            /**
                             * Decodes a Condition message from the specified reader or buffer, length delimited.
                             * @param reader Reader or buffer to decode from
                             * @returns Condition
                             * @throws {Error} If the payload is not a reader or valid buffer
                             * @throws {$protobuf.util.ProtocolError} If required fields are missing
                             */
                            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.Bucket.Lifecycle.Rule.Condition;

                            /**
                             * Verifies a Condition message.
                             * @param message Plain object to verify
                             * @returns `null` if valid, otherwise the reason why it is not
                             */
                            public static verify(message: { [k: string]: any }): (string|null);

                            /**
                             * Creates a Condition message from a plain object. Also converts values to their respective internal types.
                             * @param object Plain object
                             * @returns Condition
                             */
                            public static fromObject(object: { [k: string]: any }): google.storage.v2.Bucket.Lifecycle.Rule.Condition;

                            /**
                             * Creates a plain object from a Condition message. Also converts values to other types if specified.
                             * @param message Condition
                             * @param [options] Conversion options
                             * @returns Plain object
                             */
                            public static toObject(message: google.storage.v2.Bucket.Lifecycle.Rule.Condition, options?: $protobuf.IConversionOptions): { [k: string]: any };

                            /**
                             * Converts this Condition to JSON.
                             * @returns JSON object
                             */
                            public toJSON(): { [k: string]: any };

                            /**
                             * Gets the default type url for Condition
                             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                             * @returns The default type url
                             */
                            public static getTypeUrl(typeUrlPrefix?: string): string;
                        }
                    }
                }

                /** Properties of a Logging. */
                interface ILogging {

                    /** Logging logBucket */
                    logBucket?: (string|null);

                    /** Logging logObjectPrefix */
                    logObjectPrefix?: (string|null);
                }

                /** Represents a Logging. */
                class Logging implements ILogging {

                    /**
                     * Constructs a new Logging.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: google.storage.v2.Bucket.ILogging);

                    /** Logging logBucket. */
                    public logBucket: string;

                    /** Logging logObjectPrefix. */
                    public logObjectPrefix: string;

                    /**
                     * Creates a new Logging instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns Logging instance
                     */
                    public static create(properties?: google.storage.v2.Bucket.ILogging): google.storage.v2.Bucket.Logging;

                    /**
                     * Encodes the specified Logging message. Does not implicitly {@link google.storage.v2.Bucket.Logging.verify|verify} messages.
                     * @param message Logging message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: google.storage.v2.Bucket.ILogging, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified Logging message, length delimited. Does not implicitly {@link google.storage.v2.Bucket.Logging.verify|verify} messages.
                     * @param message Logging message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: google.storage.v2.Bucket.ILogging, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes a Logging message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns Logging
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.Bucket.Logging;

                    /**
                     * Decodes a Logging message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns Logging
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.Bucket.Logging;

                    /**
                     * Verifies a Logging message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates a Logging message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns Logging
                     */
                    public static fromObject(object: { [k: string]: any }): google.storage.v2.Bucket.Logging;

                    /**
                     * Creates a plain object from a Logging message. Also converts values to other types if specified.
                     * @param message Logging
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: google.storage.v2.Bucket.Logging, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this Logging to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for Logging
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }

                /** Properties of an ObjectRetention. */
                interface IObjectRetention {

                    /** ObjectRetention enabled */
                    enabled?: (boolean|null);
                }

                /** Represents an ObjectRetention. */
                class ObjectRetention implements IObjectRetention {

                    /**
                     * Constructs a new ObjectRetention.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: google.storage.v2.Bucket.IObjectRetention);

                    /** ObjectRetention enabled. */
                    public enabled: boolean;

                    /**
                     * Creates a new ObjectRetention instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns ObjectRetention instance
                     */
                    public static create(properties?: google.storage.v2.Bucket.IObjectRetention): google.storage.v2.Bucket.ObjectRetention;

                    /**
                     * Encodes the specified ObjectRetention message. Does not implicitly {@link google.storage.v2.Bucket.ObjectRetention.verify|verify} messages.
                     * @param message ObjectRetention message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: google.storage.v2.Bucket.IObjectRetention, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified ObjectRetention message, length delimited. Does not implicitly {@link google.storage.v2.Bucket.ObjectRetention.verify|verify} messages.
                     * @param message ObjectRetention message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: google.storage.v2.Bucket.IObjectRetention, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes an ObjectRetention message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns ObjectRetention
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.Bucket.ObjectRetention;

                    /**
                     * Decodes an ObjectRetention message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns ObjectRetention
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.Bucket.ObjectRetention;

                    /**
                     * Verifies an ObjectRetention message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates an ObjectRetention message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns ObjectRetention
                     */
                    public static fromObject(object: { [k: string]: any }): google.storage.v2.Bucket.ObjectRetention;

                    /**
                     * Creates a plain object from an ObjectRetention message. Also converts values to other types if specified.
                     * @param message ObjectRetention
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: google.storage.v2.Bucket.ObjectRetention, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this ObjectRetention to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for ObjectRetention
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }

                /** Properties of a RetentionPolicy. */
                interface IRetentionPolicy {

                    /** RetentionPolicy effectiveTime */
                    effectiveTime?: (google.protobuf.ITimestamp|null);

                    /** RetentionPolicy isLocked */
                    isLocked?: (boolean|null);

                    /** RetentionPolicy retentionDuration */
                    retentionDuration?: (google.protobuf.IDuration|null);
                }

                /** Represents a RetentionPolicy. */
                class RetentionPolicy implements IRetentionPolicy {

                    /**
                     * Constructs a new RetentionPolicy.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: google.storage.v2.Bucket.IRetentionPolicy);

                    /** RetentionPolicy effectiveTime. */
                    public effectiveTime?: (google.protobuf.ITimestamp|null);

                    /** RetentionPolicy isLocked. */
                    public isLocked: boolean;

                    /** RetentionPolicy retentionDuration. */
                    public retentionDuration?: (google.protobuf.IDuration|null);

                    /**
                     * Creates a new RetentionPolicy instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns RetentionPolicy instance
                     */
                    public static create(properties?: google.storage.v2.Bucket.IRetentionPolicy): google.storage.v2.Bucket.RetentionPolicy;

                    /**
                     * Encodes the specified RetentionPolicy message. Does not implicitly {@link google.storage.v2.Bucket.RetentionPolicy.verify|verify} messages.
                     * @param message RetentionPolicy message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: google.storage.v2.Bucket.IRetentionPolicy, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified RetentionPolicy message, length delimited. Does not implicitly {@link google.storage.v2.Bucket.RetentionPolicy.verify|verify} messages.
                     * @param message RetentionPolicy message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: google.storage.v2.Bucket.IRetentionPolicy, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes a RetentionPolicy message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns RetentionPolicy
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.Bucket.RetentionPolicy;

                    /**
                     * Decodes a RetentionPolicy message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns RetentionPolicy
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.Bucket.RetentionPolicy;

                    /**
                     * Verifies a RetentionPolicy message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates a RetentionPolicy message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns RetentionPolicy
                     */
                    public static fromObject(object: { [k: string]: any }): google.storage.v2.Bucket.RetentionPolicy;

                    /**
                     * Creates a plain object from a RetentionPolicy message. Also converts values to other types if specified.
                     * @param message RetentionPolicy
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: google.storage.v2.Bucket.RetentionPolicy, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this RetentionPolicy to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for RetentionPolicy
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }

                /** Properties of a SoftDeletePolicy. */
                interface ISoftDeletePolicy {

                    /** SoftDeletePolicy retentionDuration */
                    retentionDuration?: (google.protobuf.IDuration|null);

                    /** SoftDeletePolicy effectiveTime */
                    effectiveTime?: (google.protobuf.ITimestamp|null);
                }

                /** Represents a SoftDeletePolicy. */
                class SoftDeletePolicy implements ISoftDeletePolicy {

                    /**
                     * Constructs a new SoftDeletePolicy.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: google.storage.v2.Bucket.ISoftDeletePolicy);

                    /** SoftDeletePolicy retentionDuration. */
                    public retentionDuration?: (google.protobuf.IDuration|null);

                    /** SoftDeletePolicy effectiveTime. */
                    public effectiveTime?: (google.protobuf.ITimestamp|null);

                    /**
                     * Creates a new SoftDeletePolicy instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns SoftDeletePolicy instance
                     */
                    public static create(properties?: google.storage.v2.Bucket.ISoftDeletePolicy): google.storage.v2.Bucket.SoftDeletePolicy;

                    /**
                     * Encodes the specified SoftDeletePolicy message. Does not implicitly {@link google.storage.v2.Bucket.SoftDeletePolicy.verify|verify} messages.
                     * @param message SoftDeletePolicy message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: google.storage.v2.Bucket.ISoftDeletePolicy, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified SoftDeletePolicy message, length delimited. Does not implicitly {@link google.storage.v2.Bucket.SoftDeletePolicy.verify|verify} messages.
                     * @param message SoftDeletePolicy message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: google.storage.v2.Bucket.ISoftDeletePolicy, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes a SoftDeletePolicy message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns SoftDeletePolicy
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.Bucket.SoftDeletePolicy;

                    /**
                     * Decodes a SoftDeletePolicy message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns SoftDeletePolicy
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.Bucket.SoftDeletePolicy;

                    /**
                     * Verifies a SoftDeletePolicy message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates a SoftDeletePolicy message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns SoftDeletePolicy
                     */
                    public static fromObject(object: { [k: string]: any }): google.storage.v2.Bucket.SoftDeletePolicy;

                    /**
                     * Creates a plain object from a SoftDeletePolicy message. Also converts values to other types if specified.
                     * @param message SoftDeletePolicy
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: google.storage.v2.Bucket.SoftDeletePolicy, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this SoftDeletePolicy to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for SoftDeletePolicy
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }

                /** Properties of a Versioning. */
                interface IVersioning {

                    /** Versioning enabled */
                    enabled?: (boolean|null);
                }

                /** Represents a Versioning. */
                class Versioning implements IVersioning {

                    /**
                     * Constructs a new Versioning.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: google.storage.v2.Bucket.IVersioning);

                    /** Versioning enabled. */
                    public enabled: boolean;

                    /**
                     * Creates a new Versioning instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns Versioning instance
                     */
                    public static create(properties?: google.storage.v2.Bucket.IVersioning): google.storage.v2.Bucket.Versioning;

                    /**
                     * Encodes the specified Versioning message. Does not implicitly {@link google.storage.v2.Bucket.Versioning.verify|verify} messages.
                     * @param message Versioning message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: google.storage.v2.Bucket.IVersioning, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified Versioning message, length delimited. Does not implicitly {@link google.storage.v2.Bucket.Versioning.verify|verify} messages.
                     * @param message Versioning message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: google.storage.v2.Bucket.IVersioning, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes a Versioning message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns Versioning
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.Bucket.Versioning;

                    /**
                     * Decodes a Versioning message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns Versioning
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.Bucket.Versioning;

                    /**
                     * Verifies a Versioning message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates a Versioning message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns Versioning
                     */
                    public static fromObject(object: { [k: string]: any }): google.storage.v2.Bucket.Versioning;

                    /**
                     * Creates a plain object from a Versioning message. Also converts values to other types if specified.
                     * @param message Versioning
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: google.storage.v2.Bucket.Versioning, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this Versioning to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for Versioning
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }

                /** Properties of a Website. */
                interface IWebsite {

                    /** Website mainPageSuffix */
                    mainPageSuffix?: (string|null);

                    /** Website notFoundPage */
                    notFoundPage?: (string|null);
                }

                /** Represents a Website. */
                class Website implements IWebsite {

                    /**
                     * Constructs a new Website.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: google.storage.v2.Bucket.IWebsite);

                    /** Website mainPageSuffix. */
                    public mainPageSuffix: string;

                    /** Website notFoundPage. */
                    public notFoundPage: string;

                    /**
                     * Creates a new Website instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns Website instance
                     */
                    public static create(properties?: google.storage.v2.Bucket.IWebsite): google.storage.v2.Bucket.Website;

                    /**
                     * Encodes the specified Website message. Does not implicitly {@link google.storage.v2.Bucket.Website.verify|verify} messages.
                     * @param message Website message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: google.storage.v2.Bucket.IWebsite, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified Website message, length delimited. Does not implicitly {@link google.storage.v2.Bucket.Website.verify|verify} messages.
                     * @param message Website message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: google.storage.v2.Bucket.IWebsite, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes a Website message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns Website
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.Bucket.Website;

                    /**
                     * Decodes a Website message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns Website
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.Bucket.Website;

                    /**
                     * Verifies a Website message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates a Website message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns Website
                     */
                    public static fromObject(object: { [k: string]: any }): google.storage.v2.Bucket.Website;

                    /**
                     * Creates a plain object from a Website message. Also converts values to other types if specified.
                     * @param message Website
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: google.storage.v2.Bucket.Website, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this Website to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for Website
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }

                /** Properties of a CustomPlacementConfig. */
                interface ICustomPlacementConfig {

                    /** CustomPlacementConfig dataLocations */
                    dataLocations?: (string[]|null);
                }

                /** Represents a CustomPlacementConfig. */
                class CustomPlacementConfig implements ICustomPlacementConfig {

                    /**
                     * Constructs a new CustomPlacementConfig.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: google.storage.v2.Bucket.ICustomPlacementConfig);

                    /** CustomPlacementConfig dataLocations. */
                    public dataLocations: string[];

                    /**
                     * Creates a new CustomPlacementConfig instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns CustomPlacementConfig instance
                     */
                    public static create(properties?: google.storage.v2.Bucket.ICustomPlacementConfig): google.storage.v2.Bucket.CustomPlacementConfig;

                    /**
                     * Encodes the specified CustomPlacementConfig message. Does not implicitly {@link google.storage.v2.Bucket.CustomPlacementConfig.verify|verify} messages.
                     * @param message CustomPlacementConfig message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: google.storage.v2.Bucket.ICustomPlacementConfig, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified CustomPlacementConfig message, length delimited. Does not implicitly {@link google.storage.v2.Bucket.CustomPlacementConfig.verify|verify} messages.
                     * @param message CustomPlacementConfig message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: google.storage.v2.Bucket.ICustomPlacementConfig, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes a CustomPlacementConfig message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns CustomPlacementConfig
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.Bucket.CustomPlacementConfig;

                    /**
                     * Decodes a CustomPlacementConfig message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns CustomPlacementConfig
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.Bucket.CustomPlacementConfig;

                    /**
                     * Verifies a CustomPlacementConfig message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates a CustomPlacementConfig message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns CustomPlacementConfig
                     */
                    public static fromObject(object: { [k: string]: any }): google.storage.v2.Bucket.CustomPlacementConfig;

                    /**
                     * Creates a plain object from a CustomPlacementConfig message. Also converts values to other types if specified.
                     * @param message CustomPlacementConfig
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: google.storage.v2.Bucket.CustomPlacementConfig, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this CustomPlacementConfig to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for CustomPlacementConfig
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }

                /** Properties of an Autoclass. */
                interface IAutoclass {

                    /** Autoclass enabled */
                    enabled?: (boolean|null);

                    /** Autoclass toggleTime */
                    toggleTime?: (google.protobuf.ITimestamp|null);

                    /** Autoclass terminalStorageClass */
                    terminalStorageClass?: (string|null);

                    /** Autoclass terminalStorageClassUpdateTime */
                    terminalStorageClassUpdateTime?: (google.protobuf.ITimestamp|null);
                }

                /** Represents an Autoclass. */
                class Autoclass implements IAutoclass {

                    /**
                     * Constructs a new Autoclass.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: google.storage.v2.Bucket.IAutoclass);

                    /** Autoclass enabled. */
                    public enabled: boolean;

                    /** Autoclass toggleTime. */
                    public toggleTime?: (google.protobuf.ITimestamp|null);

                    /** Autoclass terminalStorageClass. */
                    public terminalStorageClass?: (string|null);

                    /** Autoclass terminalStorageClassUpdateTime. */
                    public terminalStorageClassUpdateTime?: (google.protobuf.ITimestamp|null);

                    /**
                     * Creates a new Autoclass instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns Autoclass instance
                     */
                    public static create(properties?: google.storage.v2.Bucket.IAutoclass): google.storage.v2.Bucket.Autoclass;

                    /**
                     * Encodes the specified Autoclass message. Does not implicitly {@link google.storage.v2.Bucket.Autoclass.verify|verify} messages.
                     * @param message Autoclass message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: google.storage.v2.Bucket.IAutoclass, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified Autoclass message, length delimited. Does not implicitly {@link google.storage.v2.Bucket.Autoclass.verify|verify} messages.
                     * @param message Autoclass message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: google.storage.v2.Bucket.IAutoclass, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes an Autoclass message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns Autoclass
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.Bucket.Autoclass;

                    /**
                     * Decodes an Autoclass message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns Autoclass
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.Bucket.Autoclass;

                    /**
                     * Verifies an Autoclass message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates an Autoclass message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns Autoclass
                     */
                    public static fromObject(object: { [k: string]: any }): google.storage.v2.Bucket.Autoclass;

                    /**
                     * Creates a plain object from an Autoclass message. Also converts values to other types if specified.
                     * @param message Autoclass
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: google.storage.v2.Bucket.Autoclass, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this Autoclass to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for Autoclass
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }

                /** Properties of an IpFilter. */
                interface IIpFilter {

                    /** IpFilter mode */
                    mode?: (string|null);

                    /** IpFilter publicNetworkSource */
                    publicNetworkSource?: (google.storage.v2.Bucket.IpFilter.IPublicNetworkSource|null);

                    /** IpFilter vpcNetworkSources */
                    vpcNetworkSources?: (google.storage.v2.Bucket.IpFilter.IVpcNetworkSource[]|null);

                    /** IpFilter allowCrossOrgVpcs */
                    allowCrossOrgVpcs?: (boolean|null);

                    /** IpFilter allowAllServiceAgentAccess */
                    allowAllServiceAgentAccess?: (boolean|null);
                }

                /** Represents an IpFilter. */
                class IpFilter implements IIpFilter {

                    /**
                     * Constructs a new IpFilter.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: google.storage.v2.Bucket.IIpFilter);

                    /** IpFilter mode. */
                    public mode?: (string|null);

                    /** IpFilter publicNetworkSource. */
                    public publicNetworkSource?: (google.storage.v2.Bucket.IpFilter.IPublicNetworkSource|null);

                    /** IpFilter vpcNetworkSources. */
                    public vpcNetworkSources: google.storage.v2.Bucket.IpFilter.IVpcNetworkSource[];

                    /** IpFilter allowCrossOrgVpcs. */
                    public allowCrossOrgVpcs: boolean;

                    /** IpFilter allowAllServiceAgentAccess. */
                    public allowAllServiceAgentAccess?: (boolean|null);

                    /**
                     * Creates a new IpFilter instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns IpFilter instance
                     */
                    public static create(properties?: google.storage.v2.Bucket.IIpFilter): google.storage.v2.Bucket.IpFilter;

                    /**
                     * Encodes the specified IpFilter message. Does not implicitly {@link google.storage.v2.Bucket.IpFilter.verify|verify} messages.
                     * @param message IpFilter message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: google.storage.v2.Bucket.IIpFilter, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified IpFilter message, length delimited. Does not implicitly {@link google.storage.v2.Bucket.IpFilter.verify|verify} messages.
                     * @param message IpFilter message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: google.storage.v2.Bucket.IIpFilter, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes an IpFilter message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns IpFilter
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.Bucket.IpFilter;

                    /**
                     * Decodes an IpFilter message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns IpFilter
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.Bucket.IpFilter;

                    /**
                     * Verifies an IpFilter message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates an IpFilter message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns IpFilter
                     */
                    public static fromObject(object: { [k: string]: any }): google.storage.v2.Bucket.IpFilter;

                    /**
                     * Creates a plain object from an IpFilter message. Also converts values to other types if specified.
                     * @param message IpFilter
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: google.storage.v2.Bucket.IpFilter, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this IpFilter to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for IpFilter
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }

                namespace IpFilter {

                    /** Properties of a PublicNetworkSource. */
                    interface IPublicNetworkSource {

                        /** PublicNetworkSource allowedIpCidrRanges */
                        allowedIpCidrRanges?: (string[]|null);
                    }

                    /** Represents a PublicNetworkSource. */
                    class PublicNetworkSource implements IPublicNetworkSource {

                        /**
                         * Constructs a new PublicNetworkSource.
                         * @param [properties] Properties to set
                         */
                        constructor(properties?: google.storage.v2.Bucket.IpFilter.IPublicNetworkSource);

                        /** PublicNetworkSource allowedIpCidrRanges. */
                        public allowedIpCidrRanges: string[];

                        /**
                         * Creates a new PublicNetworkSource instance using the specified properties.
                         * @param [properties] Properties to set
                         * @returns PublicNetworkSource instance
                         */
                        public static create(properties?: google.storage.v2.Bucket.IpFilter.IPublicNetworkSource): google.storage.v2.Bucket.IpFilter.PublicNetworkSource;

                        /**
                         * Encodes the specified PublicNetworkSource message. Does not implicitly {@link google.storage.v2.Bucket.IpFilter.PublicNetworkSource.verify|verify} messages.
                         * @param message PublicNetworkSource message or plain object to encode
                         * @param [writer] Writer to encode to
                         * @returns Writer
                         */
                        public static encode(message: google.storage.v2.Bucket.IpFilter.IPublicNetworkSource, writer?: $protobuf.Writer): $protobuf.Writer;

                        /**
                         * Encodes the specified PublicNetworkSource message, length delimited. Does not implicitly {@link google.storage.v2.Bucket.IpFilter.PublicNetworkSource.verify|verify} messages.
                         * @param message PublicNetworkSource message or plain object to encode
                         * @param [writer] Writer to encode to
                         * @returns Writer
                         */
                        public static encodeDelimited(message: google.storage.v2.Bucket.IpFilter.IPublicNetworkSource, writer?: $protobuf.Writer): $protobuf.Writer;

                        /**
                         * Decodes a PublicNetworkSource message from the specified reader or buffer.
                         * @param reader Reader or buffer to decode from
                         * @param [length] Message length if known beforehand
                         * @returns PublicNetworkSource
                         * @throws {Error} If the payload is not a reader or valid buffer
                         * @throws {$protobuf.util.ProtocolError} If required fields are missing
                         */
                        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.Bucket.IpFilter.PublicNetworkSource;

                        /**
                         * Decodes a PublicNetworkSource message from the specified reader or buffer, length delimited.
                         * @param reader Reader or buffer to decode from
                         * @returns PublicNetworkSource
                         * @throws {Error} If the payload is not a reader or valid buffer
                         * @throws {$protobuf.util.ProtocolError} If required fields are missing
                         */
                        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.Bucket.IpFilter.PublicNetworkSource;

                        /**
                         * Verifies a PublicNetworkSource message.
                         * @param message Plain object to verify
                         * @returns `null` if valid, otherwise the reason why it is not
                         */
                        public static verify(message: { [k: string]: any }): (string|null);

                        /**
                         * Creates a PublicNetworkSource message from a plain object. Also converts values to their respective internal types.
                         * @param object Plain object
                         * @returns PublicNetworkSource
                         */
                        public static fromObject(object: { [k: string]: any }): google.storage.v2.Bucket.IpFilter.PublicNetworkSource;

                        /**
                         * Creates a plain object from a PublicNetworkSource message. Also converts values to other types if specified.
                         * @param message PublicNetworkSource
                         * @param [options] Conversion options
                         * @returns Plain object
                         */
                        public static toObject(message: google.storage.v2.Bucket.IpFilter.PublicNetworkSource, options?: $protobuf.IConversionOptions): { [k: string]: any };

                        /**
                         * Converts this PublicNetworkSource to JSON.
                         * @returns JSON object
                         */
                        public toJSON(): { [k: string]: any };

                        /**
                         * Gets the default type url for PublicNetworkSource
                         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                         * @returns The default type url
                         */
                        public static getTypeUrl(typeUrlPrefix?: string): string;
                    }

                    /** Properties of a VpcNetworkSource. */
                    interface IVpcNetworkSource {

                        /** VpcNetworkSource network */
                        network?: (string|null);

                        /** VpcNetworkSource allowedIpCidrRanges */
                        allowedIpCidrRanges?: (string[]|null);
                    }

                    /** Represents a VpcNetworkSource. */
                    class VpcNetworkSource implements IVpcNetworkSource {

                        /**
                         * Constructs a new VpcNetworkSource.
                         * @param [properties] Properties to set
                         */
                        constructor(properties?: google.storage.v2.Bucket.IpFilter.IVpcNetworkSource);

                        /** VpcNetworkSource network. */
                        public network?: (string|null);

                        /** VpcNetworkSource allowedIpCidrRanges. */
                        public allowedIpCidrRanges: string[];

                        /**
                         * Creates a new VpcNetworkSource instance using the specified properties.
                         * @param [properties] Properties to set
                         * @returns VpcNetworkSource instance
                         */
                        public static create(properties?: google.storage.v2.Bucket.IpFilter.IVpcNetworkSource): google.storage.v2.Bucket.IpFilter.VpcNetworkSource;

                        /**
                         * Encodes the specified VpcNetworkSource message. Does not implicitly {@link google.storage.v2.Bucket.IpFilter.VpcNetworkSource.verify|verify} messages.
                         * @param message VpcNetworkSource message or plain object to encode
                         * @param [writer] Writer to encode to
                         * @returns Writer
                         */
                        public static encode(message: google.storage.v2.Bucket.IpFilter.IVpcNetworkSource, writer?: $protobuf.Writer): $protobuf.Writer;

                        /**
                         * Encodes the specified VpcNetworkSource message, length delimited. Does not implicitly {@link google.storage.v2.Bucket.IpFilter.VpcNetworkSource.verify|verify} messages.
                         * @param message VpcNetworkSource message or plain object to encode
                         * @param [writer] Writer to encode to
                         * @returns Writer
                         */
                        public static encodeDelimited(message: google.storage.v2.Bucket.IpFilter.IVpcNetworkSource, writer?: $protobuf.Writer): $protobuf.Writer;

                        /**
                         * Decodes a VpcNetworkSource message from the specified reader or buffer.
                         * @param reader Reader or buffer to decode from
                         * @param [length] Message length if known beforehand
                         * @returns VpcNetworkSource
                         * @throws {Error} If the payload is not a reader or valid buffer
                         * @throws {$protobuf.util.ProtocolError} If required fields are missing
                         */
                        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.Bucket.IpFilter.VpcNetworkSource;

                        /**
                         * Decodes a VpcNetworkSource message from the specified reader or buffer, length delimited.
                         * @param reader Reader or buffer to decode from
                         * @returns VpcNetworkSource
                         * @throws {Error} If the payload is not a reader or valid buffer
                         * @throws {$protobuf.util.ProtocolError} If required fields are missing
                         */
                        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.Bucket.IpFilter.VpcNetworkSource;

                        /**
                         * Verifies a VpcNetworkSource message.
                         * @param message Plain object to verify
                         * @returns `null` if valid, otherwise the reason why it is not
                         */
                        public static verify(message: { [k: string]: any }): (string|null);

                        /**
                         * Creates a VpcNetworkSource message from a plain object. Also converts values to their respective internal types.
                         * @param object Plain object
                         * @returns VpcNetworkSource
                         */
                        public static fromObject(object: { [k: string]: any }): google.storage.v2.Bucket.IpFilter.VpcNetworkSource;

                        /**
                         * Creates a plain object from a VpcNetworkSource message. Also converts values to other types if specified.
                         * @param message VpcNetworkSource
                         * @param [options] Conversion options
                         * @returns Plain object
                         */
                        public static toObject(message: google.storage.v2.Bucket.IpFilter.VpcNetworkSource, options?: $protobuf.IConversionOptions): { [k: string]: any };

                        /**
                         * Converts this VpcNetworkSource to JSON.
                         * @returns JSON object
                         */
                        public toJSON(): { [k: string]: any };

                        /**
                         * Gets the default type url for VpcNetworkSource
                         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                         * @returns The default type url
                         */
                        public static getTypeUrl(typeUrlPrefix?: string): string;
                    }
                }

                /** Properties of a HierarchicalNamespace. */
                interface IHierarchicalNamespace {

                    /** HierarchicalNamespace enabled */
                    enabled?: (boolean|null);
                }

                /** Represents a HierarchicalNamespace. */
                class HierarchicalNamespace implements IHierarchicalNamespace {

                    /**
                     * Constructs a new HierarchicalNamespace.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: google.storage.v2.Bucket.IHierarchicalNamespace);

                    /** HierarchicalNamespace enabled. */
                    public enabled: boolean;

                    /**
                     * Creates a new HierarchicalNamespace instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns HierarchicalNamespace instance
                     */
                    public static create(properties?: google.storage.v2.Bucket.IHierarchicalNamespace): google.storage.v2.Bucket.HierarchicalNamespace;

                    /**
                     * Encodes the specified HierarchicalNamespace message. Does not implicitly {@link google.storage.v2.Bucket.HierarchicalNamespace.verify|verify} messages.
                     * @param message HierarchicalNamespace message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: google.storage.v2.Bucket.IHierarchicalNamespace, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified HierarchicalNamespace message, length delimited. Does not implicitly {@link google.storage.v2.Bucket.HierarchicalNamespace.verify|verify} messages.
                     * @param message HierarchicalNamespace message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: google.storage.v2.Bucket.IHierarchicalNamespace, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes a HierarchicalNamespace message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns HierarchicalNamespace
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.Bucket.HierarchicalNamespace;

                    /**
                     * Decodes a HierarchicalNamespace message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns HierarchicalNamespace
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.Bucket.HierarchicalNamespace;

                    /**
                     * Verifies a HierarchicalNamespace message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates a HierarchicalNamespace message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns HierarchicalNamespace
                     */
                    public static fromObject(object: { [k: string]: any }): google.storage.v2.Bucket.HierarchicalNamespace;

                    /**
                     * Creates a plain object from a HierarchicalNamespace message. Also converts values to other types if specified.
                     * @param message HierarchicalNamespace
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: google.storage.v2.Bucket.HierarchicalNamespace, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this HierarchicalNamespace to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for HierarchicalNamespace
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }
            }

            /** Properties of a BucketAccessControl. */
            interface IBucketAccessControl {

                /** BucketAccessControl role */
                role?: (string|null);

                /** BucketAccessControl id */
                id?: (string|null);

                /** BucketAccessControl entity */
                entity?: (string|null);

                /** BucketAccessControl entityAlt */
                entityAlt?: (string|null);

                /** BucketAccessControl entityId */
                entityId?: (string|null);

                /** BucketAccessControl etag */
                etag?: (string|null);

                /** BucketAccessControl email */
                email?: (string|null);

                /** BucketAccessControl domain */
                domain?: (string|null);

                /** BucketAccessControl projectTeam */
                projectTeam?: (google.storage.v2.IProjectTeam|null);
            }

            /** Represents a BucketAccessControl. */
            class BucketAccessControl implements IBucketAccessControl {

                /**
                 * Constructs a new BucketAccessControl.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.storage.v2.IBucketAccessControl);

                /** BucketAccessControl role. */
                public role: string;

                /** BucketAccessControl id. */
                public id: string;

                /** BucketAccessControl entity. */
                public entity: string;

                /** BucketAccessControl entityAlt. */
                public entityAlt: string;

                /** BucketAccessControl entityId. */
                public entityId: string;

                /** BucketAccessControl etag. */
                public etag: string;

                /** BucketAccessControl email. */
                public email: string;

                /** BucketAccessControl domain. */
                public domain: string;

                /** BucketAccessControl projectTeam. */
                public projectTeam?: (google.storage.v2.IProjectTeam|null);

                /**
                 * Creates a new BucketAccessControl instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns BucketAccessControl instance
                 */
                public static create(properties?: google.storage.v2.IBucketAccessControl): google.storage.v2.BucketAccessControl;

                /**
                 * Encodes the specified BucketAccessControl message. Does not implicitly {@link google.storage.v2.BucketAccessControl.verify|verify} messages.
                 * @param message BucketAccessControl message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.storage.v2.IBucketAccessControl, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified BucketAccessControl message, length delimited. Does not implicitly {@link google.storage.v2.BucketAccessControl.verify|verify} messages.
                 * @param message BucketAccessControl message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.storage.v2.IBucketAccessControl, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a BucketAccessControl message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns BucketAccessControl
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.BucketAccessControl;

                /**
                 * Decodes a BucketAccessControl message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns BucketAccessControl
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.BucketAccessControl;

                /**
                 * Verifies a BucketAccessControl message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a BucketAccessControl message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns BucketAccessControl
                 */
                public static fromObject(object: { [k: string]: any }): google.storage.v2.BucketAccessControl;

                /**
                 * Creates a plain object from a BucketAccessControl message. Also converts values to other types if specified.
                 * @param message BucketAccessControl
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.storage.v2.BucketAccessControl, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this BucketAccessControl to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for BucketAccessControl
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a ChecksummedData. */
            interface IChecksummedData {

                /** ChecksummedData content */
                content?: (Uint8Array|Buffer|string|null);

                /** ChecksummedData crc32c */
                crc32c?: (number|null);
            }

            /** Represents a ChecksummedData. */
            class ChecksummedData implements IChecksummedData {

                /**
                 * Constructs a new ChecksummedData.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.storage.v2.IChecksummedData);

                /** ChecksummedData content. */
                public content: (Uint8Array|Buffer|string);

                /** ChecksummedData crc32c. */
                public crc32c?: (number|null);

                /**
                 * Creates a new ChecksummedData instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns ChecksummedData instance
                 */
                public static create(properties?: google.storage.v2.IChecksummedData): google.storage.v2.ChecksummedData;

                /**
                 * Encodes the specified ChecksummedData message. Does not implicitly {@link google.storage.v2.ChecksummedData.verify|verify} messages.
                 * @param message ChecksummedData message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.storage.v2.IChecksummedData, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified ChecksummedData message, length delimited. Does not implicitly {@link google.storage.v2.ChecksummedData.verify|verify} messages.
                 * @param message ChecksummedData message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.storage.v2.IChecksummedData, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a ChecksummedData message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns ChecksummedData
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.ChecksummedData;

                /**
                 * Decodes a ChecksummedData message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns ChecksummedData
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.ChecksummedData;

                /**
                 * Verifies a ChecksummedData message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a ChecksummedData message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns ChecksummedData
                 */
                public static fromObject(object: { [k: string]: any }): google.storage.v2.ChecksummedData;

                /**
                 * Creates a plain object from a ChecksummedData message. Also converts values to other types if specified.
                 * @param message ChecksummedData
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.storage.v2.ChecksummedData, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this ChecksummedData to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for ChecksummedData
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of an ObjectChecksums. */
            interface IObjectChecksums {

                /** ObjectChecksums crc32c */
                crc32c?: (number|null);

                /** ObjectChecksums md5Hash */
                md5Hash?: (Uint8Array|Buffer|string|null);
            }

            /** Represents an ObjectChecksums. */
            class ObjectChecksums implements IObjectChecksums {

                /**
                 * Constructs a new ObjectChecksums.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.storage.v2.IObjectChecksums);

                /** ObjectChecksums crc32c. */
                public crc32c?: (number|null);

                /** ObjectChecksums md5Hash. */
                public md5Hash: (Uint8Array|Buffer|string);

                /**
                 * Creates a new ObjectChecksums instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns ObjectChecksums instance
                 */
                public static create(properties?: google.storage.v2.IObjectChecksums): google.storage.v2.ObjectChecksums;

                /**
                 * Encodes the specified ObjectChecksums message. Does not implicitly {@link google.storage.v2.ObjectChecksums.verify|verify} messages.
                 * @param message ObjectChecksums message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.storage.v2.IObjectChecksums, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified ObjectChecksums message, length delimited. Does not implicitly {@link google.storage.v2.ObjectChecksums.verify|verify} messages.
                 * @param message ObjectChecksums message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.storage.v2.IObjectChecksums, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes an ObjectChecksums message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns ObjectChecksums
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.ObjectChecksums;

                /**
                 * Decodes an ObjectChecksums message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns ObjectChecksums
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.ObjectChecksums;

                /**
                 * Verifies an ObjectChecksums message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates an ObjectChecksums message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns ObjectChecksums
                 */
                public static fromObject(object: { [k: string]: any }): google.storage.v2.ObjectChecksums;

                /**
                 * Creates a plain object from an ObjectChecksums message. Also converts values to other types if specified.
                 * @param message ObjectChecksums
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.storage.v2.ObjectChecksums, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this ObjectChecksums to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for ObjectChecksums
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of an ObjectCustomContextPayload. */
            interface IObjectCustomContextPayload {

                /** ObjectCustomContextPayload value */
                value?: (string|null);

                /** ObjectCustomContextPayload createTime */
                createTime?: (google.protobuf.ITimestamp|null);

                /** ObjectCustomContextPayload updateTime */
                updateTime?: (google.protobuf.ITimestamp|null);
            }

            /** Represents an ObjectCustomContextPayload. */
            class ObjectCustomContextPayload implements IObjectCustomContextPayload {

                /**
                 * Constructs a new ObjectCustomContextPayload.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.storage.v2.IObjectCustomContextPayload);

                /** ObjectCustomContextPayload value. */
                public value: string;

                /** ObjectCustomContextPayload createTime. */
                public createTime?: (google.protobuf.ITimestamp|null);

                /** ObjectCustomContextPayload updateTime. */
                public updateTime?: (google.protobuf.ITimestamp|null);

                /**
                 * Creates a new ObjectCustomContextPayload instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns ObjectCustomContextPayload instance
                 */
                public static create(properties?: google.storage.v2.IObjectCustomContextPayload): google.storage.v2.ObjectCustomContextPayload;

                /**
                 * Encodes the specified ObjectCustomContextPayload message. Does not implicitly {@link google.storage.v2.ObjectCustomContextPayload.verify|verify} messages.
                 * @param message ObjectCustomContextPayload message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.storage.v2.IObjectCustomContextPayload, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified ObjectCustomContextPayload message, length delimited. Does not implicitly {@link google.storage.v2.ObjectCustomContextPayload.verify|verify} messages.
                 * @param message ObjectCustomContextPayload message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.storage.v2.IObjectCustomContextPayload, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes an ObjectCustomContextPayload message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns ObjectCustomContextPayload
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.ObjectCustomContextPayload;

                /**
                 * Decodes an ObjectCustomContextPayload message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns ObjectCustomContextPayload
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.ObjectCustomContextPayload;

                /**
                 * Verifies an ObjectCustomContextPayload message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates an ObjectCustomContextPayload message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns ObjectCustomContextPayload
                 */
                public static fromObject(object: { [k: string]: any }): google.storage.v2.ObjectCustomContextPayload;

                /**
                 * Creates a plain object from an ObjectCustomContextPayload message. Also converts values to other types if specified.
                 * @param message ObjectCustomContextPayload
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.storage.v2.ObjectCustomContextPayload, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this ObjectCustomContextPayload to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for ObjectCustomContextPayload
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of an ObjectContexts. */
            interface IObjectContexts {

                /** ObjectContexts custom */
                custom?: ({ [k: string]: google.storage.v2.IObjectCustomContextPayload }|null);
            }

            /** Represents an ObjectContexts. */
            class ObjectContexts implements IObjectContexts {

                /**
                 * Constructs a new ObjectContexts.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.storage.v2.IObjectContexts);

                /** ObjectContexts custom. */
                public custom: { [k: string]: google.storage.v2.IObjectCustomContextPayload };

                /**
                 * Creates a new ObjectContexts instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns ObjectContexts instance
                 */
                public static create(properties?: google.storage.v2.IObjectContexts): google.storage.v2.ObjectContexts;

                /**
                 * Encodes the specified ObjectContexts message. Does not implicitly {@link google.storage.v2.ObjectContexts.verify|verify} messages.
                 * @param message ObjectContexts message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.storage.v2.IObjectContexts, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified ObjectContexts message, length delimited. Does not implicitly {@link google.storage.v2.ObjectContexts.verify|verify} messages.
                 * @param message ObjectContexts message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.storage.v2.IObjectContexts, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes an ObjectContexts message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns ObjectContexts
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.ObjectContexts;

                /**
                 * Decodes an ObjectContexts message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns ObjectContexts
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.ObjectContexts;

                /**
                 * Verifies an ObjectContexts message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates an ObjectContexts message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns ObjectContexts
                 */
                public static fromObject(object: { [k: string]: any }): google.storage.v2.ObjectContexts;

                /**
                 * Creates a plain object from an ObjectContexts message. Also converts values to other types if specified.
                 * @param message ObjectContexts
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.storage.v2.ObjectContexts, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this ObjectContexts to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for ObjectContexts
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a CustomerEncryption. */
            interface ICustomerEncryption {

                /** CustomerEncryption encryptionAlgorithm */
                encryptionAlgorithm?: (string|null);

                /** CustomerEncryption keySha256Bytes */
                keySha256Bytes?: (Uint8Array|Buffer|string|null);
            }

            /** Represents a CustomerEncryption. */
            class CustomerEncryption implements ICustomerEncryption {

                /**
                 * Constructs a new CustomerEncryption.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.storage.v2.ICustomerEncryption);

                /** CustomerEncryption encryptionAlgorithm. */
                public encryptionAlgorithm: string;

                /** CustomerEncryption keySha256Bytes. */
                public keySha256Bytes: (Uint8Array|Buffer|string);

                /**
                 * Creates a new CustomerEncryption instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns CustomerEncryption instance
                 */
                public static create(properties?: google.storage.v2.ICustomerEncryption): google.storage.v2.CustomerEncryption;

                /**
                 * Encodes the specified CustomerEncryption message. Does not implicitly {@link google.storage.v2.CustomerEncryption.verify|verify} messages.
                 * @param message CustomerEncryption message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.storage.v2.ICustomerEncryption, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified CustomerEncryption message, length delimited. Does not implicitly {@link google.storage.v2.CustomerEncryption.verify|verify} messages.
                 * @param message CustomerEncryption message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.storage.v2.ICustomerEncryption, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a CustomerEncryption message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns CustomerEncryption
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.CustomerEncryption;

                /**
                 * Decodes a CustomerEncryption message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns CustomerEncryption
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.CustomerEncryption;

                /**
                 * Verifies a CustomerEncryption message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a CustomerEncryption message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns CustomerEncryption
                 */
                public static fromObject(object: { [k: string]: any }): google.storage.v2.CustomerEncryption;

                /**
                 * Creates a plain object from a CustomerEncryption message. Also converts values to other types if specified.
                 * @param message CustomerEncryption
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.storage.v2.CustomerEncryption, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this CustomerEncryption to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for CustomerEncryption
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a StorageObject. */
            interface IStorageObject {

                /** StorageObject name */
                name?: (string|null);

                /** StorageObject bucket */
                bucket?: (string|null);

                /** StorageObject etag */
                etag?: (string|null);

                /** StorageObject generation */
                generation?: (number|Long|string|null);

                /** StorageObject restoreToken */
                restoreToken?: (string|null);

                /** StorageObject metageneration */
                metageneration?: (number|Long|string|null);

                /** StorageObject storageClass */
                storageClass?: (string|null);

                /** StorageObject size */
                size?: (number|Long|string|null);

                /** StorageObject contentEncoding */
                contentEncoding?: (string|null);

                /** StorageObject contentDisposition */
                contentDisposition?: (string|null);

                /** StorageObject cacheControl */
                cacheControl?: (string|null);

                /** StorageObject acl */
                acl?: (google.storage.v2.IObjectAccessControl[]|null);

                /** StorageObject contentLanguage */
                contentLanguage?: (string|null);

                /** StorageObject deleteTime */
                deleteTime?: (google.protobuf.ITimestamp|null);

                /** StorageObject finalizeTime */
                finalizeTime?: (google.protobuf.ITimestamp|null);

                /** StorageObject contentType */
                contentType?: (string|null);

                /** StorageObject createTime */
                createTime?: (google.protobuf.ITimestamp|null);

                /** StorageObject componentCount */
                componentCount?: (number|null);

                /** StorageObject checksums */
                checksums?: (google.storage.v2.IObjectChecksums|null);

                /** StorageObject updateTime */
                updateTime?: (google.protobuf.ITimestamp|null);

                /** StorageObject kmsKey */
                kmsKey?: (string|null);

                /** StorageObject updateStorageClassTime */
                updateStorageClassTime?: (google.protobuf.ITimestamp|null);

                /** StorageObject temporaryHold */
                temporaryHold?: (boolean|null);

                /** StorageObject retentionExpireTime */
                retentionExpireTime?: (google.protobuf.ITimestamp|null);

                /** StorageObject metadata */
                metadata?: ({ [k: string]: string }|null);

                /** StorageObject contexts */
                contexts?: (google.storage.v2.IObjectContexts|null);

                /** StorageObject eventBasedHold */
                eventBasedHold?: (boolean|null);

                /** StorageObject owner */
                owner?: (google.storage.v2.IOwner|null);

                /** StorageObject customerEncryption */
                customerEncryption?: (google.storage.v2.ICustomerEncryption|null);

                /** StorageObject customTime */
                customTime?: (google.protobuf.ITimestamp|null);

                /** StorageObject softDeleteTime */
                softDeleteTime?: (google.protobuf.ITimestamp|null);

                /** StorageObject hardDeleteTime */
                hardDeleteTime?: (google.protobuf.ITimestamp|null);

                /** StorageObject retention */
                retention?: (google.storage.v2.StorageObject.IRetention|null);
            }

            /** Represents a StorageObject. */
            class StorageObject implements IStorageObject {

                /**
                 * Constructs a new StorageObject.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.storage.v2.IStorageObject);

                /** StorageObject name. */
                public name: string;

                /** StorageObject bucket. */
                public bucket: string;

                /** StorageObject etag. */
                public etag: string;

                /** StorageObject generation. */
                public generation: (number|Long|string);

                /** StorageObject restoreToken. */
                public restoreToken?: (string|null);

                /** StorageObject metageneration. */
                public metageneration: (number|Long|string);

                /** StorageObject storageClass. */
                public storageClass: string;

                /** StorageObject size. */
                public size: (number|Long|string);

                /** StorageObject contentEncoding. */
                public contentEncoding: string;

                /** StorageObject contentDisposition. */
                public contentDisposition: string;

                /** StorageObject cacheControl. */
                public cacheControl: string;

                /** StorageObject acl. */
                public acl: google.storage.v2.IObjectAccessControl[];

                /** StorageObject contentLanguage. */
                public contentLanguage: string;

                /** StorageObject deleteTime. */
                public deleteTime?: (google.protobuf.ITimestamp|null);

                /** StorageObject finalizeTime. */
                public finalizeTime?: (google.protobuf.ITimestamp|null);

                /** StorageObject contentType. */
                public contentType: string;

                /** StorageObject createTime. */
                public createTime?: (google.protobuf.ITimestamp|null);

                /** StorageObject componentCount. */
                public componentCount: number;

                /** StorageObject checksums. */
                public checksums?: (google.storage.v2.IObjectChecksums|null);

                /** StorageObject updateTime. */
                public updateTime?: (google.protobuf.ITimestamp|null);

                /** StorageObject kmsKey. */
                public kmsKey: string;

                /** StorageObject updateStorageClassTime. */
                public updateStorageClassTime?: (google.protobuf.ITimestamp|null);

                /** StorageObject temporaryHold. */
                public temporaryHold: boolean;

                /** StorageObject retentionExpireTime. */
                public retentionExpireTime?: (google.protobuf.ITimestamp|null);

                /** StorageObject metadata. */
                public metadata: { [k: string]: string };

                /** StorageObject contexts. */
                public contexts?: (google.storage.v2.IObjectContexts|null);

                /** StorageObject eventBasedHold. */
                public eventBasedHold?: (boolean|null);

                /** StorageObject owner. */
                public owner?: (google.storage.v2.IOwner|null);

                /** StorageObject customerEncryption. */
                public customerEncryption?: (google.storage.v2.ICustomerEncryption|null);

                /** StorageObject customTime. */
                public customTime?: (google.protobuf.ITimestamp|null);

                /** StorageObject softDeleteTime. */
                public softDeleteTime?: (google.protobuf.ITimestamp|null);

                /** StorageObject hardDeleteTime. */
                public hardDeleteTime?: (google.protobuf.ITimestamp|null);

                /** StorageObject retention. */
                public retention?: (google.storage.v2.StorageObject.IRetention|null);

                /**
                 * Creates a new StorageObject instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns StorageObject instance
                 */
                public static create(properties?: google.storage.v2.IStorageObject): google.storage.v2.StorageObject;

                /**
                 * Encodes the specified StorageObject message. Does not implicitly {@link google.storage.v2.StorageObject.verify|verify} messages.
                 * @param message StorageObject message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.storage.v2.IStorageObject, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified StorageObject message, length delimited. Does not implicitly {@link google.storage.v2.StorageObject.verify|verify} messages.
                 * @param message StorageObject message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.storage.v2.IStorageObject, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a StorageObject message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns StorageObject
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.StorageObject;

                /**
                 * Decodes a StorageObject message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns StorageObject
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.StorageObject;

                /**
                 * Verifies a StorageObject message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a StorageObject message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns StorageObject
                 */
                public static fromObject(object: { [k: string]: any }): google.storage.v2.StorageObject;

                /**
                 * Creates a plain object from a StorageObject message. Also converts values to other types if specified.
                 * @param message StorageObject
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.storage.v2.StorageObject, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this StorageObject to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for StorageObject
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            namespace StorageObject {

                /** Properties of a Retention. */
                interface IRetention {

                    /** Retention mode */
                    mode?: (google.storage.v2.StorageObject.Retention.Mode|keyof typeof google.storage.v2.StorageObject.Retention.Mode|null);

                    /** Retention retainUntilTime */
                    retainUntilTime?: (google.protobuf.ITimestamp|null);
                }

                /** Represents a Retention. */
                class Retention implements IRetention {

                    /**
                     * Constructs a new Retention.
                     * @param [properties] Properties to set
                     */
                    constructor(properties?: google.storage.v2.StorageObject.IRetention);

                    /** Retention mode. */
                    public mode: (google.storage.v2.StorageObject.Retention.Mode|keyof typeof google.storage.v2.StorageObject.Retention.Mode);

                    /** Retention retainUntilTime. */
                    public retainUntilTime?: (google.protobuf.ITimestamp|null);

                    /**
                     * Creates a new Retention instance using the specified properties.
                     * @param [properties] Properties to set
                     * @returns Retention instance
                     */
                    public static create(properties?: google.storage.v2.StorageObject.IRetention): google.storage.v2.StorageObject.Retention;

                    /**
                     * Encodes the specified Retention message. Does not implicitly {@link google.storage.v2.StorageObject.Retention.verify|verify} messages.
                     * @param message Retention message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encode(message: google.storage.v2.StorageObject.IRetention, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Encodes the specified Retention message, length delimited. Does not implicitly {@link google.storage.v2.StorageObject.Retention.verify|verify} messages.
                     * @param message Retention message or plain object to encode
                     * @param [writer] Writer to encode to
                     * @returns Writer
                     */
                    public static encodeDelimited(message: google.storage.v2.StorageObject.IRetention, writer?: $protobuf.Writer): $protobuf.Writer;

                    /**
                     * Decodes a Retention message from the specified reader or buffer.
                     * @param reader Reader or buffer to decode from
                     * @param [length] Message length if known beforehand
                     * @returns Retention
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.StorageObject.Retention;

                    /**
                     * Decodes a Retention message from the specified reader or buffer, length delimited.
                     * @param reader Reader or buffer to decode from
                     * @returns Retention
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.StorageObject.Retention;

                    /**
                     * Verifies a Retention message.
                     * @param message Plain object to verify
                     * @returns `null` if valid, otherwise the reason why it is not
                     */
                    public static verify(message: { [k: string]: any }): (string|null);

                    /**
                     * Creates a Retention message from a plain object. Also converts values to their respective internal types.
                     * @param object Plain object
                     * @returns Retention
                     */
                    public static fromObject(object: { [k: string]: any }): google.storage.v2.StorageObject.Retention;

                    /**
                     * Creates a plain object from a Retention message. Also converts values to other types if specified.
                     * @param message Retention
                     * @param [options] Conversion options
                     * @returns Plain object
                     */
                    public static toObject(message: google.storage.v2.StorageObject.Retention, options?: $protobuf.IConversionOptions): { [k: string]: any };

                    /**
                     * Converts this Retention to JSON.
                     * @returns JSON object
                     */
                    public toJSON(): { [k: string]: any };

                    /**
                     * Gets the default type url for Retention
                     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                     * @returns The default type url
                     */
                    public static getTypeUrl(typeUrlPrefix?: string): string;
                }

                namespace Retention {

                    /** Mode enum. */
                    enum Mode {
                        MODE_UNSPECIFIED = 0,
                        UNLOCKED = 1,
                        LOCKED = 2
                    }
                }
            }

            /** Properties of an ObjectAccessControl. */
            interface IObjectAccessControl {

                /** ObjectAccessControl role */
                role?: (string|null);

                /** ObjectAccessControl id */
                id?: (string|null);

                /** ObjectAccessControl entity */
                entity?: (string|null);

                /** ObjectAccessControl entityAlt */
                entityAlt?: (string|null);

                /** ObjectAccessControl entityId */
                entityId?: (string|null);

                /** ObjectAccessControl etag */
                etag?: (string|null);

                /** ObjectAccessControl email */
                email?: (string|null);

                /** ObjectAccessControl domain */
                domain?: (string|null);

                /** ObjectAccessControl projectTeam */
                projectTeam?: (google.storage.v2.IProjectTeam|null);
            }

            /** Represents an ObjectAccessControl. */
            class ObjectAccessControl implements IObjectAccessControl {

                /**
                 * Constructs a new ObjectAccessControl.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.storage.v2.IObjectAccessControl);

                /** ObjectAccessControl role. */
                public role: string;

                /** ObjectAccessControl id. */
                public id: string;

                /** ObjectAccessControl entity. */
                public entity: string;

                /** ObjectAccessControl entityAlt. */
                public entityAlt: string;

                /** ObjectAccessControl entityId. */
                public entityId: string;

                /** ObjectAccessControl etag. */
                public etag: string;

                /** ObjectAccessControl email. */
                public email: string;

                /** ObjectAccessControl domain. */
                public domain: string;

                /** ObjectAccessControl projectTeam. */
                public projectTeam?: (google.storage.v2.IProjectTeam|null);

                /**
                 * Creates a new ObjectAccessControl instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns ObjectAccessControl instance
                 */
                public static create(properties?: google.storage.v2.IObjectAccessControl): google.storage.v2.ObjectAccessControl;

                /**
                 * Encodes the specified ObjectAccessControl message. Does not implicitly {@link google.storage.v2.ObjectAccessControl.verify|verify} messages.
                 * @param message ObjectAccessControl message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.storage.v2.IObjectAccessControl, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified ObjectAccessControl message, length delimited. Does not implicitly {@link google.storage.v2.ObjectAccessControl.verify|verify} messages.
                 * @param message ObjectAccessControl message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.storage.v2.IObjectAccessControl, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes an ObjectAccessControl message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns ObjectAccessControl
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.ObjectAccessControl;

                /**
                 * Decodes an ObjectAccessControl message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns ObjectAccessControl
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.ObjectAccessControl;

                /**
                 * Verifies an ObjectAccessControl message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates an ObjectAccessControl message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns ObjectAccessControl
                 */
                public static fromObject(object: { [k: string]: any }): google.storage.v2.ObjectAccessControl;

                /**
                 * Creates a plain object from an ObjectAccessControl message. Also converts values to other types if specified.
                 * @param message ObjectAccessControl
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.storage.v2.ObjectAccessControl, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this ObjectAccessControl to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for ObjectAccessControl
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a ListObjectsResponse. */
            interface IListObjectsResponse {

                /** ListObjectsResponse objects */
                objects?: (google.storage.v2.IStorageObject[]|null);

                /** ListObjectsResponse prefixes */
                prefixes?: (string[]|null);

                /** ListObjectsResponse nextPageToken */
                nextPageToken?: (string|null);
            }

            /** Represents a ListObjectsResponse. */
            class ListObjectsResponse implements IListObjectsResponse {

                /**
                 * Constructs a new ListObjectsResponse.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.storage.v2.IListObjectsResponse);

                /** ListObjectsResponse objects. */
                public objects: google.storage.v2.IStorageObject[];

                /** ListObjectsResponse prefixes. */
                public prefixes: string[];

                /** ListObjectsResponse nextPageToken. */
                public nextPageToken: string;

                /**
                 * Creates a new ListObjectsResponse instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns ListObjectsResponse instance
                 */
                public static create(properties?: google.storage.v2.IListObjectsResponse): google.storage.v2.ListObjectsResponse;

                /**
                 * Encodes the specified ListObjectsResponse message. Does not implicitly {@link google.storage.v2.ListObjectsResponse.verify|verify} messages.
                 * @param message ListObjectsResponse message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.storage.v2.IListObjectsResponse, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified ListObjectsResponse message, length delimited. Does not implicitly {@link google.storage.v2.ListObjectsResponse.verify|verify} messages.
                 * @param message ListObjectsResponse message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.storage.v2.IListObjectsResponse, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a ListObjectsResponse message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns ListObjectsResponse
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.ListObjectsResponse;

                /**
                 * Decodes a ListObjectsResponse message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns ListObjectsResponse
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.ListObjectsResponse;

                /**
                 * Verifies a ListObjectsResponse message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a ListObjectsResponse message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns ListObjectsResponse
                 */
                public static fromObject(object: { [k: string]: any }): google.storage.v2.ListObjectsResponse;

                /**
                 * Creates a plain object from a ListObjectsResponse message. Also converts values to other types if specified.
                 * @param message ListObjectsResponse
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.storage.v2.ListObjectsResponse, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this ListObjectsResponse to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for ListObjectsResponse
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a ProjectTeam. */
            interface IProjectTeam {

                /** ProjectTeam projectNumber */
                projectNumber?: (string|null);

                /** ProjectTeam team */
                team?: (string|null);
            }

            /** Represents a ProjectTeam. */
            class ProjectTeam implements IProjectTeam {

                /**
                 * Constructs a new ProjectTeam.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.storage.v2.IProjectTeam);

                /** ProjectTeam projectNumber. */
                public projectNumber: string;

                /** ProjectTeam team. */
                public team: string;

                /**
                 * Creates a new ProjectTeam instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns ProjectTeam instance
                 */
                public static create(properties?: google.storage.v2.IProjectTeam): google.storage.v2.ProjectTeam;

                /**
                 * Encodes the specified ProjectTeam message. Does not implicitly {@link google.storage.v2.ProjectTeam.verify|verify} messages.
                 * @param message ProjectTeam message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.storage.v2.IProjectTeam, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified ProjectTeam message, length delimited. Does not implicitly {@link google.storage.v2.ProjectTeam.verify|verify} messages.
                 * @param message ProjectTeam message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.storage.v2.IProjectTeam, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a ProjectTeam message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns ProjectTeam
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.ProjectTeam;

                /**
                 * Decodes a ProjectTeam message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns ProjectTeam
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.ProjectTeam;

                /**
                 * Verifies a ProjectTeam message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a ProjectTeam message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns ProjectTeam
                 */
                public static fromObject(object: { [k: string]: any }): google.storage.v2.ProjectTeam;

                /**
                 * Creates a plain object from a ProjectTeam message. Also converts values to other types if specified.
                 * @param message ProjectTeam
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.storage.v2.ProjectTeam, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this ProjectTeam to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for ProjectTeam
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of an Owner. */
            interface IOwner {

                /** Owner entity */
                entity?: (string|null);

                /** Owner entityId */
                entityId?: (string|null);
            }

            /** Represents an Owner. */
            class Owner implements IOwner {

                /**
                 * Constructs a new Owner.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.storage.v2.IOwner);

                /** Owner entity. */
                public entity: string;

                /** Owner entityId. */
                public entityId: string;

                /**
                 * Creates a new Owner instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns Owner instance
                 */
                public static create(properties?: google.storage.v2.IOwner): google.storage.v2.Owner;

                /**
                 * Encodes the specified Owner message. Does not implicitly {@link google.storage.v2.Owner.verify|verify} messages.
                 * @param message Owner message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.storage.v2.IOwner, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified Owner message, length delimited. Does not implicitly {@link google.storage.v2.Owner.verify|verify} messages.
                 * @param message Owner message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.storage.v2.IOwner, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes an Owner message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns Owner
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.Owner;

                /**
                 * Decodes an Owner message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns Owner
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.Owner;

                /**
                 * Verifies an Owner message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates an Owner message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns Owner
                 */
                public static fromObject(object: { [k: string]: any }): google.storage.v2.Owner;

                /**
                 * Creates a plain object from an Owner message. Also converts values to other types if specified.
                 * @param message Owner
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.storage.v2.Owner, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this Owner to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for Owner
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a ContentRange. */
            interface IContentRange {

                /** ContentRange start */
                start?: (number|Long|string|null);

                /** ContentRange end */
                end?: (number|Long|string|null);

                /** ContentRange completeLength */
                completeLength?: (number|Long|string|null);
            }

            /** Represents a ContentRange. */
            class ContentRange implements IContentRange {

                /**
                 * Constructs a new ContentRange.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.storage.v2.IContentRange);

                /** ContentRange start. */
                public start: (number|Long|string);

                /** ContentRange end. */
                public end: (number|Long|string);

                /** ContentRange completeLength. */
                public completeLength: (number|Long|string);

                /**
                 * Creates a new ContentRange instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns ContentRange instance
                 */
                public static create(properties?: google.storage.v2.IContentRange): google.storage.v2.ContentRange;

                /**
                 * Encodes the specified ContentRange message. Does not implicitly {@link google.storage.v2.ContentRange.verify|verify} messages.
                 * @param message ContentRange message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.storage.v2.IContentRange, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified ContentRange message, length delimited. Does not implicitly {@link google.storage.v2.ContentRange.verify|verify} messages.
                 * @param message ContentRange message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.storage.v2.IContentRange, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a ContentRange message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns ContentRange
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.storage.v2.ContentRange;

                /**
                 * Decodes a ContentRange message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns ContentRange
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.storage.v2.ContentRange;

                /**
                 * Verifies a ContentRange message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a ContentRange message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns ContentRange
                 */
                public static fromObject(object: { [k: string]: any }): google.storage.v2.ContentRange;

                /**
                 * Creates a plain object from a ContentRange message. Also converts values to other types if specified.
                 * @param message ContentRange
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.storage.v2.ContentRange, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this ContentRange to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for ContentRange
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }
        }
    }

    /** Namespace api. */
    namespace api {

        /** Properties of a Http. */
        interface IHttp {

            /** Http rules */
            rules?: (google.api.IHttpRule[]|null);

            /** Http fullyDecodeReservedExpansion */
            fullyDecodeReservedExpansion?: (boolean|null);
        }

        /** Represents a Http. */
        class Http implements IHttp {

            /**
             * Constructs a new Http.
             * @param [properties] Properties to set
             */
            constructor(properties?: google.api.IHttp);

            /** Http rules. */
            public rules: google.api.IHttpRule[];

            /** Http fullyDecodeReservedExpansion. */
            public fullyDecodeReservedExpansion: boolean;

            /**
             * Creates a new Http instance using the specified properties.
             * @param [properties] Properties to set
             * @returns Http instance
             */
            public static create(properties?: google.api.IHttp): google.api.Http;

            /**
             * Encodes the specified Http message. Does not implicitly {@link google.api.Http.verify|verify} messages.
             * @param message Http message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: google.api.IHttp, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified Http message, length delimited. Does not implicitly {@link google.api.Http.verify|verify} messages.
             * @param message Http message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: google.api.IHttp, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a Http message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns Http
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.api.Http;

            /**
             * Decodes a Http message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns Http
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.api.Http;

            /**
             * Verifies a Http message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a Http message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns Http
             */
            public static fromObject(object: { [k: string]: any }): google.api.Http;

            /**
             * Creates a plain object from a Http message. Also converts values to other types if specified.
             * @param message Http
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: google.api.Http, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this Http to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for Http
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a HttpRule. */
        interface IHttpRule {

            /** HttpRule selector */
            selector?: (string|null);

            /** HttpRule get */
            get?: (string|null);

            /** HttpRule put */
            put?: (string|null);

            /** HttpRule post */
            post?: (string|null);

            /** HttpRule delete */
            "delete"?: (string|null);

            /** HttpRule patch */
            patch?: (string|null);

            /** HttpRule custom */
            custom?: (google.api.ICustomHttpPattern|null);

            /** HttpRule body */
            body?: (string|null);

            /** HttpRule responseBody */
            responseBody?: (string|null);

            /** HttpRule additionalBindings */
            additionalBindings?: (google.api.IHttpRule[]|null);
        }

        /** Represents a HttpRule. */
        class HttpRule implements IHttpRule {

            /**
             * Constructs a new HttpRule.
             * @param [properties] Properties to set
             */
            constructor(properties?: google.api.IHttpRule);

            /** HttpRule selector. */
            public selector: string;

            /** HttpRule get. */
            public get?: (string|null);

            /** HttpRule put. */
            public put?: (string|null);

            /** HttpRule post. */
            public post?: (string|null);

            /** HttpRule delete. */
            public delete?: (string|null);

            /** HttpRule patch. */
            public patch?: (string|null);

            /** HttpRule custom. */
            public custom?: (google.api.ICustomHttpPattern|null);

            /** HttpRule body. */
            public body: string;

            /** HttpRule responseBody. */
            public responseBody: string;

            /** HttpRule additionalBindings. */
            public additionalBindings: google.api.IHttpRule[];

            /** HttpRule pattern. */
            public pattern?: ("get"|"put"|"post"|"delete"|"patch"|"custom");

            /**
             * Creates a new HttpRule instance using the specified properties.
             * @param [properties] Properties to set
             * @returns HttpRule instance
             */
            public static create(properties?: google.api.IHttpRule): google.api.HttpRule;

            /**
             * Encodes the specified HttpRule message. Does not implicitly {@link google.api.HttpRule.verify|verify} messages.
             * @param message HttpRule message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: google.api.IHttpRule, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified HttpRule message, length delimited. Does not implicitly {@link google.api.HttpRule.verify|verify} messages.
             * @param message HttpRule message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: google.api.IHttpRule, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a HttpRule message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns HttpRule
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.api.HttpRule;

            /**
             * Decodes a HttpRule message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns HttpRule
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.api.HttpRule;

            /**
             * Verifies a HttpRule message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a HttpRule message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns HttpRule
             */
            public static fromObject(object: { [k: string]: any }): google.api.HttpRule;

            /**
             * Creates a plain object from a HttpRule message. Also converts values to other types if specified.
             * @param message HttpRule
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: google.api.HttpRule, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this HttpRule to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for HttpRule
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a CustomHttpPattern. */
        interface ICustomHttpPattern {

            /** CustomHttpPattern kind */
            kind?: (string|null);

            /** CustomHttpPattern path */
            path?: (string|null);
        }

        /** Represents a CustomHttpPattern. */
        class CustomHttpPattern implements ICustomHttpPattern {

            /**
             * Constructs a new CustomHttpPattern.
             * @param [properties] Properties to set
             */
            constructor(properties?: google.api.ICustomHttpPattern);

            /** CustomHttpPattern kind. */
            public kind: string;

            /** CustomHttpPattern path. */
            public path: string;

            /**
             * Creates a new CustomHttpPattern instance using the specified properties.
             * @param [properties] Properties to set
             * @returns CustomHttpPattern instance
             */
            public static create(properties?: google.api.ICustomHttpPattern): google.api.CustomHttpPattern;

            /**
             * Encodes the specified CustomHttpPattern message. Does not implicitly {@link google.api.CustomHttpPattern.verify|verify} messages.
             * @param message CustomHttpPattern message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: google.api.ICustomHttpPattern, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified CustomHttpPattern message, length delimited. Does not implicitly {@link google.api.CustomHttpPattern.verify|verify} messages.
             * @param message CustomHttpPattern message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: google.api.ICustomHttpPattern, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a CustomHttpPattern message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns CustomHttpPattern
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.api.CustomHttpPattern;

            /**
             * Decodes a CustomHttpPattern message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns CustomHttpPattern
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.api.CustomHttpPattern;

            /**
             * Verifies a CustomHttpPattern message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a CustomHttpPattern message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns CustomHttpPattern
             */
            public static fromObject(object: { [k: string]: any }): google.api.CustomHttpPattern;

            /**
             * Creates a plain object from a CustomHttpPattern message. Also converts values to other types if specified.
             * @param message CustomHttpPattern
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: google.api.CustomHttpPattern, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this CustomHttpPattern to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for CustomHttpPattern
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a CommonLanguageSettings. */
        interface ICommonLanguageSettings {

            /** CommonLanguageSettings referenceDocsUri */
            referenceDocsUri?: (string|null);

            /** CommonLanguageSettings destinations */
            destinations?: (google.api.ClientLibraryDestination[]|null);

            /** CommonLanguageSettings selectiveGapicGeneration */
            selectiveGapicGeneration?: (google.api.ISelectiveGapicGeneration|null);
        }

        /** Represents a CommonLanguageSettings. */
        class CommonLanguageSettings implements ICommonLanguageSettings {

            /**
             * Constructs a new CommonLanguageSettings.
             * @param [properties] Properties to set
             */
            constructor(properties?: google.api.ICommonLanguageSettings);

            /** CommonLanguageSettings referenceDocsUri. */
            public referenceDocsUri: string;

            /** CommonLanguageSettings destinations. */
            public destinations: google.api.ClientLibraryDestination[];

            /** CommonLanguageSettings selectiveGapicGeneration. */
            public selectiveGapicGeneration?: (google.api.ISelectiveGapicGeneration|null);

            /**
             * Creates a new CommonLanguageSettings instance using the specified properties.
             * @param [properties] Properties to set
             * @returns CommonLanguageSettings instance
             */
            public static create(properties?: google.api.ICommonLanguageSettings): google.api.CommonLanguageSettings;

            /**
             * Encodes the specified CommonLanguageSettings message. Does not implicitly {@link google.api.CommonLanguageSettings.verify|verify} messages.
             * @param message CommonLanguageSettings message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: google.api.ICommonLanguageSettings, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified CommonLanguageSettings message, length delimited. Does not implicitly {@link google.api.CommonLanguageSettings.verify|verify} messages.
             * @param message CommonLanguageSettings message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: google.api.ICommonLanguageSettings, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a CommonLanguageSettings message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns CommonLanguageSettings
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.api.CommonLanguageSettings;

            /**
             * Decodes a CommonLanguageSettings message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns CommonLanguageSettings
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.api.CommonLanguageSettings;

            /**
             * Verifies a CommonLanguageSettings message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a CommonLanguageSettings message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns CommonLanguageSettings
             */
            public static fromObject(object: { [k: string]: any }): google.api.CommonLanguageSettings;

            /**
             * Creates a plain object from a CommonLanguageSettings message. Also converts values to other types if specified.
             * @param message CommonLanguageSettings
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: google.api.CommonLanguageSettings, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this CommonLanguageSettings to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for CommonLanguageSettings
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a ClientLibrarySettings. */
        interface IClientLibrarySettings {

            /** ClientLibrarySettings version */
            version?: (string|null);

            /** ClientLibrarySettings launchStage */
            launchStage?: (google.api.LaunchStage|keyof typeof google.api.LaunchStage|null);

            /** ClientLibrarySettings restNumericEnums */
            restNumericEnums?: (boolean|null);

            /** ClientLibrarySettings javaSettings */
            javaSettings?: (google.api.IJavaSettings|null);

            /** ClientLibrarySettings cppSettings */
            cppSettings?: (google.api.ICppSettings|null);

            /** ClientLibrarySettings phpSettings */
            phpSettings?: (google.api.IPhpSettings|null);

            /** ClientLibrarySettings pythonSettings */
            pythonSettings?: (google.api.IPythonSettings|null);

            /** ClientLibrarySettings nodeSettings */
            nodeSettings?: (google.api.INodeSettings|null);

            /** ClientLibrarySettings dotnetSettings */
            dotnetSettings?: (google.api.IDotnetSettings|null);

            /** ClientLibrarySettings rubySettings */
            rubySettings?: (google.api.IRubySettings|null);

            /** ClientLibrarySettings goSettings */
            goSettings?: (google.api.IGoSettings|null);
        }

        /** Represents a ClientLibrarySettings. */
        class ClientLibrarySettings implements IClientLibrarySettings {

            /**
             * Constructs a new ClientLibrarySettings.
             * @param [properties] Properties to set
             */
            constructor(properties?: google.api.IClientLibrarySettings);

            /** ClientLibrarySettings version. */
            public version: string;

            /** ClientLibrarySettings launchStage. */
            public launchStage: (google.api.LaunchStage|keyof typeof google.api.LaunchStage);

            /** ClientLibrarySettings restNumericEnums. */
            public restNumericEnums: boolean;

            /** ClientLibrarySettings javaSettings. */
            public javaSettings?: (google.api.IJavaSettings|null);

            /** ClientLibrarySettings cppSettings. */
            public cppSettings?: (google.api.ICppSettings|null);

            /** ClientLibrarySettings phpSettings. */
            public phpSettings?: (google.api.IPhpSettings|null);

            /** ClientLibrarySettings pythonSettings. */
            public pythonSettings?: (google.api.IPythonSettings|null);

            /** ClientLibrarySettings nodeSettings. */
            public nodeSettings?: (google.api.INodeSettings|null);

            /** ClientLibrarySettings dotnetSettings. */
            public dotnetSettings?: (google.api.IDotnetSettings|null);

            /** ClientLibrarySettings rubySettings. */
            public rubySettings?: (google.api.IRubySettings|null);

            /** ClientLibrarySettings goSettings. */
            public goSettings?: (google.api.IGoSettings|null);

            /**
             * Creates a new ClientLibrarySettings instance using the specified properties.
             * @param [properties] Properties to set
             * @returns ClientLibrarySettings instance
             */
            public static create(properties?: google.api.IClientLibrarySettings): google.api.ClientLibrarySettings;

            /**
             * Encodes the specified ClientLibrarySettings message. Does not implicitly {@link google.api.ClientLibrarySettings.verify|verify} messages.
             * @param message ClientLibrarySettings message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: google.api.IClientLibrarySettings, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified ClientLibrarySettings message, length delimited. Does not implicitly {@link google.api.ClientLibrarySettings.verify|verify} messages.
             * @param message ClientLibrarySettings message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: google.api.IClientLibrarySettings, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a ClientLibrarySettings message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns ClientLibrarySettings
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.api.ClientLibrarySettings;

            /**
             * Decodes a ClientLibrarySettings message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns ClientLibrarySettings
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.api.ClientLibrarySettings;

            /**
             * Verifies a ClientLibrarySettings message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a ClientLibrarySettings message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns ClientLibrarySettings
             */
            public static fromObject(object: { [k: string]: any }): google.api.ClientLibrarySettings;

            /**
             * Creates a plain object from a ClientLibrarySettings message. Also converts values to other types if specified.
             * @param message ClientLibrarySettings
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: google.api.ClientLibrarySettings, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this ClientLibrarySettings to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for ClientLibrarySettings
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a Publishing. */
        interface IPublishing {

            /** Publishing methodSettings */
            methodSettings?: (google.api.IMethodSettings[]|null);

            /** Publishing newIssueUri */
            newIssueUri?: (string|null);

            /** Publishing documentationUri */
            documentationUri?: (string|null);

            /** Publishing apiShortName */
            apiShortName?: (string|null);

            /** Publishing githubLabel */
            githubLabel?: (string|null);

            /** Publishing codeownerGithubTeams */
            codeownerGithubTeams?: (string[]|null);

            /** Publishing docTagPrefix */
            docTagPrefix?: (string|null);

            /** Publishing organization */
            organization?: (google.api.ClientLibraryOrganization|keyof typeof google.api.ClientLibraryOrganization|null);

            /** Publishing librarySettings */
            librarySettings?: (google.api.IClientLibrarySettings[]|null);

            /** Publishing protoReferenceDocumentationUri */
            protoReferenceDocumentationUri?: (string|null);

            /** Publishing restReferenceDocumentationUri */
            restReferenceDocumentationUri?: (string|null);
        }

        /** Represents a Publishing. */
        class Publishing implements IPublishing {

            /**
             * Constructs a new Publishing.
             * @param [properties] Properties to set
             */
            constructor(properties?: google.api.IPublishing);

            /** Publishing methodSettings. */
            public methodSettings: google.api.IMethodSettings[];

            /** Publishing newIssueUri. */
            public newIssueUri: string;

            /** Publishing documentationUri. */
            public documentationUri: string;

            /** Publishing apiShortName. */
            public apiShortName: string;

            /** Publishing githubLabel. */
            public githubLabel: string;

            /** Publishing codeownerGithubTeams. */
            public codeownerGithubTeams: string[];

            /** Publishing docTagPrefix. */
            public docTagPrefix: string;

            /** Publishing organization. */
            public organization: (google.api.ClientLibraryOrganization|keyof typeof google.api.ClientLibraryOrganization);

            /** Publishing librarySettings. */
            public librarySettings: google.api.IClientLibrarySettings[];

            /** Publishing protoReferenceDocumentationUri. */
            public protoReferenceDocumentationUri: string;

            /** Publishing restReferenceDocumentationUri. */
            public restReferenceDocumentationUri: string;

            /**
             * Creates a new Publishing instance using the specified properties.
             * @param [properties] Properties to set
             * @returns Publishing instance
             */
            public static create(properties?: google.api.IPublishing): google.api.Publishing;

            /**
             * Encodes the specified Publishing message. Does not implicitly {@link google.api.Publishing.verify|verify} messages.
             * @param message Publishing message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: google.api.IPublishing, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified Publishing message, length delimited. Does not implicitly {@link google.api.Publishing.verify|verify} messages.
             * @param message Publishing message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: google.api.IPublishing, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a Publishing message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns Publishing
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.api.Publishing;

            /**
             * Decodes a Publishing message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns Publishing
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.api.Publishing;

            /**
             * Verifies a Publishing message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a Publishing message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns Publishing
             */
            public static fromObject(object: { [k: string]: any }): google.api.Publishing;

            /**
             * Creates a plain object from a Publishing message. Also converts values to other types if specified.
             * @param message Publishing
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: google.api.Publishing, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this Publishing to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for Publishing
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a JavaSettings. */
        interface IJavaSettings {

            /** JavaSettings libraryPackage */
            libraryPackage?: (string|null);

            /** JavaSettings serviceClassNames */
            serviceClassNames?: ({ [k: string]: string }|null);

            /** JavaSettings common */
            common?: (google.api.ICommonLanguageSettings|null);
        }

        /** Represents a JavaSettings. */
        class JavaSettings implements IJavaSettings {

            /**
             * Constructs a new JavaSettings.
             * @param [properties] Properties to set
             */
            constructor(properties?: google.api.IJavaSettings);

            /** JavaSettings libraryPackage. */
            public libraryPackage: string;

            /** JavaSettings serviceClassNames. */
            public serviceClassNames: { [k: string]: string };

            /** JavaSettings common. */
            public common?: (google.api.ICommonLanguageSettings|null);

            /**
             * Creates a new JavaSettings instance using the specified properties.
             * @param [properties] Properties to set
             * @returns JavaSettings instance
             */
            public static create(properties?: google.api.IJavaSettings): google.api.JavaSettings;

            /**
             * Encodes the specified JavaSettings message. Does not implicitly {@link google.api.JavaSettings.verify|verify} messages.
             * @param message JavaSettings message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: google.api.IJavaSettings, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified JavaSettings message, length delimited. Does not implicitly {@link google.api.JavaSettings.verify|verify} messages.
             * @param message JavaSettings message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: google.api.IJavaSettings, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a JavaSettings message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns JavaSettings
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.api.JavaSettings;

            /**
             * Decodes a JavaSettings message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns JavaSettings
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.api.JavaSettings;

            /**
             * Verifies a JavaSettings message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a JavaSettings message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns JavaSettings
             */
            public static fromObject(object: { [k: string]: any }): google.api.JavaSettings;

            /**
             * Creates a plain object from a JavaSettings message. Also converts values to other types if specified.
             * @param message JavaSettings
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: google.api.JavaSettings, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this JavaSettings to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for JavaSettings
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a CppSettings. */
        interface ICppSettings {

            /** CppSettings common */
            common?: (google.api.ICommonLanguageSettings|null);
        }

        /** Represents a CppSettings. */
        class CppSettings implements ICppSettings {

            /**
             * Constructs a new CppSettings.
             * @param [properties] Properties to set
             */
            constructor(properties?: google.api.ICppSettings);

            /** CppSettings common. */
            public common?: (google.api.ICommonLanguageSettings|null);

            /**
             * Creates a new CppSettings instance using the specified properties.
             * @param [properties] Properties to set
             * @returns CppSettings instance
             */
            public static create(properties?: google.api.ICppSettings): google.api.CppSettings;

            /**
             * Encodes the specified CppSettings message. Does not implicitly {@link google.api.CppSettings.verify|verify} messages.
             * @param message CppSettings message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: google.api.ICppSettings, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified CppSettings message, length delimited. Does not implicitly {@link google.api.CppSettings.verify|verify} messages.
             * @param message CppSettings message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: google.api.ICppSettings, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a CppSettings message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns CppSettings
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.api.CppSettings;

            /**
             * Decodes a CppSettings message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns CppSettings
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.api.CppSettings;

            /**
             * Verifies a CppSettings message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a CppSettings message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns CppSettings
             */
            public static fromObject(object: { [k: string]: any }): google.api.CppSettings;

            /**
             * Creates a plain object from a CppSettings message. Also converts values to other types if specified.
             * @param message CppSettings
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: google.api.CppSettings, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this CppSettings to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for CppSettings
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a PhpSettings. */
        interface IPhpSettings {

            /** PhpSettings common */
            common?: (google.api.ICommonLanguageSettings|null);
        }

        /** Represents a PhpSettings. */
        class PhpSettings implements IPhpSettings {

            /**
             * Constructs a new PhpSettings.
             * @param [properties] Properties to set
             */
            constructor(properties?: google.api.IPhpSettings);

            /** PhpSettings common. */
            public common?: (google.api.ICommonLanguageSettings|null);

            /**
             * Creates a new PhpSettings instance using the specified properties.
             * @param [properties] Properties to set
             * @returns PhpSettings instance
             */
            public static create(properties?: google.api.IPhpSettings): google.api.PhpSettings;

            /**
             * Encodes the specified PhpSettings message. Does not implicitly {@link google.api.PhpSettings.verify|verify} messages.
             * @param message PhpSettings message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: google.api.IPhpSettings, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified PhpSettings message, length delimited. Does not implicitly {@link google.api.PhpSettings.verify|verify} messages.
             * @param message PhpSettings message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: google.api.IPhpSettings, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a PhpSettings message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns PhpSettings
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.api.PhpSettings;

            /**
             * Decodes a PhpSettings message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns PhpSettings
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.api.PhpSettings;

            /**
             * Verifies a PhpSettings message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a PhpSettings message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns PhpSettings
             */
            public static fromObject(object: { [k: string]: any }): google.api.PhpSettings;

            /**
             * Creates a plain object from a PhpSettings message. Also converts values to other types if specified.
             * @param message PhpSettings
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: google.api.PhpSettings, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this PhpSettings to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for PhpSettings
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a PythonSettings. */
        interface IPythonSettings {

            /** PythonSettings common */
            common?: (google.api.ICommonLanguageSettings|null);

            /** PythonSettings experimentalFeatures */
            experimentalFeatures?: (google.api.PythonSettings.IExperimentalFeatures|null);
        }

        /** Represents a PythonSettings. */
        class PythonSettings implements IPythonSettings {

            /**
             * Constructs a new PythonSettings.
             * @param [properties] Properties to set
             */
            constructor(properties?: google.api.IPythonSettings);

            /** PythonSettings common. */
            public common?: (google.api.ICommonLanguageSettings|null);

            /** PythonSettings experimentalFeatures. */
            public experimentalFeatures?: (google.api.PythonSettings.IExperimentalFeatures|null);

            /**
             * Creates a new PythonSettings instance using the specified properties.
             * @param [properties] Properties to set
             * @returns PythonSettings instance
             */
            public static create(properties?: google.api.IPythonSettings): google.api.PythonSettings;

            /**
             * Encodes the specified PythonSettings message. Does not implicitly {@link google.api.PythonSettings.verify|verify} messages.
             * @param message PythonSettings message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: google.api.IPythonSettings, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified PythonSettings message, length delimited. Does not implicitly {@link google.api.PythonSettings.verify|verify} messages.
             * @param message PythonSettings message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: google.api.IPythonSettings, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a PythonSettings message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns PythonSettings
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.api.PythonSettings;

            /**
             * Decodes a PythonSettings message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns PythonSettings
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.api.PythonSettings;

            /**
             * Verifies a PythonSettings message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a PythonSettings message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns PythonSettings
             */
            public static fromObject(object: { [k: string]: any }): google.api.PythonSettings;

            /**
             * Creates a plain object from a PythonSettings message. Also converts values to other types if specified.
             * @param message PythonSettings
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: google.api.PythonSettings, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this PythonSettings to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for PythonSettings
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace PythonSettings {

            /** Properties of an ExperimentalFeatures. */
            interface IExperimentalFeatures {

                /** ExperimentalFeatures restAsyncIoEnabled */
                restAsyncIoEnabled?: (boolean|null);

                /** ExperimentalFeatures protobufPythonicTypesEnabled */
                protobufPythonicTypesEnabled?: (boolean|null);

                /** ExperimentalFeatures unversionedPackageDisabled */
                unversionedPackageDisabled?: (boolean|null);
            }

            /** Represents an ExperimentalFeatures. */
            class ExperimentalFeatures implements IExperimentalFeatures {

                /**
                 * Constructs a new ExperimentalFeatures.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.api.PythonSettings.IExperimentalFeatures);

                /** ExperimentalFeatures restAsyncIoEnabled. */
                public restAsyncIoEnabled: boolean;

                /** ExperimentalFeatures protobufPythonicTypesEnabled. */
                public protobufPythonicTypesEnabled: boolean;

                /** ExperimentalFeatures unversionedPackageDisabled. */
                public unversionedPackageDisabled: boolean;

                /**
                 * Creates a new ExperimentalFeatures instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns ExperimentalFeatures instance
                 */
                public static create(properties?: google.api.PythonSettings.IExperimentalFeatures): google.api.PythonSettings.ExperimentalFeatures;

                /**
                 * Encodes the specified ExperimentalFeatures message. Does not implicitly {@link google.api.PythonSettings.ExperimentalFeatures.verify|verify} messages.
                 * @param message ExperimentalFeatures message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.api.PythonSettings.IExperimentalFeatures, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified ExperimentalFeatures message, length delimited. Does not implicitly {@link google.api.PythonSettings.ExperimentalFeatures.verify|verify} messages.
                 * @param message ExperimentalFeatures message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.api.PythonSettings.IExperimentalFeatures, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes an ExperimentalFeatures message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns ExperimentalFeatures
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.api.PythonSettings.ExperimentalFeatures;

                /**
                 * Decodes an ExperimentalFeatures message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns ExperimentalFeatures
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.api.PythonSettings.ExperimentalFeatures;

                /**
                 * Verifies an ExperimentalFeatures message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates an ExperimentalFeatures message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns ExperimentalFeatures
                 */
                public static fromObject(object: { [k: string]: any }): google.api.PythonSettings.ExperimentalFeatures;

                /**
                 * Creates a plain object from an ExperimentalFeatures message. Also converts values to other types if specified.
                 * @param message ExperimentalFeatures
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.api.PythonSettings.ExperimentalFeatures, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this ExperimentalFeatures to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for ExperimentalFeatures
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }
        }

        /** Properties of a NodeSettings. */
        interface INodeSettings {

            /** NodeSettings common */
            common?: (google.api.ICommonLanguageSettings|null);
        }

        /** Represents a NodeSettings. */
        class NodeSettings implements INodeSettings {

            /**
             * Constructs a new NodeSettings.
             * @param [properties] Properties to set
             */
            constructor(properties?: google.api.INodeSettings);

            /** NodeSettings common. */
            public common?: (google.api.ICommonLanguageSettings|null);

            /**
             * Creates a new NodeSettings instance using the specified properties.
             * @param [properties] Properties to set
             * @returns NodeSettings instance
             */
            public static create(properties?: google.api.INodeSettings): google.api.NodeSettings;

            /**
             * Encodes the specified NodeSettings message. Does not implicitly {@link google.api.NodeSettings.verify|verify} messages.
             * @param message NodeSettings message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: google.api.INodeSettings, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified NodeSettings message, length delimited. Does not implicitly {@link google.api.NodeSettings.verify|verify} messages.
             * @param message NodeSettings message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: google.api.INodeSettings, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a NodeSettings message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns NodeSettings
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.api.NodeSettings;

            /**
             * Decodes a NodeSettings message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns NodeSettings
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.api.NodeSettings;

            /**
             * Verifies a NodeSettings message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a NodeSettings message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns NodeSettings
             */
            public static fromObject(object: { [k: string]: any }): google.api.NodeSettings;

            /**
             * Creates a plain object from a NodeSettings message. Also converts values to other types if specified.
             * @param message NodeSettings
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: google.api.NodeSettings, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this NodeSettings to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for NodeSettings
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a DotnetSettings. */
        interface IDotnetSettings {

            /** DotnetSettings common */
            common?: (google.api.ICommonLanguageSettings|null);

            /** DotnetSettings renamedServices */
            renamedServices?: ({ [k: string]: string }|null);

            /** DotnetSettings renamedResources */
            renamedResources?: ({ [k: string]: string }|null);

            /** DotnetSettings ignoredResources */
            ignoredResources?: (string[]|null);

            /** DotnetSettings forcedNamespaceAliases */
            forcedNamespaceAliases?: (string[]|null);

            /** DotnetSettings handwrittenSignatures */
            handwrittenSignatures?: (string[]|null);
        }

        /** Represents a DotnetSettings. */
        class DotnetSettings implements IDotnetSettings {

            /**
             * Constructs a new DotnetSettings.
             * @param [properties] Properties to set
             */
            constructor(properties?: google.api.IDotnetSettings);

            /** DotnetSettings common. */
            public common?: (google.api.ICommonLanguageSettings|null);

            /** DotnetSettings renamedServices. */
            public renamedServices: { [k: string]: string };

            /** DotnetSettings renamedResources. */
            public renamedResources: { [k: string]: string };

            /** DotnetSettings ignoredResources. */
            public ignoredResources: string[];

            /** DotnetSettings forcedNamespaceAliases. */
            public forcedNamespaceAliases: string[];

            /** DotnetSettings handwrittenSignatures. */
            public handwrittenSignatures: string[];

            /**
             * Creates a new DotnetSettings instance using the specified properties.
             * @param [properties] Properties to set
             * @returns DotnetSettings instance
             */
            public static create(properties?: google.api.IDotnetSettings): google.api.DotnetSettings;

            /**
             * Encodes the specified DotnetSettings message. Does not implicitly {@link google.api.DotnetSettings.verify|verify} messages.
             * @param message DotnetSettings message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: google.api.IDotnetSettings, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified DotnetSettings message, length delimited. Does not implicitly {@link google.api.DotnetSettings.verify|verify} messages.
             * @param message DotnetSettings message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: google.api.IDotnetSettings, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a DotnetSettings message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns DotnetSettings
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.api.DotnetSettings;

            /**
             * Decodes a DotnetSettings message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns DotnetSettings
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.api.DotnetSettings;

            /**
             * Verifies a DotnetSettings message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a DotnetSettings message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns DotnetSettings
             */
            public static fromObject(object: { [k: string]: any }): google.api.DotnetSettings;

            /**
             * Creates a plain object from a DotnetSettings message. Also converts values to other types if specified.
             * @param message DotnetSettings
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: google.api.DotnetSettings, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this DotnetSettings to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for DotnetSettings
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a RubySettings. */
        interface IRubySettings {

            /** RubySettings common */
            common?: (google.api.ICommonLanguageSettings|null);
        }

        /** Represents a RubySettings. */
        class RubySettings implements IRubySettings {

            /**
             * Constructs a new RubySettings.
             * @param [properties] Properties to set
             */
            constructor(properties?: google.api.IRubySettings);

            /** RubySettings common. */
            public common?: (google.api.ICommonLanguageSettings|null);

            /**
             * Creates a new RubySettings instance using the specified properties.
             * @param [properties] Properties to set
             * @returns RubySettings instance
             */
            public static create(properties?: google.api.IRubySettings): google.api.RubySettings;

            /**
             * Encodes the specified RubySettings message. Does not implicitly {@link google.api.RubySettings.verify|verify} messages.
             * @param message RubySettings message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: google.api.IRubySettings, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified RubySettings message, length delimited. Does not implicitly {@link google.api.RubySettings.verify|verify} messages.
             * @param message RubySettings message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: google.api.IRubySettings, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a RubySettings message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns RubySettings
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.api.RubySettings;

            /**
             * Decodes a RubySettings message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns RubySettings
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.api.RubySettings;

            /**
             * Verifies a RubySettings message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a RubySettings message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns RubySettings
             */
            public static fromObject(object: { [k: string]: any }): google.api.RubySettings;

            /**
             * Creates a plain object from a RubySettings message. Also converts values to other types if specified.
             * @param message RubySettings
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: google.api.RubySettings, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this RubySettings to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for RubySettings
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a GoSettings. */
        interface IGoSettings {

            /** GoSettings common */
            common?: (google.api.ICommonLanguageSettings|null);

            /** GoSettings renamedServices */
            renamedServices?: ({ [k: string]: string }|null);
        }

        /** Represents a GoSettings. */
        class GoSettings implements IGoSettings {

            /**
             * Constructs a new GoSettings.
             * @param [properties] Properties to set
             */
            constructor(properties?: google.api.IGoSettings);

            /** GoSettings common. */
            public common?: (google.api.ICommonLanguageSettings|null);

            /** GoSettings renamedServices. */
            public renamedServices: { [k: string]: string };

            /**
             * Creates a new GoSettings instance using the specified properties.
             * @param [properties] Properties to set
             * @returns GoSettings instance
             */
            public static create(properties?: google.api.IGoSettings): google.api.GoSettings;

            /**
             * Encodes the specified GoSettings message. Does not implicitly {@link google.api.GoSettings.verify|verify} messages.
             * @param message GoSettings message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: google.api.IGoSettings, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified GoSettings message, length delimited. Does not implicitly {@link google.api.GoSettings.verify|verify} messages.
             * @param message GoSettings message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: google.api.IGoSettings, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a GoSettings message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns GoSettings
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.api.GoSettings;

            /**
             * Decodes a GoSettings message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns GoSettings
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.api.GoSettings;

            /**
             * Verifies a GoSettings message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a GoSettings message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns GoSettings
             */
            public static fromObject(object: { [k: string]: any }): google.api.GoSettings;

            /**
             * Creates a plain object from a GoSettings message. Also converts values to other types if specified.
             * @param message GoSettings
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: google.api.GoSettings, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this GoSettings to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for GoSettings
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a MethodSettings. */
        interface IMethodSettings {

            /** MethodSettings selector */
            selector?: (string|null);

            /** MethodSettings longRunning */
            longRunning?: (google.api.MethodSettings.ILongRunning|null);

            /** MethodSettings autoPopulatedFields */
            autoPopulatedFields?: (string[]|null);
        }

        /** Represents a MethodSettings. */
        class MethodSettings implements IMethodSettings {

            /**
             * Constructs a new MethodSettings.
             * @param [properties] Properties to set
             */
            constructor(properties?: google.api.IMethodSettings);

            /** MethodSettings selector. */
            public selector: string;

            /** MethodSettings longRunning. */
            public longRunning?: (google.api.MethodSettings.ILongRunning|null);

            /** MethodSettings autoPopulatedFields. */
            public autoPopulatedFields: string[];

            /**
             * Creates a new MethodSettings instance using the specified properties.
             * @param [properties] Properties to set
             * @returns MethodSettings instance
             */
            public static create(properties?: google.api.IMethodSettings): google.api.MethodSettings;

            /**
             * Encodes the specified MethodSettings message. Does not implicitly {@link google.api.MethodSettings.verify|verify} messages.
             * @param message MethodSettings message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: google.api.IMethodSettings, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified MethodSettings message, length delimited. Does not implicitly {@link google.api.MethodSettings.verify|verify} messages.
             * @param message MethodSettings message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: google.api.IMethodSettings, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a MethodSettings message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns MethodSettings
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.api.MethodSettings;

            /**
             * Decodes a MethodSettings message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns MethodSettings
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.api.MethodSettings;

            /**
             * Verifies a MethodSettings message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a MethodSettings message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns MethodSettings
             */
            public static fromObject(object: { [k: string]: any }): google.api.MethodSettings;

            /**
             * Creates a plain object from a MethodSettings message. Also converts values to other types if specified.
             * @param message MethodSettings
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: google.api.MethodSettings, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this MethodSettings to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for MethodSettings
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace MethodSettings {

            /** Properties of a LongRunning. */
            interface ILongRunning {

                /** LongRunning initialPollDelay */
                initialPollDelay?: (google.protobuf.IDuration|null);

                /** LongRunning pollDelayMultiplier */
                pollDelayMultiplier?: (number|null);

                /** LongRunning maxPollDelay */
                maxPollDelay?: (google.protobuf.IDuration|null);

                /** LongRunning totalPollTimeout */
                totalPollTimeout?: (google.protobuf.IDuration|null);
            }

            /** Represents a LongRunning. */
            class LongRunning implements ILongRunning {

                /**
                 * Constructs a new LongRunning.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.api.MethodSettings.ILongRunning);

                /** LongRunning initialPollDelay. */
                public initialPollDelay?: (google.protobuf.IDuration|null);

                /** LongRunning pollDelayMultiplier. */
                public pollDelayMultiplier: number;

                /** LongRunning maxPollDelay. */
                public maxPollDelay?: (google.protobuf.IDuration|null);

                /** LongRunning totalPollTimeout. */
                public totalPollTimeout?: (google.protobuf.IDuration|null);

                /**
                 * Creates a new LongRunning instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns LongRunning instance
                 */
                public static create(properties?: google.api.MethodSettings.ILongRunning): google.api.MethodSettings.LongRunning;

                /**
                 * Encodes the specified LongRunning message. Does not implicitly {@link google.api.MethodSettings.LongRunning.verify|verify} messages.
                 * @param message LongRunning message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.api.MethodSettings.ILongRunning, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified LongRunning message, length delimited. Does not implicitly {@link google.api.MethodSettings.LongRunning.verify|verify} messages.
                 * @param message LongRunning message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.api.MethodSettings.ILongRunning, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a LongRunning message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns LongRunning
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.api.MethodSettings.LongRunning;

                /**
                 * Decodes a LongRunning message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns LongRunning
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.api.MethodSettings.LongRunning;

                /**
                 * Verifies a LongRunning message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a LongRunning message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns LongRunning
                 */
                public static fromObject(object: { [k: string]: any }): google.api.MethodSettings.LongRunning;

                /**
                 * Creates a plain object from a LongRunning message. Also converts values to other types if specified.
                 * @param message LongRunning
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.api.MethodSettings.LongRunning, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this LongRunning to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for LongRunning
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }
        }

        /** ClientLibraryOrganization enum. */
        enum ClientLibraryOrganization {
            CLIENT_LIBRARY_ORGANIZATION_UNSPECIFIED = 0,
            CLOUD = 1,
            ADS = 2,
            PHOTOS = 3,
            STREET_VIEW = 4,
            SHOPPING = 5,
            GEO = 6,
            GENERATIVE_AI = 7
        }

        /** ClientLibraryDestination enum. */
        enum ClientLibraryDestination {
            CLIENT_LIBRARY_DESTINATION_UNSPECIFIED = 0,
            GITHUB = 10,
            PACKAGE_MANAGER = 20
        }

        /** Properties of a SelectiveGapicGeneration. */
        interface ISelectiveGapicGeneration {

            /** SelectiveGapicGeneration methods */
            methods?: (string[]|null);

            /** SelectiveGapicGeneration generateOmittedAsInternal */
            generateOmittedAsInternal?: (boolean|null);
        }

        /** Represents a SelectiveGapicGeneration. */
        class SelectiveGapicGeneration implements ISelectiveGapicGeneration {

            /**
             * Constructs a new SelectiveGapicGeneration.
             * @param [properties] Properties to set
             */
            constructor(properties?: google.api.ISelectiveGapicGeneration);

            /** SelectiveGapicGeneration methods. */
            public methods: string[];

            /** SelectiveGapicGeneration generateOmittedAsInternal. */
            public generateOmittedAsInternal: boolean;

            /**
             * Creates a new SelectiveGapicGeneration instance using the specified properties.
             * @param [properties] Properties to set
             * @returns SelectiveGapicGeneration instance
             */
            public static create(properties?: google.api.ISelectiveGapicGeneration): google.api.SelectiveGapicGeneration;

            /**
             * Encodes the specified SelectiveGapicGeneration message. Does not implicitly {@link google.api.SelectiveGapicGeneration.verify|verify} messages.
             * @param message SelectiveGapicGeneration message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: google.api.ISelectiveGapicGeneration, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified SelectiveGapicGeneration message, length delimited. Does not implicitly {@link google.api.SelectiveGapicGeneration.verify|verify} messages.
             * @param message SelectiveGapicGeneration message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: google.api.ISelectiveGapicGeneration, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a SelectiveGapicGeneration message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns SelectiveGapicGeneration
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.api.SelectiveGapicGeneration;

            /**
             * Decodes a SelectiveGapicGeneration message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns SelectiveGapicGeneration
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.api.SelectiveGapicGeneration;

            /**
             * Verifies a SelectiveGapicGeneration message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a SelectiveGapicGeneration message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns SelectiveGapicGeneration
             */
            public static fromObject(object: { [k: string]: any }): google.api.SelectiveGapicGeneration;

            /**
             * Creates a plain object from a SelectiveGapicGeneration message. Also converts values to other types if specified.
             * @param message SelectiveGapicGeneration
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: google.api.SelectiveGapicGeneration, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this SelectiveGapicGeneration to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for SelectiveGapicGeneration
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** LaunchStage enum. */
        enum LaunchStage {
            LAUNCH_STAGE_UNSPECIFIED = 0,
            UNIMPLEMENTED = 6,
            PRELAUNCH = 7,
            EARLY_ACCESS = 1,
            ALPHA = 2,
            BETA = 3,
            GA = 4,
            DEPRECATED = 5
        }

        /** FieldBehavior enum. */
        enum FieldBehavior {
            FIELD_BEHAVIOR_UNSPECIFIED = 0,
            OPTIONAL = 1,
            REQUIRED = 2,
            OUTPUT_ONLY = 3,
            INPUT_ONLY = 4,
            IMMUTABLE = 5,
            UNORDERED_LIST = 6,
            NON_EMPTY_DEFAULT = 7,
            IDENTIFIER = 8
        }

        /** Properties of a FieldInfo. */
        interface IFieldInfo {

            /** FieldInfo format */
            format?: (google.api.FieldInfo.Format|keyof typeof google.api.FieldInfo.Format|null);

            /** FieldInfo referencedTypes */
            referencedTypes?: (google.api.ITypeReference[]|null);
        }

        /** Represents a FieldInfo. */
        class FieldInfo implements IFieldInfo {

            /**
             * Constructs a new FieldInfo.
             * @param [properties] Properties to set
             */
            constructor(properties?: google.api.IFieldInfo);

            /** FieldInfo format. */
            public format: (google.api.FieldInfo.Format|keyof typeof google.api.FieldInfo.Format);

            /** FieldInfo referencedTypes. */
            public referencedTypes: google.api.ITypeReference[];

            /**
             * Creates a new FieldInfo instance using the specified properties.
             * @param [properties] Properties to set
             * @returns FieldInfo instance
             */
            public static create(properties?: google.api.IFieldInfo): google.api.FieldInfo;

            /**
             * Encodes the specified FieldInfo message. Does not implicitly {@link google.api.FieldInfo.verify|verify} messages.
             * @param message FieldInfo message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: google.api.IFieldInfo, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified FieldInfo message, length delimited. Does not implicitly {@link google.api.FieldInfo.verify|verify} messages.
             * @param message FieldInfo message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: google.api.IFieldInfo, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a FieldInfo message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns FieldInfo
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.api.FieldInfo;

            /**
             * Decodes a FieldInfo message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns FieldInfo
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.api.FieldInfo;

            /**
             * Verifies a FieldInfo message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a FieldInfo message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns FieldInfo
             */
            public static fromObject(object: { [k: string]: any }): google.api.FieldInfo;

            /**
             * Creates a plain object from a FieldInfo message. Also converts values to other types if specified.
             * @param message FieldInfo
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: google.api.FieldInfo, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this FieldInfo to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for FieldInfo
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace FieldInfo {

            /** Format enum. */
            enum Format {
                FORMAT_UNSPECIFIED = 0,
                UUID4 = 1,
                IPV4 = 2,
                IPV6 = 3,
                IPV4_OR_IPV6 = 4
            }
        }

        /** Properties of a TypeReference. */
        interface ITypeReference {

            /** TypeReference typeName */
            typeName?: (string|null);
        }

        /** Represents a TypeReference. */
        class TypeReference implements ITypeReference {

            /**
             * Constructs a new TypeReference.
             * @param [properties] Properties to set
             */
            constructor(properties?: google.api.ITypeReference);

            /** TypeReference typeName. */
            public typeName: string;

            /**
             * Creates a new TypeReference instance using the specified properties.
             * @param [properties] Properties to set
             * @returns TypeReference instance
             */
            public static create(properties?: google.api.ITypeReference): google.api.TypeReference;

            /**
             * Encodes the specified TypeReference message. Does not implicitly {@link google.api.TypeReference.verify|verify} messages.
             * @param message TypeReference message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: google.api.ITypeReference, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified TypeReference message, length delimited. Does not implicitly {@link google.api.TypeReference.verify|verify} messages.
             * @param message TypeReference message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: google.api.ITypeReference, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a TypeReference message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns TypeReference
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.api.TypeReference;

            /**
             * Decodes a TypeReference message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns TypeReference
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.api.TypeReference;

            /**
             * Verifies a TypeReference message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a TypeReference message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns TypeReference
             */
            public static fromObject(object: { [k: string]: any }): google.api.TypeReference;

            /**
             * Creates a plain object from a TypeReference message. Also converts values to other types if specified.
             * @param message TypeReference
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: google.api.TypeReference, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this TypeReference to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for TypeReference
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a ResourceDescriptor. */
        interface IResourceDescriptor {

            /** ResourceDescriptor type */
            type?: (string|null);

            /** ResourceDescriptor pattern */
            pattern?: (string[]|null);

            /** ResourceDescriptor nameField */
            nameField?: (string|null);

            /** ResourceDescriptor history */
            history?: (google.api.ResourceDescriptor.History|keyof typeof google.api.ResourceDescriptor.History|null);

            /** ResourceDescriptor plural */
            plural?: (string|null);

            /** ResourceDescriptor singular */
            singular?: (string|null);

            /** ResourceDescriptor style */
            style?: (google.api.ResourceDescriptor.Style[]|null);
        }

        /** Represents a ResourceDescriptor. */
        class ResourceDescriptor implements IResourceDescriptor {

            /**
             * Constructs a new ResourceDescriptor.
             * @param [properties] Properties to set
             */
            constructor(properties?: google.api.IResourceDescriptor);

            /** ResourceDescriptor type. */
            public type: string;

            /** ResourceDescriptor pattern. */
            public pattern: string[];

            /** ResourceDescriptor nameField. */
            public nameField: string;

            /** ResourceDescriptor history. */
            public history: (google.api.ResourceDescriptor.History|keyof typeof google.api.ResourceDescriptor.History);

            /** ResourceDescriptor plural. */
            public plural: string;

            /** ResourceDescriptor singular. */
            public singular: string;

            /** ResourceDescriptor style. */
            public style: google.api.ResourceDescriptor.Style[];

            /**
             * Creates a new ResourceDescriptor instance using the specified properties.
             * @param [properties] Properties to set
             * @returns ResourceDescriptor instance
             */
            public static create(properties?: google.api.IResourceDescriptor): google.api.ResourceDescriptor;

            /**
             * Encodes the specified ResourceDescriptor message. Does not implicitly {@link google.api.ResourceDescriptor.verify|verify} messages.
             * @param message ResourceDescriptor message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: google.api.IResourceDescriptor, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified ResourceDescriptor message, length delimited. Does not implicitly {@link google.api.ResourceDescriptor.verify|verify} messages.
             * @param message ResourceDescriptor message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: google.api.IResourceDescriptor, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a ResourceDescriptor message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns ResourceDescriptor
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.api.ResourceDescriptor;

            /**
             * Decodes a ResourceDescriptor message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns ResourceDescriptor
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.api.ResourceDescriptor;

            /**
             * Verifies a ResourceDescriptor message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a ResourceDescriptor message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns ResourceDescriptor
             */
            public static fromObject(object: { [k: string]: any }): google.api.ResourceDescriptor;

            /**
             * Creates a plain object from a ResourceDescriptor message. Also converts values to other types if specified.
             * @param message ResourceDescriptor
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: google.api.ResourceDescriptor, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this ResourceDescriptor to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for ResourceDescriptor
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace ResourceDescriptor {

            /** History enum. */
            enum History {
                HISTORY_UNSPECIFIED = 0,
                ORIGINALLY_SINGLE_PATTERN = 1,
                FUTURE_MULTI_PATTERN = 2
            }

            /** Style enum. */
            enum Style {
                STYLE_UNSPECIFIED = 0,
                DECLARATIVE_FRIENDLY = 1
            }
        }

        /** Properties of a ResourceReference. */
        interface IResourceReference {

            /** ResourceReference type */
            type?: (string|null);

            /** ResourceReference childType */
            childType?: (string|null);
        }

        /** Represents a ResourceReference. */
        class ResourceReference implements IResourceReference {

            /**
             * Constructs a new ResourceReference.
             * @param [properties] Properties to set
             */
            constructor(properties?: google.api.IResourceReference);

            /** ResourceReference type. */
            public type: string;

            /** ResourceReference childType. */
            public childType: string;

            /**
             * Creates a new ResourceReference instance using the specified properties.
             * @param [properties] Properties to set
             * @returns ResourceReference instance
             */
            public static create(properties?: google.api.IResourceReference): google.api.ResourceReference;

            /**
             * Encodes the specified ResourceReference message. Does not implicitly {@link google.api.ResourceReference.verify|verify} messages.
             * @param message ResourceReference message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: google.api.IResourceReference, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified ResourceReference message, length delimited. Does not implicitly {@link google.api.ResourceReference.verify|verify} messages.
             * @param message ResourceReference message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: google.api.IResourceReference, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a ResourceReference message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns ResourceReference
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.api.ResourceReference;

            /**
             * Decodes a ResourceReference message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns ResourceReference
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.api.ResourceReference;

            /**
             * Verifies a ResourceReference message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a ResourceReference message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns ResourceReference
             */
            public static fromObject(object: { [k: string]: any }): google.api.ResourceReference;

            /**
             * Creates a plain object from a ResourceReference message. Also converts values to other types if specified.
             * @param message ResourceReference
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: google.api.ResourceReference, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this ResourceReference to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for ResourceReference
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a RoutingRule. */
        interface IRoutingRule {

            /** RoutingRule routingParameters */
            routingParameters?: (google.api.IRoutingParameter[]|null);
        }

        /** Represents a RoutingRule. */
        class RoutingRule implements IRoutingRule {

            /**
             * Constructs a new RoutingRule.
             * @param [properties] Properties to set
             */
            constructor(properties?: google.api.IRoutingRule);

            /** RoutingRule routingParameters. */
            public routingParameters: google.api.IRoutingParameter[];

            /**
             * Creates a new RoutingRule instance using the specified properties.
             * @param [properties] Properties to set
             * @returns RoutingRule instance
             */
            public static create(properties?: google.api.IRoutingRule): google.api.RoutingRule;

            /**
             * Encodes the specified RoutingRule message. Does not implicitly {@link google.api.RoutingRule.verify|verify} messages.
             * @param message RoutingRule message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: google.api.IRoutingRule, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified RoutingRule message, length delimited. Does not implicitly {@link google.api.RoutingRule.verify|verify} messages.
             * @param message RoutingRule message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: google.api.IRoutingRule, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a RoutingRule message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns RoutingRule
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.api.RoutingRule;

            /**
             * Decodes a RoutingRule message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns RoutingRule
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.api.RoutingRule;

            /**
             * Verifies a RoutingRule message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a RoutingRule message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns RoutingRule
             */
            public static fromObject(object: { [k: string]: any }): google.api.RoutingRule;

            /**
             * Creates a plain object from a RoutingRule message. Also converts values to other types if specified.
             * @param message RoutingRule
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: google.api.RoutingRule, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this RoutingRule to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for RoutingRule
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a RoutingParameter. */
        interface IRoutingParameter {

            /** RoutingParameter field */
            field?: (string|null);

            /** RoutingParameter pathTemplate */
            pathTemplate?: (string|null);
        }

        /** Represents a RoutingParameter. */
        class RoutingParameter implements IRoutingParameter {

            /**
             * Constructs a new RoutingParameter.
             * @param [properties] Properties to set
             */
            constructor(properties?: google.api.IRoutingParameter);

            /** RoutingParameter field. */
            public field: string;

            /** RoutingParameter pathTemplate. */
            public pathTemplate: string;

            /**
             * Creates a new RoutingParameter instance using the specified properties.
             * @param [properties] Properties to set
             * @returns RoutingParameter instance
             */
            public static create(properties?: google.api.IRoutingParameter): google.api.RoutingParameter;

            /**
             * Encodes the specified RoutingParameter message. Does not implicitly {@link google.api.RoutingParameter.verify|verify} messages.
             * @param message RoutingParameter message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: google.api.IRoutingParameter, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified RoutingParameter message, length delimited. Does not implicitly {@link google.api.RoutingParameter.verify|verify} messages.
             * @param message RoutingParameter message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: google.api.IRoutingParameter, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a RoutingParameter message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns RoutingParameter
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.api.RoutingParameter;

            /**
             * Decodes a RoutingParameter message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns RoutingParameter
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.api.RoutingParameter;

            /**
             * Verifies a RoutingParameter message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a RoutingParameter message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns RoutingParameter
             */
            public static fromObject(object: { [k: string]: any }): google.api.RoutingParameter;

            /**
             * Creates a plain object from a RoutingParameter message. Also converts values to other types if specified.
             * @param message RoutingParameter
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: google.api.RoutingParameter, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this RoutingParameter to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for RoutingParameter
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }
    }

    /** Namespace protobuf. */
    namespace protobuf {

        /** Properties of a FileDescriptorSet. */
        interface IFileDescriptorSet {

            /** FileDescriptorSet file */
            file?: (google.protobuf.IFileDescriptorProto[]|null);
        }

        /** Represents a FileDescriptorSet. */
        class FileDescriptorSet implements IFileDescriptorSet {

            /**
             * Constructs a new FileDescriptorSet.
             * @param [properties] Properties to set
             */
            constructor(properties?: google.protobuf.IFileDescriptorSet);

            /** FileDescriptorSet file. */
            public file: google.protobuf.IFileDescriptorProto[];

            /**
             * Creates a new FileDescriptorSet instance using the specified properties.
             * @param [properties] Properties to set
             * @returns FileDescriptorSet instance
             */
            public static create(properties?: google.protobuf.IFileDescriptorSet): google.protobuf.FileDescriptorSet;

            /**
             * Encodes the specified FileDescriptorSet message. Does not implicitly {@link google.protobuf.FileDescriptorSet.verify|verify} messages.
             * @param message FileDescriptorSet message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: google.protobuf.IFileDescriptorSet, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified FileDescriptorSet message, length delimited. Does not implicitly {@link google.protobuf.FileDescriptorSet.verify|verify} messages.
             * @param message FileDescriptorSet message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: google.protobuf.IFileDescriptorSet, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a FileDescriptorSet message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns FileDescriptorSet
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.FileDescriptorSet;

            /**
             * Decodes a FileDescriptorSet message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns FileDescriptorSet
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.FileDescriptorSet;

            /**
             * Verifies a FileDescriptorSet message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a FileDescriptorSet message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns FileDescriptorSet
             */
            public static fromObject(object: { [k: string]: any }): google.protobuf.FileDescriptorSet;

            /**
             * Creates a plain object from a FileDescriptorSet message. Also converts values to other types if specified.
             * @param message FileDescriptorSet
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: google.protobuf.FileDescriptorSet, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this FileDescriptorSet to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for FileDescriptorSet
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Edition enum. */
        enum Edition {
            EDITION_UNKNOWN = 0,
            EDITION_LEGACY = 900,
            EDITION_PROTO2 = 998,
            EDITION_PROTO3 = 999,
            EDITION_2023 = 1000,
            EDITION_2024 = 1001,
            EDITION_1_TEST_ONLY = 1,
            EDITION_2_TEST_ONLY = 2,
            EDITION_99997_TEST_ONLY = 99997,
            EDITION_99998_TEST_ONLY = 99998,
            EDITION_99999_TEST_ONLY = 99999,
            EDITION_MAX = 2147483647
        }

        /** Properties of a FileDescriptorProto. */
        interface IFileDescriptorProto {

            /** FileDescriptorProto name */
            name?: (string|null);

            /** FileDescriptorProto package */
            "package"?: (string|null);

            /** FileDescriptorProto dependency */
            dependency?: (string[]|null);

            /** FileDescriptorProto publicDependency */
            publicDependency?: (number[]|null);

            /** FileDescriptorProto weakDependency */
            weakDependency?: (number[]|null);

            /** FileDescriptorProto optionDependency */
            optionDependency?: (string[]|null);

            /** FileDescriptorProto messageType */
            messageType?: (google.protobuf.IDescriptorProto[]|null);

            /** FileDescriptorProto enumType */
            enumType?: (google.protobuf.IEnumDescriptorProto[]|null);

            /** FileDescriptorProto service */
            service?: (google.protobuf.IServiceDescriptorProto[]|null);

            /** FileDescriptorProto extension */
            extension?: (google.protobuf.IFieldDescriptorProto[]|null);

            /** FileDescriptorProto options */
            options?: (google.protobuf.IFileOptions|null);

            /** FileDescriptorProto sourceCodeInfo */
            sourceCodeInfo?: (google.protobuf.ISourceCodeInfo|null);

            /** FileDescriptorProto syntax */
            syntax?: (string|null);

            /** FileDescriptorProto edition */
            edition?: (google.protobuf.Edition|keyof typeof google.protobuf.Edition|null);
        }

        /** Represents a FileDescriptorProto. */
        class FileDescriptorProto implements IFileDescriptorProto {

            /**
             * Constructs a new FileDescriptorProto.
             * @param [properties] Properties to set
             */
            constructor(properties?: google.protobuf.IFileDescriptorProto);

            /** FileDescriptorProto name. */
            public name: string;

            /** FileDescriptorProto package. */
            public package: string;

            /** FileDescriptorProto dependency. */
            public dependency: string[];

            /** FileDescriptorProto publicDependency. */
            public publicDependency: number[];

            /** FileDescriptorProto weakDependency. */
            public weakDependency: number[];

            /** FileDescriptorProto optionDependency. */
            public optionDependency: string[];

            /** FileDescriptorProto messageType. */
            public messageType: google.protobuf.IDescriptorProto[];

            /** FileDescriptorProto enumType. */
            public enumType: google.protobuf.IEnumDescriptorProto[];

            /** FileDescriptorProto service. */
            public service: google.protobuf.IServiceDescriptorProto[];

            /** FileDescriptorProto extension. */
            public extension: google.protobuf.IFieldDescriptorProto[];

            /** FileDescriptorProto options. */
            public options?: (google.protobuf.IFileOptions|null);

            /** FileDescriptorProto sourceCodeInfo. */
            public sourceCodeInfo?: (google.protobuf.ISourceCodeInfo|null);

            /** FileDescriptorProto syntax. */
            public syntax: string;

            /** FileDescriptorProto edition. */
            public edition: (google.protobuf.Edition|keyof typeof google.protobuf.Edition);

            /**
             * Creates a new FileDescriptorProto instance using the specified properties.
             * @param [properties] Properties to set
             * @returns FileDescriptorProto instance
             */
            public static create(properties?: google.protobuf.IFileDescriptorProto): google.protobuf.FileDescriptorProto;

            /**
             * Encodes the specified FileDescriptorProto message. Does not implicitly {@link google.protobuf.FileDescriptorProto.verify|verify} messages.
             * @param message FileDescriptorProto message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: google.protobuf.IFileDescriptorProto, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified FileDescriptorProto message, length delimited. Does not implicitly {@link google.protobuf.FileDescriptorProto.verify|verify} messages.
             * @param message FileDescriptorProto message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: google.protobuf.IFileDescriptorProto, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a FileDescriptorProto message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns FileDescriptorProto
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.FileDescriptorProto;

            /**
             * Decodes a FileDescriptorProto message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns FileDescriptorProto
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.FileDescriptorProto;

            /**
             * Verifies a FileDescriptorProto message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a FileDescriptorProto message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns FileDescriptorProto
             */
            public static fromObject(object: { [k: string]: any }): google.protobuf.FileDescriptorProto;

            /**
             * Creates a plain object from a FileDescriptorProto message. Also converts values to other types if specified.
             * @param message FileDescriptorProto
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: google.protobuf.FileDescriptorProto, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this FileDescriptorProto to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for FileDescriptorProto
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a DescriptorProto. */
        interface IDescriptorProto {

            /** DescriptorProto name */
            name?: (string|null);

            /** DescriptorProto field */
            field?: (google.protobuf.IFieldDescriptorProto[]|null);

            /** DescriptorProto extension */
            extension?: (google.protobuf.IFieldDescriptorProto[]|null);

            /** DescriptorProto nestedType */
            nestedType?: (google.protobuf.IDescriptorProto[]|null);

            /** DescriptorProto enumType */
            enumType?: (google.protobuf.IEnumDescriptorProto[]|null);

            /** DescriptorProto extensionRange */
            extensionRange?: (google.protobuf.DescriptorProto.IExtensionRange[]|null);

            /** DescriptorProto oneofDecl */
            oneofDecl?: (google.protobuf.IOneofDescriptorProto[]|null);

            /** DescriptorProto options */
            options?: (google.protobuf.IMessageOptions|null);

            /** DescriptorProto reservedRange */
            reservedRange?: (google.protobuf.DescriptorProto.IReservedRange[]|null);

            /** DescriptorProto reservedName */
            reservedName?: (string[]|null);

            /** DescriptorProto visibility */
            visibility?: (google.protobuf.SymbolVisibility|keyof typeof google.protobuf.SymbolVisibility|null);
        }

        /** Represents a DescriptorProto. */
        class DescriptorProto implements IDescriptorProto {

            /**
             * Constructs a new DescriptorProto.
             * @param [properties] Properties to set
             */
            constructor(properties?: google.protobuf.IDescriptorProto);

            /** DescriptorProto name. */
            public name: string;

            /** DescriptorProto field. */
            public field: google.protobuf.IFieldDescriptorProto[];

            /** DescriptorProto extension. */
            public extension: google.protobuf.IFieldDescriptorProto[];

            /** DescriptorProto nestedType. */
            public nestedType: google.protobuf.IDescriptorProto[];

            /** DescriptorProto enumType. */
            public enumType: google.protobuf.IEnumDescriptorProto[];

            /** DescriptorProto extensionRange. */
            public extensionRange: google.protobuf.DescriptorProto.IExtensionRange[];

            /** DescriptorProto oneofDecl. */
            public oneofDecl: google.protobuf.IOneofDescriptorProto[];

            /** DescriptorProto options. */
            public options?: (google.protobuf.IMessageOptions|null);

            /** DescriptorProto reservedRange. */
            public reservedRange: google.protobuf.DescriptorProto.IReservedRange[];

            /** DescriptorProto reservedName. */
            public reservedName: string[];

            /** DescriptorProto visibility. */
            public visibility: (google.protobuf.SymbolVisibility|keyof typeof google.protobuf.SymbolVisibility);

            /**
             * Creates a new DescriptorProto instance using the specified properties.
             * @param [properties] Properties to set
             * @returns DescriptorProto instance
             */
            public static create(properties?: google.protobuf.IDescriptorProto): google.protobuf.DescriptorProto;

            /**
             * Encodes the specified DescriptorProto message. Does not implicitly {@link google.protobuf.DescriptorProto.verify|verify} messages.
             * @param message DescriptorProto message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: google.protobuf.IDescriptorProto, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified DescriptorProto message, length delimited. Does not implicitly {@link google.protobuf.DescriptorProto.verify|verify} messages.
             * @param message DescriptorProto message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: google.protobuf.IDescriptorProto, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a DescriptorProto message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns DescriptorProto
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.DescriptorProto;

            /**
             * Decodes a DescriptorProto message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns DescriptorProto
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.DescriptorProto;

            /**
             * Verifies a DescriptorProto message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a DescriptorProto message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns DescriptorProto
             */
            public static fromObject(object: { [k: string]: any }): google.protobuf.DescriptorProto;

            /**
             * Creates a plain object from a DescriptorProto message. Also converts values to other types if specified.
             * @param message DescriptorProto
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: google.protobuf.DescriptorProto, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this DescriptorProto to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for DescriptorProto
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace DescriptorProto {

            /** Properties of an ExtensionRange. */
            interface IExtensionRange {

                /** ExtensionRange start */
                start?: (number|null);

                /** ExtensionRange end */
                end?: (number|null);

                /** ExtensionRange options */
                options?: (google.protobuf.IExtensionRangeOptions|null);
            }

            /** Represents an ExtensionRange. */
            class ExtensionRange implements IExtensionRange {

                /**
                 * Constructs a new ExtensionRange.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.protobuf.DescriptorProto.IExtensionRange);

                /** ExtensionRange start. */
                public start: number;

                /** ExtensionRange end. */
                public end: number;

                /** ExtensionRange options. */
                public options?: (google.protobuf.IExtensionRangeOptions|null);

                /**
                 * Creates a new ExtensionRange instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns ExtensionRange instance
                 */
                public static create(properties?: google.protobuf.DescriptorProto.IExtensionRange): google.protobuf.DescriptorProto.ExtensionRange;

                /**
                 * Encodes the specified ExtensionRange message. Does not implicitly {@link google.protobuf.DescriptorProto.ExtensionRange.verify|verify} messages.
                 * @param message ExtensionRange message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.protobuf.DescriptorProto.IExtensionRange, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified ExtensionRange message, length delimited. Does not implicitly {@link google.protobuf.DescriptorProto.ExtensionRange.verify|verify} messages.
                 * @param message ExtensionRange message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.protobuf.DescriptorProto.IExtensionRange, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes an ExtensionRange message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns ExtensionRange
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.DescriptorProto.ExtensionRange;

                /**
                 * Decodes an ExtensionRange message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns ExtensionRange
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.DescriptorProto.ExtensionRange;

                /**
                 * Verifies an ExtensionRange message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates an ExtensionRange message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns ExtensionRange
                 */
                public static fromObject(object: { [k: string]: any }): google.protobuf.DescriptorProto.ExtensionRange;

                /**
                 * Creates a plain object from an ExtensionRange message. Also converts values to other types if specified.
                 * @param message ExtensionRange
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.protobuf.DescriptorProto.ExtensionRange, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this ExtensionRange to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for ExtensionRange
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a ReservedRange. */
            interface IReservedRange {

                /** ReservedRange start */
                start?: (number|null);

                /** ReservedRange end */
                end?: (number|null);
            }

            /** Represents a ReservedRange. */
            class ReservedRange implements IReservedRange {

                /**
                 * Constructs a new ReservedRange.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.protobuf.DescriptorProto.IReservedRange);

                /** ReservedRange start. */
                public start: number;

                /** ReservedRange end. */
                public end: number;

                /**
                 * Creates a new ReservedRange instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns ReservedRange instance
                 */
                public static create(properties?: google.protobuf.DescriptorProto.IReservedRange): google.protobuf.DescriptorProto.ReservedRange;

                /**
                 * Encodes the specified ReservedRange message. Does not implicitly {@link google.protobuf.DescriptorProto.ReservedRange.verify|verify} messages.
                 * @param message ReservedRange message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.protobuf.DescriptorProto.IReservedRange, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified ReservedRange message, length delimited. Does not implicitly {@link google.protobuf.DescriptorProto.ReservedRange.verify|verify} messages.
                 * @param message ReservedRange message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.protobuf.DescriptorProto.IReservedRange, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a ReservedRange message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns ReservedRange
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.DescriptorProto.ReservedRange;

                /**
                 * Decodes a ReservedRange message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns ReservedRange
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.DescriptorProto.ReservedRange;

                /**
                 * Verifies a ReservedRange message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a ReservedRange message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns ReservedRange
                 */
                public static fromObject(object: { [k: string]: any }): google.protobuf.DescriptorProto.ReservedRange;

                /**
                 * Creates a plain object from a ReservedRange message. Also converts values to other types if specified.
                 * @param message ReservedRange
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.protobuf.DescriptorProto.ReservedRange, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this ReservedRange to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for ReservedRange
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }
        }

        /** Properties of an ExtensionRangeOptions. */
        interface IExtensionRangeOptions {

            /** ExtensionRangeOptions uninterpretedOption */
            uninterpretedOption?: (google.protobuf.IUninterpretedOption[]|null);

            /** ExtensionRangeOptions declaration */
            declaration?: (google.protobuf.ExtensionRangeOptions.IDeclaration[]|null);

            /** ExtensionRangeOptions features */
            features?: (google.protobuf.IFeatureSet|null);

            /** ExtensionRangeOptions verification */
            verification?: (google.protobuf.ExtensionRangeOptions.VerificationState|keyof typeof google.protobuf.ExtensionRangeOptions.VerificationState|null);
        }

        /** Represents an ExtensionRangeOptions. */
        class ExtensionRangeOptions implements IExtensionRangeOptions {

            /**
             * Constructs a new ExtensionRangeOptions.
             * @param [properties] Properties to set
             */
            constructor(properties?: google.protobuf.IExtensionRangeOptions);

            /** ExtensionRangeOptions uninterpretedOption. */
            public uninterpretedOption: google.protobuf.IUninterpretedOption[];

            /** ExtensionRangeOptions declaration. */
            public declaration: google.protobuf.ExtensionRangeOptions.IDeclaration[];

            /** ExtensionRangeOptions features. */
            public features?: (google.protobuf.IFeatureSet|null);

            /** ExtensionRangeOptions verification. */
            public verification: (google.protobuf.ExtensionRangeOptions.VerificationState|keyof typeof google.protobuf.ExtensionRangeOptions.VerificationState);

            /**
             * Creates a new ExtensionRangeOptions instance using the specified properties.
             * @param [properties] Properties to set
             * @returns ExtensionRangeOptions instance
             */
            public static create(properties?: google.protobuf.IExtensionRangeOptions): google.protobuf.ExtensionRangeOptions;

            /**
             * Encodes the specified ExtensionRangeOptions message. Does not implicitly {@link google.protobuf.ExtensionRangeOptions.verify|verify} messages.
             * @param message ExtensionRangeOptions message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: google.protobuf.IExtensionRangeOptions, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified ExtensionRangeOptions message, length delimited. Does not implicitly {@link google.protobuf.ExtensionRangeOptions.verify|verify} messages.
             * @param message ExtensionRangeOptions message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: google.protobuf.IExtensionRangeOptions, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes an ExtensionRangeOptions message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns ExtensionRangeOptions
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.ExtensionRangeOptions;

            /**
             * Decodes an ExtensionRangeOptions message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns ExtensionRangeOptions
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.ExtensionRangeOptions;

            /**
             * Verifies an ExtensionRangeOptions message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates an ExtensionRangeOptions message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns ExtensionRangeOptions
             */
            public static fromObject(object: { [k: string]: any }): google.protobuf.ExtensionRangeOptions;

            /**
             * Creates a plain object from an ExtensionRangeOptions message. Also converts values to other types if specified.
             * @param message ExtensionRangeOptions
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: google.protobuf.ExtensionRangeOptions, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this ExtensionRangeOptions to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for ExtensionRangeOptions
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace ExtensionRangeOptions {

            /** Properties of a Declaration. */
            interface IDeclaration {

                /** Declaration number */
                number?: (number|null);

                /** Declaration fullName */
                fullName?: (string|null);

                /** Declaration type */
                type?: (string|null);

                /** Declaration reserved */
                reserved?: (boolean|null);

                /** Declaration repeated */
                repeated?: (boolean|null);
            }

            /** Represents a Declaration. */
            class Declaration implements IDeclaration {

                /**
                 * Constructs a new Declaration.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.protobuf.ExtensionRangeOptions.IDeclaration);

                /** Declaration number. */
                public number: number;

                /** Declaration fullName. */
                public fullName: string;

                /** Declaration type. */
                public type: string;

                /** Declaration reserved. */
                public reserved: boolean;

                /** Declaration repeated. */
                public repeated: boolean;

                /**
                 * Creates a new Declaration instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns Declaration instance
                 */
                public static create(properties?: google.protobuf.ExtensionRangeOptions.IDeclaration): google.protobuf.ExtensionRangeOptions.Declaration;

                /**
                 * Encodes the specified Declaration message. Does not implicitly {@link google.protobuf.ExtensionRangeOptions.Declaration.verify|verify} messages.
                 * @param message Declaration message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.protobuf.ExtensionRangeOptions.IDeclaration, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified Declaration message, length delimited. Does not implicitly {@link google.protobuf.ExtensionRangeOptions.Declaration.verify|verify} messages.
                 * @param message Declaration message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.protobuf.ExtensionRangeOptions.IDeclaration, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a Declaration message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns Declaration
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.ExtensionRangeOptions.Declaration;

                /**
                 * Decodes a Declaration message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns Declaration
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.ExtensionRangeOptions.Declaration;

                /**
                 * Verifies a Declaration message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a Declaration message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns Declaration
                 */
                public static fromObject(object: { [k: string]: any }): google.protobuf.ExtensionRangeOptions.Declaration;

                /**
                 * Creates a plain object from a Declaration message. Also converts values to other types if specified.
                 * @param message Declaration
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.protobuf.ExtensionRangeOptions.Declaration, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this Declaration to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for Declaration
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** VerificationState enum. */
            enum VerificationState {
                DECLARATION = 0,
                UNVERIFIED = 1
            }
        }

        /** Properties of a FieldDescriptorProto. */
        interface IFieldDescriptorProto {

            /** FieldDescriptorProto name */
            name?: (string|null);

            /** FieldDescriptorProto number */
            number?: (number|null);

            /** FieldDescriptorProto label */
            label?: (google.protobuf.FieldDescriptorProto.Label|keyof typeof google.protobuf.FieldDescriptorProto.Label|null);

            /** FieldDescriptorProto type */
            type?: (google.protobuf.FieldDescriptorProto.Type|keyof typeof google.protobuf.FieldDescriptorProto.Type|null);

            /** FieldDescriptorProto typeName */
            typeName?: (string|null);

            /** FieldDescriptorProto extendee */
            extendee?: (string|null);

            /** FieldDescriptorProto defaultValue */
            defaultValue?: (string|null);

            /** FieldDescriptorProto oneofIndex */
            oneofIndex?: (number|null);

            /** FieldDescriptorProto jsonName */
            jsonName?: (string|null);

            /** FieldDescriptorProto options */
            options?: (google.protobuf.IFieldOptions|null);

            /** FieldDescriptorProto proto3Optional */
            proto3Optional?: (boolean|null);
        }

        /** Represents a FieldDescriptorProto. */
        class FieldDescriptorProto implements IFieldDescriptorProto {

            /**
             * Constructs a new FieldDescriptorProto.
             * @param [properties] Properties to set
             */
            constructor(properties?: google.protobuf.IFieldDescriptorProto);

            /** FieldDescriptorProto name. */
            public name: string;

            /** FieldDescriptorProto number. */
            public number: number;

            /** FieldDescriptorProto label. */
            public label: (google.protobuf.FieldDescriptorProto.Label|keyof typeof google.protobuf.FieldDescriptorProto.Label);

            /** FieldDescriptorProto type. */
            public type: (google.protobuf.FieldDescriptorProto.Type|keyof typeof google.protobuf.FieldDescriptorProto.Type);

            /** FieldDescriptorProto typeName. */
            public typeName: string;

            /** FieldDescriptorProto extendee. */
            public extendee: string;

            /** FieldDescriptorProto defaultValue. */
            public defaultValue: string;

            /** FieldDescriptorProto oneofIndex. */
            public oneofIndex: number;

            /** FieldDescriptorProto jsonName. */
            public jsonName: string;

            /** FieldDescriptorProto options. */
            public options?: (google.protobuf.IFieldOptions|null);

            /** FieldDescriptorProto proto3Optional. */
            public proto3Optional: boolean;

            /**
             * Creates a new FieldDescriptorProto instance using the specified properties.
             * @param [properties] Properties to set
             * @returns FieldDescriptorProto instance
             */
            public static create(properties?: google.protobuf.IFieldDescriptorProto): google.protobuf.FieldDescriptorProto;

            /**
             * Encodes the specified FieldDescriptorProto message. Does not implicitly {@link google.protobuf.FieldDescriptorProto.verify|verify} messages.
             * @param message FieldDescriptorProto message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: google.protobuf.IFieldDescriptorProto, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified FieldDescriptorProto message, length delimited. Does not implicitly {@link google.protobuf.FieldDescriptorProto.verify|verify} messages.
             * @param message FieldDescriptorProto message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: google.protobuf.IFieldDescriptorProto, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a FieldDescriptorProto message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns FieldDescriptorProto
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.FieldDescriptorProto;

            /**
             * Decodes a FieldDescriptorProto message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns FieldDescriptorProto
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.FieldDescriptorProto;

            /**
             * Verifies a FieldDescriptorProto message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a FieldDescriptorProto message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns FieldDescriptorProto
             */
            public static fromObject(object: { [k: string]: any }): google.protobuf.FieldDescriptorProto;

            /**
             * Creates a plain object from a FieldDescriptorProto message. Also converts values to other types if specified.
             * @param message FieldDescriptorProto
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: google.protobuf.FieldDescriptorProto, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this FieldDescriptorProto to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for FieldDescriptorProto
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace FieldDescriptorProto {

            /** Type enum. */
            enum Type {
                TYPE_DOUBLE = 1,
                TYPE_FLOAT = 2,
                TYPE_INT64 = 3,
                TYPE_UINT64 = 4,
                TYPE_INT32 = 5,
                TYPE_FIXED64 = 6,
                TYPE_FIXED32 = 7,
                TYPE_BOOL = 8,
                TYPE_STRING = 9,
                TYPE_GROUP = 10,
                TYPE_MESSAGE = 11,
                TYPE_BYTES = 12,
                TYPE_UINT32 = 13,
                TYPE_ENUM = 14,
                TYPE_SFIXED32 = 15,
                TYPE_SFIXED64 = 16,
                TYPE_SINT32 = 17,
                TYPE_SINT64 = 18
            }

            /** Label enum. */
            enum Label {
                LABEL_OPTIONAL = 1,
                LABEL_REPEATED = 3,
                LABEL_REQUIRED = 2
            }
        }

        /** Properties of an OneofDescriptorProto. */
        interface IOneofDescriptorProto {

            /** OneofDescriptorProto name */
            name?: (string|null);

            /** OneofDescriptorProto options */
            options?: (google.protobuf.IOneofOptions|null);
        }

        /** Represents an OneofDescriptorProto. */
        class OneofDescriptorProto implements IOneofDescriptorProto {

            /**
             * Constructs a new OneofDescriptorProto.
             * @param [properties] Properties to set
             */
            constructor(properties?: google.protobuf.IOneofDescriptorProto);

            /** OneofDescriptorProto name. */
            public name: string;

            /** OneofDescriptorProto options. */
            public options?: (google.protobuf.IOneofOptions|null);

            /**
             * Creates a new OneofDescriptorProto instance using the specified properties.
             * @param [properties] Properties to set
             * @returns OneofDescriptorProto instance
             */
            public static create(properties?: google.protobuf.IOneofDescriptorProto): google.protobuf.OneofDescriptorProto;

            /**
             * Encodes the specified OneofDescriptorProto message. Does not implicitly {@link google.protobuf.OneofDescriptorProto.verify|verify} messages.
             * @param message OneofDescriptorProto message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: google.protobuf.IOneofDescriptorProto, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified OneofDescriptorProto message, length delimited. Does not implicitly {@link google.protobuf.OneofDescriptorProto.verify|verify} messages.
             * @param message OneofDescriptorProto message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: google.protobuf.IOneofDescriptorProto, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes an OneofDescriptorProto message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns OneofDescriptorProto
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.OneofDescriptorProto;

            /**
             * Decodes an OneofDescriptorProto message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns OneofDescriptorProto
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.OneofDescriptorProto;

            /**
             * Verifies an OneofDescriptorProto message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates an OneofDescriptorProto message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns OneofDescriptorProto
             */
            public static fromObject(object: { [k: string]: any }): google.protobuf.OneofDescriptorProto;

            /**
             * Creates a plain object from an OneofDescriptorProto message. Also converts values to other types if specified.
             * @param message OneofDescriptorProto
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: google.protobuf.OneofDescriptorProto, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this OneofDescriptorProto to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for OneofDescriptorProto
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of an EnumDescriptorProto. */
        interface IEnumDescriptorProto {

            /** EnumDescriptorProto name */
            name?: (string|null);

            /** EnumDescriptorProto value */
            value?: (google.protobuf.IEnumValueDescriptorProto[]|null);

            /** EnumDescriptorProto options */
            options?: (google.protobuf.IEnumOptions|null);

            /** EnumDescriptorProto reservedRange */
            reservedRange?: (google.protobuf.EnumDescriptorProto.IEnumReservedRange[]|null);

            /** EnumDescriptorProto reservedName */
            reservedName?: (string[]|null);

            /** EnumDescriptorProto visibility */
            visibility?: (google.protobuf.SymbolVisibility|keyof typeof google.protobuf.SymbolVisibility|null);
        }

        /** Represents an EnumDescriptorProto. */
        class EnumDescriptorProto implements IEnumDescriptorProto {

            /**
             * Constructs a new EnumDescriptorProto.
             * @param [properties] Properties to set
             */
            constructor(properties?: google.protobuf.IEnumDescriptorProto);

            /** EnumDescriptorProto name. */
            public name: string;

            /** EnumDescriptorProto value. */
            public value: google.protobuf.IEnumValueDescriptorProto[];

            /** EnumDescriptorProto options. */
            public options?: (google.protobuf.IEnumOptions|null);

            /** EnumDescriptorProto reservedRange. */
            public reservedRange: google.protobuf.EnumDescriptorProto.IEnumReservedRange[];

            /** EnumDescriptorProto reservedName. */
            public reservedName: string[];

            /** EnumDescriptorProto visibility. */
            public visibility: (google.protobuf.SymbolVisibility|keyof typeof google.protobuf.SymbolVisibility);

            /**
             * Creates a new EnumDescriptorProto instance using the specified properties.
             * @param [properties] Properties to set
             * @returns EnumDescriptorProto instance
             */
            public static create(properties?: google.protobuf.IEnumDescriptorProto): google.protobuf.EnumDescriptorProto;

            /**
             * Encodes the specified EnumDescriptorProto message. Does not implicitly {@link google.protobuf.EnumDescriptorProto.verify|verify} messages.
             * @param message EnumDescriptorProto message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: google.protobuf.IEnumDescriptorProto, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified EnumDescriptorProto message, length delimited. Does not implicitly {@link google.protobuf.EnumDescriptorProto.verify|verify} messages.
             * @param message EnumDescriptorProto message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: google.protobuf.IEnumDescriptorProto, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes an EnumDescriptorProto message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns EnumDescriptorProto
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.EnumDescriptorProto;

            /**
             * Decodes an EnumDescriptorProto message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns EnumDescriptorProto
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.EnumDescriptorProto;

            /**
             * Verifies an EnumDescriptorProto message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates an EnumDescriptorProto message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns EnumDescriptorProto
             */
            public static fromObject(object: { [k: string]: any }): google.protobuf.EnumDescriptorProto;

            /**
             * Creates a plain object from an EnumDescriptorProto message. Also converts values to other types if specified.
             * @param message EnumDescriptorProto
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: google.protobuf.EnumDescriptorProto, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this EnumDescriptorProto to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for EnumDescriptorProto
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace EnumDescriptorProto {

            /** Properties of an EnumReservedRange. */
            interface IEnumReservedRange {

                /** EnumReservedRange start */
                start?: (number|null);

                /** EnumReservedRange end */
                end?: (number|null);
            }

            /** Represents an EnumReservedRange. */
            class EnumReservedRange implements IEnumReservedRange {

                /**
                 * Constructs a new EnumReservedRange.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.protobuf.EnumDescriptorProto.IEnumReservedRange);

                /** EnumReservedRange start. */
                public start: number;

                /** EnumReservedRange end. */
                public end: number;

                /**
                 * Creates a new EnumReservedRange instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns EnumReservedRange instance
                 */
                public static create(properties?: google.protobuf.EnumDescriptorProto.IEnumReservedRange): google.protobuf.EnumDescriptorProto.EnumReservedRange;

                /**
                 * Encodes the specified EnumReservedRange message. Does not implicitly {@link google.protobuf.EnumDescriptorProto.EnumReservedRange.verify|verify} messages.
                 * @param message EnumReservedRange message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.protobuf.EnumDescriptorProto.IEnumReservedRange, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified EnumReservedRange message, length delimited. Does not implicitly {@link google.protobuf.EnumDescriptorProto.EnumReservedRange.verify|verify} messages.
                 * @param message EnumReservedRange message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.protobuf.EnumDescriptorProto.IEnumReservedRange, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes an EnumReservedRange message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns EnumReservedRange
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.EnumDescriptorProto.EnumReservedRange;

                /**
                 * Decodes an EnumReservedRange message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns EnumReservedRange
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.EnumDescriptorProto.EnumReservedRange;

                /**
                 * Verifies an EnumReservedRange message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates an EnumReservedRange message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns EnumReservedRange
                 */
                public static fromObject(object: { [k: string]: any }): google.protobuf.EnumDescriptorProto.EnumReservedRange;

                /**
                 * Creates a plain object from an EnumReservedRange message. Also converts values to other types if specified.
                 * @param message EnumReservedRange
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.protobuf.EnumDescriptorProto.EnumReservedRange, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this EnumReservedRange to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for EnumReservedRange
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }
        }

        /** Properties of an EnumValueDescriptorProto. */
        interface IEnumValueDescriptorProto {

            /** EnumValueDescriptorProto name */
            name?: (string|null);

            /** EnumValueDescriptorProto number */
            number?: (number|null);

            /** EnumValueDescriptorProto options */
            options?: (google.protobuf.IEnumValueOptions|null);
        }

        /** Represents an EnumValueDescriptorProto. */
        class EnumValueDescriptorProto implements IEnumValueDescriptorProto {

            /**
             * Constructs a new EnumValueDescriptorProto.
             * @param [properties] Properties to set
             */
            constructor(properties?: google.protobuf.IEnumValueDescriptorProto);

            /** EnumValueDescriptorProto name. */
            public name: string;

            /** EnumValueDescriptorProto number. */
            public number: number;

            /** EnumValueDescriptorProto options. */
            public options?: (google.protobuf.IEnumValueOptions|null);

            /**
             * Creates a new EnumValueDescriptorProto instance using the specified properties.
             * @param [properties] Properties to set
             * @returns EnumValueDescriptorProto instance
             */
            public static create(properties?: google.protobuf.IEnumValueDescriptorProto): google.protobuf.EnumValueDescriptorProto;

            /**
             * Encodes the specified EnumValueDescriptorProto message. Does not implicitly {@link google.protobuf.EnumValueDescriptorProto.verify|verify} messages.
             * @param message EnumValueDescriptorProto message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: google.protobuf.IEnumValueDescriptorProto, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified EnumValueDescriptorProto message, length delimited. Does not implicitly {@link google.protobuf.EnumValueDescriptorProto.verify|verify} messages.
             * @param message EnumValueDescriptorProto message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: google.protobuf.IEnumValueDescriptorProto, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes an EnumValueDescriptorProto message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns EnumValueDescriptorProto
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.EnumValueDescriptorProto;

            /**
             * Decodes an EnumValueDescriptorProto message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns EnumValueDescriptorProto
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.EnumValueDescriptorProto;

            /**
             * Verifies an EnumValueDescriptorProto message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates an EnumValueDescriptorProto message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns EnumValueDescriptorProto
             */
            public static fromObject(object: { [k: string]: any }): google.protobuf.EnumValueDescriptorProto;

            /**
             * Creates a plain object from an EnumValueDescriptorProto message. Also converts values to other types if specified.
             * @param message EnumValueDescriptorProto
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: google.protobuf.EnumValueDescriptorProto, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this EnumValueDescriptorProto to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for EnumValueDescriptorProto
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a ServiceDescriptorProto. */
        interface IServiceDescriptorProto {

            /** ServiceDescriptorProto name */
            name?: (string|null);

            /** ServiceDescriptorProto method */
            method?: (google.protobuf.IMethodDescriptorProto[]|null);

            /** ServiceDescriptorProto options */
            options?: (google.protobuf.IServiceOptions|null);
        }

        /** Represents a ServiceDescriptorProto. */
        class ServiceDescriptorProto implements IServiceDescriptorProto {

            /**
             * Constructs a new ServiceDescriptorProto.
             * @param [properties] Properties to set
             */
            constructor(properties?: google.protobuf.IServiceDescriptorProto);

            /** ServiceDescriptorProto name. */
            public name: string;

            /** ServiceDescriptorProto method. */
            public method: google.protobuf.IMethodDescriptorProto[];

            /** ServiceDescriptorProto options. */
            public options?: (google.protobuf.IServiceOptions|null);

            /**
             * Creates a new ServiceDescriptorProto instance using the specified properties.
             * @param [properties] Properties to set
             * @returns ServiceDescriptorProto instance
             */
            public static create(properties?: google.protobuf.IServiceDescriptorProto): google.protobuf.ServiceDescriptorProto;

            /**
             * Encodes the specified ServiceDescriptorProto message. Does not implicitly {@link google.protobuf.ServiceDescriptorProto.verify|verify} messages.
             * @param message ServiceDescriptorProto message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: google.protobuf.IServiceDescriptorProto, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified ServiceDescriptorProto message, length delimited. Does not implicitly {@link google.protobuf.ServiceDescriptorProto.verify|verify} messages.
             * @param message ServiceDescriptorProto message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: google.protobuf.IServiceDescriptorProto, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a ServiceDescriptorProto message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns ServiceDescriptorProto
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.ServiceDescriptorProto;

            /**
             * Decodes a ServiceDescriptorProto message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns ServiceDescriptorProto
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.ServiceDescriptorProto;

            /**
             * Verifies a ServiceDescriptorProto message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a ServiceDescriptorProto message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns ServiceDescriptorProto
             */
            public static fromObject(object: { [k: string]: any }): google.protobuf.ServiceDescriptorProto;

            /**
             * Creates a plain object from a ServiceDescriptorProto message. Also converts values to other types if specified.
             * @param message ServiceDescriptorProto
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: google.protobuf.ServiceDescriptorProto, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this ServiceDescriptorProto to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for ServiceDescriptorProto
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a MethodDescriptorProto. */
        interface IMethodDescriptorProto {

            /** MethodDescriptorProto name */
            name?: (string|null);

            /** MethodDescriptorProto inputType */
            inputType?: (string|null);

            /** MethodDescriptorProto outputType */
            outputType?: (string|null);

            /** MethodDescriptorProto options */
            options?: (google.protobuf.IMethodOptions|null);

            /** MethodDescriptorProto clientStreaming */
            clientStreaming?: (boolean|null);

            /** MethodDescriptorProto serverStreaming */
            serverStreaming?: (boolean|null);
        }

        /** Represents a MethodDescriptorProto. */
        class MethodDescriptorProto implements IMethodDescriptorProto {

            /**
             * Constructs a new MethodDescriptorProto.
             * @param [properties] Properties to set
             */
            constructor(properties?: google.protobuf.IMethodDescriptorProto);

            /** MethodDescriptorProto name. */
            public name: string;

            /** MethodDescriptorProto inputType. */
            public inputType: string;

            /** MethodDescriptorProto outputType. */
            public outputType: string;

            /** MethodDescriptorProto options. */
            public options?: (google.protobuf.IMethodOptions|null);

            /** MethodDescriptorProto clientStreaming. */
            public clientStreaming: boolean;

            /** MethodDescriptorProto serverStreaming. */
            public serverStreaming: boolean;

            /**
             * Creates a new MethodDescriptorProto instance using the specified properties.
             * @param [properties] Properties to set
             * @returns MethodDescriptorProto instance
             */
            public static create(properties?: google.protobuf.IMethodDescriptorProto): google.protobuf.MethodDescriptorProto;

            /**
             * Encodes the specified MethodDescriptorProto message. Does not implicitly {@link google.protobuf.MethodDescriptorProto.verify|verify} messages.
             * @param message MethodDescriptorProto message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: google.protobuf.IMethodDescriptorProto, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified MethodDescriptorProto message, length delimited. Does not implicitly {@link google.protobuf.MethodDescriptorProto.verify|verify} messages.
             * @param message MethodDescriptorProto message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: google.protobuf.IMethodDescriptorProto, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a MethodDescriptorProto message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns MethodDescriptorProto
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.MethodDescriptorProto;

            /**
             * Decodes a MethodDescriptorProto message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns MethodDescriptorProto
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.MethodDescriptorProto;

            /**
             * Verifies a MethodDescriptorProto message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a MethodDescriptorProto message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns MethodDescriptorProto
             */
            public static fromObject(object: { [k: string]: any }): google.protobuf.MethodDescriptorProto;

            /**
             * Creates a plain object from a MethodDescriptorProto message. Also converts values to other types if specified.
             * @param message MethodDescriptorProto
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: google.protobuf.MethodDescriptorProto, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this MethodDescriptorProto to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for MethodDescriptorProto
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a FileOptions. */
        interface IFileOptions {

            /** FileOptions javaPackage */
            javaPackage?: (string|null);

            /** FileOptions javaOuterClassname */
            javaOuterClassname?: (string|null);

            /** FileOptions javaMultipleFiles */
            javaMultipleFiles?: (boolean|null);

            /** FileOptions javaGenerateEqualsAndHash */
            javaGenerateEqualsAndHash?: (boolean|null);

            /** FileOptions javaStringCheckUtf8 */
            javaStringCheckUtf8?: (boolean|null);

            /** FileOptions optimizeFor */
            optimizeFor?: (google.protobuf.FileOptions.OptimizeMode|keyof typeof google.protobuf.FileOptions.OptimizeMode|null);

            /** FileOptions goPackage */
            goPackage?: (string|null);

            /** FileOptions ccGenericServices */
            ccGenericServices?: (boolean|null);

            /** FileOptions javaGenericServices */
            javaGenericServices?: (boolean|null);

            /** FileOptions pyGenericServices */
            pyGenericServices?: (boolean|null);

            /** FileOptions deprecated */
            deprecated?: (boolean|null);

            /** FileOptions ccEnableArenas */
            ccEnableArenas?: (boolean|null);

            /** FileOptions objcClassPrefix */
            objcClassPrefix?: (string|null);

            /** FileOptions csharpNamespace */
            csharpNamespace?: (string|null);

            /** FileOptions swiftPrefix */
            swiftPrefix?: (string|null);

            /** FileOptions phpClassPrefix */
            phpClassPrefix?: (string|null);

            /** FileOptions phpNamespace */
            phpNamespace?: (string|null);

            /** FileOptions phpMetadataNamespace */
            phpMetadataNamespace?: (string|null);

            /** FileOptions rubyPackage */
            rubyPackage?: (string|null);

            /** FileOptions features */
            features?: (google.protobuf.IFeatureSet|null);

            /** FileOptions uninterpretedOption */
            uninterpretedOption?: (google.protobuf.IUninterpretedOption[]|null);

            /** FileOptions .google.api.resourceDefinition */
            ".google.api.resourceDefinition"?: (google.api.IResourceDescriptor[]|null);
        }

        /** Represents a FileOptions. */
        class FileOptions implements IFileOptions {

            /**
             * Constructs a new FileOptions.
             * @param [properties] Properties to set
             */
            constructor(properties?: google.protobuf.IFileOptions);

            /** FileOptions javaPackage. */
            public javaPackage: string;

            /** FileOptions javaOuterClassname. */
            public javaOuterClassname: string;

            /** FileOptions javaMultipleFiles. */
            public javaMultipleFiles: boolean;

            /** FileOptions javaGenerateEqualsAndHash. */
            public javaGenerateEqualsAndHash: boolean;

            /** FileOptions javaStringCheckUtf8. */
            public javaStringCheckUtf8: boolean;

            /** FileOptions optimizeFor. */
            public optimizeFor: (google.protobuf.FileOptions.OptimizeMode|keyof typeof google.protobuf.FileOptions.OptimizeMode);

            /** FileOptions goPackage. */
            public goPackage: string;

            /** FileOptions ccGenericServices. */
            public ccGenericServices: boolean;

            /** FileOptions javaGenericServices. */
            public javaGenericServices: boolean;

            /** FileOptions pyGenericServices. */
            public pyGenericServices: boolean;

            /** FileOptions deprecated. */
            public deprecated: boolean;

            /** FileOptions ccEnableArenas. */
            public ccEnableArenas: boolean;

            /** FileOptions objcClassPrefix. */
            public objcClassPrefix: string;

            /** FileOptions csharpNamespace. */
            public csharpNamespace: string;

            /** FileOptions swiftPrefix. */
            public swiftPrefix: string;

            /** FileOptions phpClassPrefix. */
            public phpClassPrefix: string;

            /** FileOptions phpNamespace. */
            public phpNamespace: string;

            /** FileOptions phpMetadataNamespace. */
            public phpMetadataNamespace: string;

            /** FileOptions rubyPackage. */
            public rubyPackage: string;

            /** FileOptions features. */
            public features?: (google.protobuf.IFeatureSet|null);

            /** FileOptions uninterpretedOption. */
            public uninterpretedOption: google.protobuf.IUninterpretedOption[];

            /**
             * Creates a new FileOptions instance using the specified properties.
             * @param [properties] Properties to set
             * @returns FileOptions instance
             */
            public static create(properties?: google.protobuf.IFileOptions): google.protobuf.FileOptions;

            /**
             * Encodes the specified FileOptions message. Does not implicitly {@link google.protobuf.FileOptions.verify|verify} messages.
             * @param message FileOptions message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: google.protobuf.IFileOptions, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified FileOptions message, length delimited. Does not implicitly {@link google.protobuf.FileOptions.verify|verify} messages.
             * @param message FileOptions message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: google.protobuf.IFileOptions, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a FileOptions message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns FileOptions
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.FileOptions;

            /**
             * Decodes a FileOptions message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns FileOptions
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.FileOptions;

            /**
             * Verifies a FileOptions message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a FileOptions message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns FileOptions
             */
            public static fromObject(object: { [k: string]: any }): google.protobuf.FileOptions;

            /**
             * Creates a plain object from a FileOptions message. Also converts values to other types if specified.
             * @param message FileOptions
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: google.protobuf.FileOptions, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this FileOptions to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for FileOptions
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace FileOptions {

            /** OptimizeMode enum. */
            enum OptimizeMode {
                SPEED = 1,
                CODE_SIZE = 2,
                LITE_RUNTIME = 3
            }
        }

        /** Properties of a MessageOptions. */
        interface IMessageOptions {

            /** MessageOptions messageSetWireFormat */
            messageSetWireFormat?: (boolean|null);

            /** MessageOptions noStandardDescriptorAccessor */
            noStandardDescriptorAccessor?: (boolean|null);

            /** MessageOptions deprecated */
            deprecated?: (boolean|null);

            /** MessageOptions mapEntry */
            mapEntry?: (boolean|null);

            /** MessageOptions deprecatedLegacyJsonFieldConflicts */
            deprecatedLegacyJsonFieldConflicts?: (boolean|null);

            /** MessageOptions features */
            features?: (google.protobuf.IFeatureSet|null);

            /** MessageOptions uninterpretedOption */
            uninterpretedOption?: (google.protobuf.IUninterpretedOption[]|null);

            /** MessageOptions .google.api.resource */
            ".google.api.resource"?: (google.api.IResourceDescriptor|null);
        }

        /** Represents a MessageOptions. */
        class MessageOptions implements IMessageOptions {

            /**
             * Constructs a new MessageOptions.
             * @param [properties] Properties to set
             */
            constructor(properties?: google.protobuf.IMessageOptions);

            /** MessageOptions messageSetWireFormat. */
            public messageSetWireFormat: boolean;

            /** MessageOptions noStandardDescriptorAccessor. */
            public noStandardDescriptorAccessor: boolean;

            /** MessageOptions deprecated. */
            public deprecated: boolean;

            /** MessageOptions mapEntry. */
            public mapEntry: boolean;

            /** MessageOptions deprecatedLegacyJsonFieldConflicts. */
            public deprecatedLegacyJsonFieldConflicts: boolean;

            /** MessageOptions features. */
            public features?: (google.protobuf.IFeatureSet|null);

            /** MessageOptions uninterpretedOption. */
            public uninterpretedOption: google.protobuf.IUninterpretedOption[];

            /**
             * Creates a new MessageOptions instance using the specified properties.
             * @param [properties] Properties to set
             * @returns MessageOptions instance
             */
            public static create(properties?: google.protobuf.IMessageOptions): google.protobuf.MessageOptions;

            /**
             * Encodes the specified MessageOptions message. Does not implicitly {@link google.protobuf.MessageOptions.verify|verify} messages.
             * @param message MessageOptions message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: google.protobuf.IMessageOptions, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified MessageOptions message, length delimited. Does not implicitly {@link google.protobuf.MessageOptions.verify|verify} messages.
             * @param message MessageOptions message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: google.protobuf.IMessageOptions, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a MessageOptions message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns MessageOptions
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.MessageOptions;

            /**
             * Decodes a MessageOptions message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns MessageOptions
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.MessageOptions;

            /**
             * Verifies a MessageOptions message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a MessageOptions message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns MessageOptions
             */
            public static fromObject(object: { [k: string]: any }): google.protobuf.MessageOptions;

            /**
             * Creates a plain object from a MessageOptions message. Also converts values to other types if specified.
             * @param message MessageOptions
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: google.protobuf.MessageOptions, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this MessageOptions to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for MessageOptions
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a FieldOptions. */
        interface IFieldOptions {

            /** FieldOptions ctype */
            ctype?: (google.protobuf.FieldOptions.CType|keyof typeof google.protobuf.FieldOptions.CType|null);

            /** FieldOptions packed */
            packed?: (boolean|null);

            /** FieldOptions jstype */
            jstype?: (google.protobuf.FieldOptions.JSType|keyof typeof google.protobuf.FieldOptions.JSType|null);

            /** FieldOptions lazy */
            lazy?: (boolean|null);

            /** FieldOptions unverifiedLazy */
            unverifiedLazy?: (boolean|null);

            /** FieldOptions deprecated */
            deprecated?: (boolean|null);

            /** FieldOptions weak */
            weak?: (boolean|null);

            /** FieldOptions debugRedact */
            debugRedact?: (boolean|null);

            /** FieldOptions retention */
            retention?: (google.protobuf.FieldOptions.OptionRetention|keyof typeof google.protobuf.FieldOptions.OptionRetention|null);

            /** FieldOptions targets */
            targets?: (google.protobuf.FieldOptions.OptionTargetType[]|null);

            /** FieldOptions editionDefaults */
            editionDefaults?: (google.protobuf.FieldOptions.IEditionDefault[]|null);

            /** FieldOptions features */
            features?: (google.protobuf.IFeatureSet|null);

            /** FieldOptions featureSupport */
            featureSupport?: (google.protobuf.FieldOptions.IFeatureSupport|null);

            /** FieldOptions uninterpretedOption */
            uninterpretedOption?: (google.protobuf.IUninterpretedOption[]|null);

            /** FieldOptions .google.api.fieldBehavior */
            ".google.api.fieldBehavior"?: (google.api.FieldBehavior[]|null);

            /** FieldOptions .google.api.fieldInfo */
            ".google.api.fieldInfo"?: (google.api.IFieldInfo|null);

            /** FieldOptions .google.api.resourceReference */
            ".google.api.resourceReference"?: (google.api.IResourceReference|null);
        }

        /** Represents a FieldOptions. */
        class FieldOptions implements IFieldOptions {

            /**
             * Constructs a new FieldOptions.
             * @param [properties] Properties to set
             */
            constructor(properties?: google.protobuf.IFieldOptions);

            /** FieldOptions ctype. */
            public ctype: (google.protobuf.FieldOptions.CType|keyof typeof google.protobuf.FieldOptions.CType);

            /** FieldOptions packed. */
            public packed: boolean;

            /** FieldOptions jstype. */
            public jstype: (google.protobuf.FieldOptions.JSType|keyof typeof google.protobuf.FieldOptions.JSType);

            /** FieldOptions lazy. */
            public lazy: boolean;

            /** FieldOptions unverifiedLazy. */
            public unverifiedLazy: boolean;

            /** FieldOptions deprecated. */
            public deprecated: boolean;

            /** FieldOptions weak. */
            public weak: boolean;

            /** FieldOptions debugRedact. */
            public debugRedact: boolean;

            /** FieldOptions retention. */
            public retention: (google.protobuf.FieldOptions.OptionRetention|keyof typeof google.protobuf.FieldOptions.OptionRetention);

            /** FieldOptions targets. */
            public targets: google.protobuf.FieldOptions.OptionTargetType[];

            /** FieldOptions editionDefaults. */
            public editionDefaults: google.protobuf.FieldOptions.IEditionDefault[];

            /** FieldOptions features. */
            public features?: (google.protobuf.IFeatureSet|null);

            /** FieldOptions featureSupport. */
            public featureSupport?: (google.protobuf.FieldOptions.IFeatureSupport|null);

            /** FieldOptions uninterpretedOption. */
            public uninterpretedOption: google.protobuf.IUninterpretedOption[];

            /**
             * Creates a new FieldOptions instance using the specified properties.
             * @param [properties] Properties to set
             * @returns FieldOptions instance
             */
            public static create(properties?: google.protobuf.IFieldOptions): google.protobuf.FieldOptions;

            /**
             * Encodes the specified FieldOptions message. Does not implicitly {@link google.protobuf.FieldOptions.verify|verify} messages.
             * @param message FieldOptions message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: google.protobuf.IFieldOptions, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified FieldOptions message, length delimited. Does not implicitly {@link google.protobuf.FieldOptions.verify|verify} messages.
             * @param message FieldOptions message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: google.protobuf.IFieldOptions, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a FieldOptions message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns FieldOptions
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.FieldOptions;

            /**
             * Decodes a FieldOptions message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns FieldOptions
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.FieldOptions;

            /**
             * Verifies a FieldOptions message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a FieldOptions message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns FieldOptions
             */
            public static fromObject(object: { [k: string]: any }): google.protobuf.FieldOptions;

            /**
             * Creates a plain object from a FieldOptions message. Also converts values to other types if specified.
             * @param message FieldOptions
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: google.protobuf.FieldOptions, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this FieldOptions to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for FieldOptions
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace FieldOptions {

            /** CType enum. */
            enum CType {
                STRING = 0,
                CORD = 1,
                STRING_PIECE = 2
            }

            /** JSType enum. */
            enum JSType {
                JS_NORMAL = 0,
                JS_STRING = 1,
                JS_NUMBER = 2
            }

            /** OptionRetention enum. */
            enum OptionRetention {
                RETENTION_UNKNOWN = 0,
                RETENTION_RUNTIME = 1,
                RETENTION_SOURCE = 2
            }

            /** OptionTargetType enum. */
            enum OptionTargetType {
                TARGET_TYPE_UNKNOWN = 0,
                TARGET_TYPE_FILE = 1,
                TARGET_TYPE_EXTENSION_RANGE = 2,
                TARGET_TYPE_MESSAGE = 3,
                TARGET_TYPE_FIELD = 4,
                TARGET_TYPE_ONEOF = 5,
                TARGET_TYPE_ENUM = 6,
                TARGET_TYPE_ENUM_ENTRY = 7,
                TARGET_TYPE_SERVICE = 8,
                TARGET_TYPE_METHOD = 9
            }

            /** Properties of an EditionDefault. */
            interface IEditionDefault {

                /** EditionDefault edition */
                edition?: (google.protobuf.Edition|keyof typeof google.protobuf.Edition|null);

                /** EditionDefault value */
                value?: (string|null);
            }

            /** Represents an EditionDefault. */
            class EditionDefault implements IEditionDefault {

                /**
                 * Constructs a new EditionDefault.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.protobuf.FieldOptions.IEditionDefault);

                /** EditionDefault edition. */
                public edition: (google.protobuf.Edition|keyof typeof google.protobuf.Edition);

                /** EditionDefault value. */
                public value: string;

                /**
                 * Creates a new EditionDefault instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns EditionDefault instance
                 */
                public static create(properties?: google.protobuf.FieldOptions.IEditionDefault): google.protobuf.FieldOptions.EditionDefault;

                /**
                 * Encodes the specified EditionDefault message. Does not implicitly {@link google.protobuf.FieldOptions.EditionDefault.verify|verify} messages.
                 * @param message EditionDefault message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.protobuf.FieldOptions.IEditionDefault, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified EditionDefault message, length delimited. Does not implicitly {@link google.protobuf.FieldOptions.EditionDefault.verify|verify} messages.
                 * @param message EditionDefault message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.protobuf.FieldOptions.IEditionDefault, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes an EditionDefault message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns EditionDefault
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.FieldOptions.EditionDefault;

                /**
                 * Decodes an EditionDefault message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns EditionDefault
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.FieldOptions.EditionDefault;

                /**
                 * Verifies an EditionDefault message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates an EditionDefault message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns EditionDefault
                 */
                public static fromObject(object: { [k: string]: any }): google.protobuf.FieldOptions.EditionDefault;

                /**
                 * Creates a plain object from an EditionDefault message. Also converts values to other types if specified.
                 * @param message EditionDefault
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.protobuf.FieldOptions.EditionDefault, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this EditionDefault to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for EditionDefault
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a FeatureSupport. */
            interface IFeatureSupport {

                /** FeatureSupport editionIntroduced */
                editionIntroduced?: (google.protobuf.Edition|keyof typeof google.protobuf.Edition|null);

                /** FeatureSupport editionDeprecated */
                editionDeprecated?: (google.protobuf.Edition|keyof typeof google.protobuf.Edition|null);

                /** FeatureSupport deprecationWarning */
                deprecationWarning?: (string|null);

                /** FeatureSupport editionRemoved */
                editionRemoved?: (google.protobuf.Edition|keyof typeof google.protobuf.Edition|null);
            }

            /** Represents a FeatureSupport. */
            class FeatureSupport implements IFeatureSupport {

                /**
                 * Constructs a new FeatureSupport.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.protobuf.FieldOptions.IFeatureSupport);

                /** FeatureSupport editionIntroduced. */
                public editionIntroduced: (google.protobuf.Edition|keyof typeof google.protobuf.Edition);

                /** FeatureSupport editionDeprecated. */
                public editionDeprecated: (google.protobuf.Edition|keyof typeof google.protobuf.Edition);

                /** FeatureSupport deprecationWarning. */
                public deprecationWarning: string;

                /** FeatureSupport editionRemoved. */
                public editionRemoved: (google.protobuf.Edition|keyof typeof google.protobuf.Edition);

                /**
                 * Creates a new FeatureSupport instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns FeatureSupport instance
                 */
                public static create(properties?: google.protobuf.FieldOptions.IFeatureSupport): google.protobuf.FieldOptions.FeatureSupport;

                /**
                 * Encodes the specified FeatureSupport message. Does not implicitly {@link google.protobuf.FieldOptions.FeatureSupport.verify|verify} messages.
                 * @param message FeatureSupport message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.protobuf.FieldOptions.IFeatureSupport, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified FeatureSupport message, length delimited. Does not implicitly {@link google.protobuf.FieldOptions.FeatureSupport.verify|verify} messages.
                 * @param message FeatureSupport message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.protobuf.FieldOptions.IFeatureSupport, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a FeatureSupport message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns FeatureSupport
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.FieldOptions.FeatureSupport;

                /**
                 * Decodes a FeatureSupport message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns FeatureSupport
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.FieldOptions.FeatureSupport;

                /**
                 * Verifies a FeatureSupport message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a FeatureSupport message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns FeatureSupport
                 */
                public static fromObject(object: { [k: string]: any }): google.protobuf.FieldOptions.FeatureSupport;

                /**
                 * Creates a plain object from a FeatureSupport message. Also converts values to other types if specified.
                 * @param message FeatureSupport
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.protobuf.FieldOptions.FeatureSupport, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this FeatureSupport to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for FeatureSupport
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }
        }

        /** Properties of an OneofOptions. */
        interface IOneofOptions {

            /** OneofOptions features */
            features?: (google.protobuf.IFeatureSet|null);

            /** OneofOptions uninterpretedOption */
            uninterpretedOption?: (google.protobuf.IUninterpretedOption[]|null);
        }

        /** Represents an OneofOptions. */
        class OneofOptions implements IOneofOptions {

            /**
             * Constructs a new OneofOptions.
             * @param [properties] Properties to set
             */
            constructor(properties?: google.protobuf.IOneofOptions);

            /** OneofOptions features. */
            public features?: (google.protobuf.IFeatureSet|null);

            /** OneofOptions uninterpretedOption. */
            public uninterpretedOption: google.protobuf.IUninterpretedOption[];

            /**
             * Creates a new OneofOptions instance using the specified properties.
             * @param [properties] Properties to set
             * @returns OneofOptions instance
             */
            public static create(properties?: google.protobuf.IOneofOptions): google.protobuf.OneofOptions;

            /**
             * Encodes the specified OneofOptions message. Does not implicitly {@link google.protobuf.OneofOptions.verify|verify} messages.
             * @param message OneofOptions message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: google.protobuf.IOneofOptions, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified OneofOptions message, length delimited. Does not implicitly {@link google.protobuf.OneofOptions.verify|verify} messages.
             * @param message OneofOptions message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: google.protobuf.IOneofOptions, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes an OneofOptions message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns OneofOptions
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.OneofOptions;

            /**
             * Decodes an OneofOptions message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns OneofOptions
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.OneofOptions;

            /**
             * Verifies an OneofOptions message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates an OneofOptions message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns OneofOptions
             */
            public static fromObject(object: { [k: string]: any }): google.protobuf.OneofOptions;

            /**
             * Creates a plain object from an OneofOptions message. Also converts values to other types if specified.
             * @param message OneofOptions
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: google.protobuf.OneofOptions, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this OneofOptions to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for OneofOptions
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of an EnumOptions. */
        interface IEnumOptions {

            /** EnumOptions allowAlias */
            allowAlias?: (boolean|null);

            /** EnumOptions deprecated */
            deprecated?: (boolean|null);

            /** EnumOptions deprecatedLegacyJsonFieldConflicts */
            deprecatedLegacyJsonFieldConflicts?: (boolean|null);

            /** EnumOptions features */
            features?: (google.protobuf.IFeatureSet|null);

            /** EnumOptions uninterpretedOption */
            uninterpretedOption?: (google.protobuf.IUninterpretedOption[]|null);
        }

        /** Represents an EnumOptions. */
        class EnumOptions implements IEnumOptions {

            /**
             * Constructs a new EnumOptions.
             * @param [properties] Properties to set
             */
            constructor(properties?: google.protobuf.IEnumOptions);

            /** EnumOptions allowAlias. */
            public allowAlias: boolean;

            /** EnumOptions deprecated. */
            public deprecated: boolean;

            /** EnumOptions deprecatedLegacyJsonFieldConflicts. */
            public deprecatedLegacyJsonFieldConflicts: boolean;

            /** EnumOptions features. */
            public features?: (google.protobuf.IFeatureSet|null);

            /** EnumOptions uninterpretedOption. */
            public uninterpretedOption: google.protobuf.IUninterpretedOption[];

            /**
             * Creates a new EnumOptions instance using the specified properties.
             * @param [properties] Properties to set
             * @returns EnumOptions instance
             */
            public static create(properties?: google.protobuf.IEnumOptions): google.protobuf.EnumOptions;

            /**
             * Encodes the specified EnumOptions message. Does not implicitly {@link google.protobuf.EnumOptions.verify|verify} messages.
             * @param message EnumOptions message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: google.protobuf.IEnumOptions, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified EnumOptions message, length delimited. Does not implicitly {@link google.protobuf.EnumOptions.verify|verify} messages.
             * @param message EnumOptions message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: google.protobuf.IEnumOptions, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes an EnumOptions message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns EnumOptions
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.EnumOptions;

            /**
             * Decodes an EnumOptions message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns EnumOptions
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.EnumOptions;

            /**
             * Verifies an EnumOptions message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates an EnumOptions message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns EnumOptions
             */
            public static fromObject(object: { [k: string]: any }): google.protobuf.EnumOptions;

            /**
             * Creates a plain object from an EnumOptions message. Also converts values to other types if specified.
             * @param message EnumOptions
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: google.protobuf.EnumOptions, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this EnumOptions to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for EnumOptions
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of an EnumValueOptions. */
        interface IEnumValueOptions {

            /** EnumValueOptions deprecated */
            deprecated?: (boolean|null);

            /** EnumValueOptions features */
            features?: (google.protobuf.IFeatureSet|null);

            /** EnumValueOptions debugRedact */
            debugRedact?: (boolean|null);

            /** EnumValueOptions featureSupport */
            featureSupport?: (google.protobuf.FieldOptions.IFeatureSupport|null);

            /** EnumValueOptions uninterpretedOption */
            uninterpretedOption?: (google.protobuf.IUninterpretedOption[]|null);
        }

        /** Represents an EnumValueOptions. */
        class EnumValueOptions implements IEnumValueOptions {

            /**
             * Constructs a new EnumValueOptions.
             * @param [properties] Properties to set
             */
            constructor(properties?: google.protobuf.IEnumValueOptions);

            /** EnumValueOptions deprecated. */
            public deprecated: boolean;

            /** EnumValueOptions features. */
            public features?: (google.protobuf.IFeatureSet|null);

            /** EnumValueOptions debugRedact. */
            public debugRedact: boolean;

            /** EnumValueOptions featureSupport. */
            public featureSupport?: (google.protobuf.FieldOptions.IFeatureSupport|null);

            /** EnumValueOptions uninterpretedOption. */
            public uninterpretedOption: google.protobuf.IUninterpretedOption[];

            /**
             * Creates a new EnumValueOptions instance using the specified properties.
             * @param [properties] Properties to set
             * @returns EnumValueOptions instance
             */
            public static create(properties?: google.protobuf.IEnumValueOptions): google.protobuf.EnumValueOptions;

            /**
             * Encodes the specified EnumValueOptions message. Does not implicitly {@link google.protobuf.EnumValueOptions.verify|verify} messages.
             * @param message EnumValueOptions message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: google.protobuf.IEnumValueOptions, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified EnumValueOptions message, length delimited. Does not implicitly {@link google.protobuf.EnumValueOptions.verify|verify} messages.
             * @param message EnumValueOptions message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: google.protobuf.IEnumValueOptions, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes an EnumValueOptions message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns EnumValueOptions
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.EnumValueOptions;

            /**
             * Decodes an EnumValueOptions message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns EnumValueOptions
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.EnumValueOptions;

            /**
             * Verifies an EnumValueOptions message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates an EnumValueOptions message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns EnumValueOptions
             */
            public static fromObject(object: { [k: string]: any }): google.protobuf.EnumValueOptions;

            /**
             * Creates a plain object from an EnumValueOptions message. Also converts values to other types if specified.
             * @param message EnumValueOptions
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: google.protobuf.EnumValueOptions, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this EnumValueOptions to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for EnumValueOptions
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a ServiceOptions. */
        interface IServiceOptions {

            /** ServiceOptions features */
            features?: (google.protobuf.IFeatureSet|null);

            /** ServiceOptions deprecated */
            deprecated?: (boolean|null);

            /** ServiceOptions uninterpretedOption */
            uninterpretedOption?: (google.protobuf.IUninterpretedOption[]|null);

            /** ServiceOptions .google.api.defaultHost */
            ".google.api.defaultHost"?: (string|null);

            /** ServiceOptions .google.api.oauthScopes */
            ".google.api.oauthScopes"?: (string|null);

            /** ServiceOptions .google.api.apiVersion */
            ".google.api.apiVersion"?: (string|null);
        }

        /** Represents a ServiceOptions. */
        class ServiceOptions implements IServiceOptions {

            /**
             * Constructs a new ServiceOptions.
             * @param [properties] Properties to set
             */
            constructor(properties?: google.protobuf.IServiceOptions);

            /** ServiceOptions features. */
            public features?: (google.protobuf.IFeatureSet|null);

            /** ServiceOptions deprecated. */
            public deprecated: boolean;

            /** ServiceOptions uninterpretedOption. */
            public uninterpretedOption: google.protobuf.IUninterpretedOption[];

            /**
             * Creates a new ServiceOptions instance using the specified properties.
             * @param [properties] Properties to set
             * @returns ServiceOptions instance
             */
            public static create(properties?: google.protobuf.IServiceOptions): google.protobuf.ServiceOptions;

            /**
             * Encodes the specified ServiceOptions message. Does not implicitly {@link google.protobuf.ServiceOptions.verify|verify} messages.
             * @param message ServiceOptions message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: google.protobuf.IServiceOptions, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified ServiceOptions message, length delimited. Does not implicitly {@link google.protobuf.ServiceOptions.verify|verify} messages.
             * @param message ServiceOptions message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: google.protobuf.IServiceOptions, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a ServiceOptions message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns ServiceOptions
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.ServiceOptions;

            /**
             * Decodes a ServiceOptions message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns ServiceOptions
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.ServiceOptions;

            /**
             * Verifies a ServiceOptions message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a ServiceOptions message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns ServiceOptions
             */
            public static fromObject(object: { [k: string]: any }): google.protobuf.ServiceOptions;

            /**
             * Creates a plain object from a ServiceOptions message. Also converts values to other types if specified.
             * @param message ServiceOptions
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: google.protobuf.ServiceOptions, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this ServiceOptions to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for ServiceOptions
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a MethodOptions. */
        interface IMethodOptions {

            /** MethodOptions deprecated */
            deprecated?: (boolean|null);

            /** MethodOptions idempotencyLevel */
            idempotencyLevel?: (google.protobuf.MethodOptions.IdempotencyLevel|keyof typeof google.protobuf.MethodOptions.IdempotencyLevel|null);

            /** MethodOptions features */
            features?: (google.protobuf.IFeatureSet|null);

            /** MethodOptions uninterpretedOption */
            uninterpretedOption?: (google.protobuf.IUninterpretedOption[]|null);

            /** MethodOptions .google.api.http */
            ".google.api.http"?: (google.api.IHttpRule|null);

            /** MethodOptions .google.api.methodSignature */
            ".google.api.methodSignature"?: (string[]|null);

            /** MethodOptions .google.api.routing */
            ".google.api.routing"?: (google.api.IRoutingRule|null);

            /** MethodOptions .google.longrunning.operationInfo */
            ".google.longrunning.operationInfo"?: (google.longrunning.IOperationInfo|null);
        }

        /** Represents a MethodOptions. */
        class MethodOptions implements IMethodOptions {

            /**
             * Constructs a new MethodOptions.
             * @param [properties] Properties to set
             */
            constructor(properties?: google.protobuf.IMethodOptions);

            /** MethodOptions deprecated. */
            public deprecated: boolean;

            /** MethodOptions idempotencyLevel. */
            public idempotencyLevel: (google.protobuf.MethodOptions.IdempotencyLevel|keyof typeof google.protobuf.MethodOptions.IdempotencyLevel);

            /** MethodOptions features. */
            public features?: (google.protobuf.IFeatureSet|null);

            /** MethodOptions uninterpretedOption. */
            public uninterpretedOption: google.protobuf.IUninterpretedOption[];

            /**
             * Creates a new MethodOptions instance using the specified properties.
             * @param [properties] Properties to set
             * @returns MethodOptions instance
             */
            public static create(properties?: google.protobuf.IMethodOptions): google.protobuf.MethodOptions;

            /**
             * Encodes the specified MethodOptions message. Does not implicitly {@link google.protobuf.MethodOptions.verify|verify} messages.
             * @param message MethodOptions message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: google.protobuf.IMethodOptions, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified MethodOptions message, length delimited. Does not implicitly {@link google.protobuf.MethodOptions.verify|verify} messages.
             * @param message MethodOptions message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: google.protobuf.IMethodOptions, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a MethodOptions message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns MethodOptions
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.MethodOptions;

            /**
             * Decodes a MethodOptions message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns MethodOptions
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.MethodOptions;

            /**
             * Verifies a MethodOptions message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a MethodOptions message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns MethodOptions
             */
            public static fromObject(object: { [k: string]: any }): google.protobuf.MethodOptions;

            /**
             * Creates a plain object from a MethodOptions message. Also converts values to other types if specified.
             * @param message MethodOptions
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: google.protobuf.MethodOptions, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this MethodOptions to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for MethodOptions
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace MethodOptions {

            /** IdempotencyLevel enum. */
            enum IdempotencyLevel {
                IDEMPOTENCY_UNKNOWN = 0,
                NO_SIDE_EFFECTS = 1,
                IDEMPOTENT = 2
            }
        }

        /** Properties of an UninterpretedOption. */
        interface IUninterpretedOption {

            /** UninterpretedOption name */
            name?: (google.protobuf.UninterpretedOption.INamePart[]|null);

            /** UninterpretedOption identifierValue */
            identifierValue?: (string|null);

            /** UninterpretedOption positiveIntValue */
            positiveIntValue?: (number|Long|string|null);

            /** UninterpretedOption negativeIntValue */
            negativeIntValue?: (number|Long|string|null);

            /** UninterpretedOption doubleValue */
            doubleValue?: (number|null);

            /** UninterpretedOption stringValue */
            stringValue?: (Uint8Array|Buffer|string|null);

            /** UninterpretedOption aggregateValue */
            aggregateValue?: (string|null);
        }

        /** Represents an UninterpretedOption. */
        class UninterpretedOption implements IUninterpretedOption {

            /**
             * Constructs a new UninterpretedOption.
             * @param [properties] Properties to set
             */
            constructor(properties?: google.protobuf.IUninterpretedOption);

            /** UninterpretedOption name. */
            public name: google.protobuf.UninterpretedOption.INamePart[];

            /** UninterpretedOption identifierValue. */
            public identifierValue: string;

            /** UninterpretedOption positiveIntValue. */
            public positiveIntValue: (number|Long|string);

            /** UninterpretedOption negativeIntValue. */
            public negativeIntValue: (number|Long|string);

            /** UninterpretedOption doubleValue. */
            public doubleValue: number;

            /** UninterpretedOption stringValue. */
            public stringValue: (Uint8Array|Buffer|string);

            /** UninterpretedOption aggregateValue. */
            public aggregateValue: string;

            /**
             * Creates a new UninterpretedOption instance using the specified properties.
             * @param [properties] Properties to set
             * @returns UninterpretedOption instance
             */
            public static create(properties?: google.protobuf.IUninterpretedOption): google.protobuf.UninterpretedOption;

            /**
             * Encodes the specified UninterpretedOption message. Does not implicitly {@link google.protobuf.UninterpretedOption.verify|verify} messages.
             * @param message UninterpretedOption message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: google.protobuf.IUninterpretedOption, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified UninterpretedOption message, length delimited. Does not implicitly {@link google.protobuf.UninterpretedOption.verify|verify} messages.
             * @param message UninterpretedOption message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: google.protobuf.IUninterpretedOption, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes an UninterpretedOption message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns UninterpretedOption
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.UninterpretedOption;

            /**
             * Decodes an UninterpretedOption message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns UninterpretedOption
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.UninterpretedOption;

            /**
             * Verifies an UninterpretedOption message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates an UninterpretedOption message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns UninterpretedOption
             */
            public static fromObject(object: { [k: string]: any }): google.protobuf.UninterpretedOption;

            /**
             * Creates a plain object from an UninterpretedOption message. Also converts values to other types if specified.
             * @param message UninterpretedOption
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: google.protobuf.UninterpretedOption, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this UninterpretedOption to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for UninterpretedOption
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace UninterpretedOption {

            /** Properties of a NamePart. */
            interface INamePart {

                /** NamePart namePart */
                namePart: string;

                /** NamePart isExtension */
                isExtension: boolean;
            }

            /** Represents a NamePart. */
            class NamePart implements INamePart {

                /**
                 * Constructs a new NamePart.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.protobuf.UninterpretedOption.INamePart);

                /** NamePart namePart. */
                public namePart: string;

                /** NamePart isExtension. */
                public isExtension: boolean;

                /**
                 * Creates a new NamePart instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns NamePart instance
                 */
                public static create(properties?: google.protobuf.UninterpretedOption.INamePart): google.protobuf.UninterpretedOption.NamePart;

                /**
                 * Encodes the specified NamePart message. Does not implicitly {@link google.protobuf.UninterpretedOption.NamePart.verify|verify} messages.
                 * @param message NamePart message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.protobuf.UninterpretedOption.INamePart, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified NamePart message, length delimited. Does not implicitly {@link google.protobuf.UninterpretedOption.NamePart.verify|verify} messages.
                 * @param message NamePart message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.protobuf.UninterpretedOption.INamePart, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a NamePart message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns NamePart
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.UninterpretedOption.NamePart;

                /**
                 * Decodes a NamePart message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns NamePart
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.UninterpretedOption.NamePart;

                /**
                 * Verifies a NamePart message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a NamePart message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns NamePart
                 */
                public static fromObject(object: { [k: string]: any }): google.protobuf.UninterpretedOption.NamePart;

                /**
                 * Creates a plain object from a NamePart message. Also converts values to other types if specified.
                 * @param message NamePart
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.protobuf.UninterpretedOption.NamePart, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this NamePart to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for NamePart
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }
        }

        /** Properties of a FeatureSet. */
        interface IFeatureSet {

            /** FeatureSet fieldPresence */
            fieldPresence?: (google.protobuf.FeatureSet.FieldPresence|keyof typeof google.protobuf.FeatureSet.FieldPresence|null);

            /** FeatureSet enumType */
            enumType?: (google.protobuf.FeatureSet.EnumType|keyof typeof google.protobuf.FeatureSet.EnumType|null);

            /** FeatureSet repeatedFieldEncoding */
            repeatedFieldEncoding?: (google.protobuf.FeatureSet.RepeatedFieldEncoding|keyof typeof google.protobuf.FeatureSet.RepeatedFieldEncoding|null);

            /** FeatureSet utf8Validation */
            utf8Validation?: (google.protobuf.FeatureSet.Utf8Validation|keyof typeof google.protobuf.FeatureSet.Utf8Validation|null);

            /** FeatureSet messageEncoding */
            messageEncoding?: (google.protobuf.FeatureSet.MessageEncoding|keyof typeof google.protobuf.FeatureSet.MessageEncoding|null);

            /** FeatureSet jsonFormat */
            jsonFormat?: (google.protobuf.FeatureSet.JsonFormat|keyof typeof google.protobuf.FeatureSet.JsonFormat|null);

            /** FeatureSet enforceNamingStyle */
            enforceNamingStyle?: (google.protobuf.FeatureSet.EnforceNamingStyle|keyof typeof google.protobuf.FeatureSet.EnforceNamingStyle|null);

            /** FeatureSet defaultSymbolVisibility */
            defaultSymbolVisibility?: (google.protobuf.FeatureSet.VisibilityFeature.DefaultSymbolVisibility|keyof typeof google.protobuf.FeatureSet.VisibilityFeature.DefaultSymbolVisibility|null);
        }

        /** Represents a FeatureSet. */
        class FeatureSet implements IFeatureSet {

            /**
             * Constructs a new FeatureSet.
             * @param [properties] Properties to set
             */
            constructor(properties?: google.protobuf.IFeatureSet);

            /** FeatureSet fieldPresence. */
            public fieldPresence: (google.protobuf.FeatureSet.FieldPresence|keyof typeof google.protobuf.FeatureSet.FieldPresence);

            /** FeatureSet enumType. */
            public enumType: (google.protobuf.FeatureSet.EnumType|keyof typeof google.protobuf.FeatureSet.EnumType);

            /** FeatureSet repeatedFieldEncoding. */
            public repeatedFieldEncoding: (google.protobuf.FeatureSet.RepeatedFieldEncoding|keyof typeof google.protobuf.FeatureSet.RepeatedFieldEncoding);

            /** FeatureSet utf8Validation. */
            public utf8Validation: (google.protobuf.FeatureSet.Utf8Validation|keyof typeof google.protobuf.FeatureSet.Utf8Validation);

            /** FeatureSet messageEncoding. */
            public messageEncoding: (google.protobuf.FeatureSet.MessageEncoding|keyof typeof google.protobuf.FeatureSet.MessageEncoding);

            /** FeatureSet jsonFormat. */
            public jsonFormat: (google.protobuf.FeatureSet.JsonFormat|keyof typeof google.protobuf.FeatureSet.JsonFormat);

            /** FeatureSet enforceNamingStyle. */
            public enforceNamingStyle: (google.protobuf.FeatureSet.EnforceNamingStyle|keyof typeof google.protobuf.FeatureSet.EnforceNamingStyle);

            /** FeatureSet defaultSymbolVisibility. */
            public defaultSymbolVisibility: (google.protobuf.FeatureSet.VisibilityFeature.DefaultSymbolVisibility|keyof typeof google.protobuf.FeatureSet.VisibilityFeature.DefaultSymbolVisibility);

            /**
             * Creates a new FeatureSet instance using the specified properties.
             * @param [properties] Properties to set
             * @returns FeatureSet instance
             */
            public static create(properties?: google.protobuf.IFeatureSet): google.protobuf.FeatureSet;

            /**
             * Encodes the specified FeatureSet message. Does not implicitly {@link google.protobuf.FeatureSet.verify|verify} messages.
             * @param message FeatureSet message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: google.protobuf.IFeatureSet, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified FeatureSet message, length delimited. Does not implicitly {@link google.protobuf.FeatureSet.verify|verify} messages.
             * @param message FeatureSet message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: google.protobuf.IFeatureSet, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a FeatureSet message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns FeatureSet
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.FeatureSet;

            /**
             * Decodes a FeatureSet message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns FeatureSet
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.FeatureSet;

            /**
             * Verifies a FeatureSet message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a FeatureSet message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns FeatureSet
             */
            public static fromObject(object: { [k: string]: any }): google.protobuf.FeatureSet;

            /**
             * Creates a plain object from a FeatureSet message. Also converts values to other types if specified.
             * @param message FeatureSet
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: google.protobuf.FeatureSet, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this FeatureSet to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for FeatureSet
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace FeatureSet {

            /** FieldPresence enum. */
            enum FieldPresence {
                FIELD_PRESENCE_UNKNOWN = 0,
                EXPLICIT = 1,
                IMPLICIT = 2,
                LEGACY_REQUIRED = 3
            }

            /** EnumType enum. */
            enum EnumType {
                ENUM_TYPE_UNKNOWN = 0,
                OPEN = 1,
                CLOSED = 2
            }

            /** RepeatedFieldEncoding enum. */
            enum RepeatedFieldEncoding {
                REPEATED_FIELD_ENCODING_UNKNOWN = 0,
                PACKED = 1,
                EXPANDED = 2
            }

            /** Utf8Validation enum. */
            enum Utf8Validation {
                UTF8_VALIDATION_UNKNOWN = 0,
                VERIFY = 2,
                NONE = 3
            }

            /** MessageEncoding enum. */
            enum MessageEncoding {
                MESSAGE_ENCODING_UNKNOWN = 0,
                LENGTH_PREFIXED = 1,
                DELIMITED = 2
            }

            /** JsonFormat enum. */
            enum JsonFormat {
                JSON_FORMAT_UNKNOWN = 0,
                ALLOW = 1,
                LEGACY_BEST_EFFORT = 2
            }

            /** EnforceNamingStyle enum. */
            enum EnforceNamingStyle {
                ENFORCE_NAMING_STYLE_UNKNOWN = 0,
                STYLE2024 = 1,
                STYLE_LEGACY = 2
            }

            /** Properties of a VisibilityFeature. */
            interface IVisibilityFeature {
            }

            /** Represents a VisibilityFeature. */
            class VisibilityFeature implements IVisibilityFeature {

                /**
                 * Constructs a new VisibilityFeature.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.protobuf.FeatureSet.IVisibilityFeature);

                /**
                 * Creates a new VisibilityFeature instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns VisibilityFeature instance
                 */
                public static create(properties?: google.protobuf.FeatureSet.IVisibilityFeature): google.protobuf.FeatureSet.VisibilityFeature;

                /**
                 * Encodes the specified VisibilityFeature message. Does not implicitly {@link google.protobuf.FeatureSet.VisibilityFeature.verify|verify} messages.
                 * @param message VisibilityFeature message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.protobuf.FeatureSet.IVisibilityFeature, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified VisibilityFeature message, length delimited. Does not implicitly {@link google.protobuf.FeatureSet.VisibilityFeature.verify|verify} messages.
                 * @param message VisibilityFeature message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.protobuf.FeatureSet.IVisibilityFeature, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a VisibilityFeature message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns VisibilityFeature
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.FeatureSet.VisibilityFeature;

                /**
                 * Decodes a VisibilityFeature message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns VisibilityFeature
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.FeatureSet.VisibilityFeature;

                /**
                 * Verifies a VisibilityFeature message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a VisibilityFeature message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns VisibilityFeature
                 */
                public static fromObject(object: { [k: string]: any }): google.protobuf.FeatureSet.VisibilityFeature;

                /**
                 * Creates a plain object from a VisibilityFeature message. Also converts values to other types if specified.
                 * @param message VisibilityFeature
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.protobuf.FeatureSet.VisibilityFeature, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this VisibilityFeature to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for VisibilityFeature
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            namespace VisibilityFeature {

                /** DefaultSymbolVisibility enum. */
                enum DefaultSymbolVisibility {
                    DEFAULT_SYMBOL_VISIBILITY_UNKNOWN = 0,
                    EXPORT_ALL = 1,
                    EXPORT_TOP_LEVEL = 2,
                    LOCAL_ALL = 3,
                    STRICT = 4
                }
            }
        }

        /** Properties of a FeatureSetDefaults. */
        interface IFeatureSetDefaults {

            /** FeatureSetDefaults defaults */
            defaults?: (google.protobuf.FeatureSetDefaults.IFeatureSetEditionDefault[]|null);

            /** FeatureSetDefaults minimumEdition */
            minimumEdition?: (google.protobuf.Edition|keyof typeof google.protobuf.Edition|null);

            /** FeatureSetDefaults maximumEdition */
            maximumEdition?: (google.protobuf.Edition|keyof typeof google.protobuf.Edition|null);
        }

        /** Represents a FeatureSetDefaults. */
        class FeatureSetDefaults implements IFeatureSetDefaults {

            /**
             * Constructs a new FeatureSetDefaults.
             * @param [properties] Properties to set
             */
            constructor(properties?: google.protobuf.IFeatureSetDefaults);

            /** FeatureSetDefaults defaults. */
            public defaults: google.protobuf.FeatureSetDefaults.IFeatureSetEditionDefault[];

            /** FeatureSetDefaults minimumEdition. */
            public minimumEdition: (google.protobuf.Edition|keyof typeof google.protobuf.Edition);

            /** FeatureSetDefaults maximumEdition. */
            public maximumEdition: (google.protobuf.Edition|keyof typeof google.protobuf.Edition);

            /**
             * Creates a new FeatureSetDefaults instance using the specified properties.
             * @param [properties] Properties to set
             * @returns FeatureSetDefaults instance
             */
            public static create(properties?: google.protobuf.IFeatureSetDefaults): google.protobuf.FeatureSetDefaults;

            /**
             * Encodes the specified FeatureSetDefaults message. Does not implicitly {@link google.protobuf.FeatureSetDefaults.verify|verify} messages.
             * @param message FeatureSetDefaults message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: google.protobuf.IFeatureSetDefaults, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified FeatureSetDefaults message, length delimited. Does not implicitly {@link google.protobuf.FeatureSetDefaults.verify|verify} messages.
             * @param message FeatureSetDefaults message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: google.protobuf.IFeatureSetDefaults, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a FeatureSetDefaults message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns FeatureSetDefaults
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.FeatureSetDefaults;

            /**
             * Decodes a FeatureSetDefaults message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns FeatureSetDefaults
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.FeatureSetDefaults;

            /**
             * Verifies a FeatureSetDefaults message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a FeatureSetDefaults message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns FeatureSetDefaults
             */
            public static fromObject(object: { [k: string]: any }): google.protobuf.FeatureSetDefaults;

            /**
             * Creates a plain object from a FeatureSetDefaults message. Also converts values to other types if specified.
             * @param message FeatureSetDefaults
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: google.protobuf.FeatureSetDefaults, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this FeatureSetDefaults to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for FeatureSetDefaults
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace FeatureSetDefaults {

            /** Properties of a FeatureSetEditionDefault. */
            interface IFeatureSetEditionDefault {

                /** FeatureSetEditionDefault edition */
                edition?: (google.protobuf.Edition|keyof typeof google.protobuf.Edition|null);

                /** FeatureSetEditionDefault overridableFeatures */
                overridableFeatures?: (google.protobuf.IFeatureSet|null);

                /** FeatureSetEditionDefault fixedFeatures */
                fixedFeatures?: (google.protobuf.IFeatureSet|null);
            }

            /** Represents a FeatureSetEditionDefault. */
            class FeatureSetEditionDefault implements IFeatureSetEditionDefault {

                /**
                 * Constructs a new FeatureSetEditionDefault.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.protobuf.FeatureSetDefaults.IFeatureSetEditionDefault);

                /** FeatureSetEditionDefault edition. */
                public edition: (google.protobuf.Edition|keyof typeof google.protobuf.Edition);

                /** FeatureSetEditionDefault overridableFeatures. */
                public overridableFeatures?: (google.protobuf.IFeatureSet|null);

                /** FeatureSetEditionDefault fixedFeatures. */
                public fixedFeatures?: (google.protobuf.IFeatureSet|null);

                /**
                 * Creates a new FeatureSetEditionDefault instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns FeatureSetEditionDefault instance
                 */
                public static create(properties?: google.protobuf.FeatureSetDefaults.IFeatureSetEditionDefault): google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault;

                /**
                 * Encodes the specified FeatureSetEditionDefault message. Does not implicitly {@link google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.verify|verify} messages.
                 * @param message FeatureSetEditionDefault message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.protobuf.FeatureSetDefaults.IFeatureSetEditionDefault, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified FeatureSetEditionDefault message, length delimited. Does not implicitly {@link google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.verify|verify} messages.
                 * @param message FeatureSetEditionDefault message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.protobuf.FeatureSetDefaults.IFeatureSetEditionDefault, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a FeatureSetEditionDefault message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns FeatureSetEditionDefault
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault;

                /**
                 * Decodes a FeatureSetEditionDefault message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns FeatureSetEditionDefault
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault;

                /**
                 * Verifies a FeatureSetEditionDefault message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a FeatureSetEditionDefault message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns FeatureSetEditionDefault
                 */
                public static fromObject(object: { [k: string]: any }): google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault;

                /**
                 * Creates a plain object from a FeatureSetEditionDefault message. Also converts values to other types if specified.
                 * @param message FeatureSetEditionDefault
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this FeatureSetEditionDefault to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for FeatureSetEditionDefault
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }
        }

        /** Properties of a SourceCodeInfo. */
        interface ISourceCodeInfo {

            /** SourceCodeInfo location */
            location?: (google.protobuf.SourceCodeInfo.ILocation[]|null);
        }

        /** Represents a SourceCodeInfo. */
        class SourceCodeInfo implements ISourceCodeInfo {

            /**
             * Constructs a new SourceCodeInfo.
             * @param [properties] Properties to set
             */
            constructor(properties?: google.protobuf.ISourceCodeInfo);

            /** SourceCodeInfo location. */
            public location: google.protobuf.SourceCodeInfo.ILocation[];

            /**
             * Creates a new SourceCodeInfo instance using the specified properties.
             * @param [properties] Properties to set
             * @returns SourceCodeInfo instance
             */
            public static create(properties?: google.protobuf.ISourceCodeInfo): google.protobuf.SourceCodeInfo;

            /**
             * Encodes the specified SourceCodeInfo message. Does not implicitly {@link google.protobuf.SourceCodeInfo.verify|verify} messages.
             * @param message SourceCodeInfo message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: google.protobuf.ISourceCodeInfo, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified SourceCodeInfo message, length delimited. Does not implicitly {@link google.protobuf.SourceCodeInfo.verify|verify} messages.
             * @param message SourceCodeInfo message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: google.protobuf.ISourceCodeInfo, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a SourceCodeInfo message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns SourceCodeInfo
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.SourceCodeInfo;

            /**
             * Decodes a SourceCodeInfo message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns SourceCodeInfo
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.SourceCodeInfo;

            /**
             * Verifies a SourceCodeInfo message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a SourceCodeInfo message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns SourceCodeInfo
             */
            public static fromObject(object: { [k: string]: any }): google.protobuf.SourceCodeInfo;

            /**
             * Creates a plain object from a SourceCodeInfo message. Also converts values to other types if specified.
             * @param message SourceCodeInfo
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: google.protobuf.SourceCodeInfo, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this SourceCodeInfo to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for SourceCodeInfo
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace SourceCodeInfo {

            /** Properties of a Location. */
            interface ILocation {

                /** Location path */
                path?: (number[]|null);

                /** Location span */
                span?: (number[]|null);

                /** Location leadingComments */
                leadingComments?: (string|null);

                /** Location trailingComments */
                trailingComments?: (string|null);

                /** Location leadingDetachedComments */
                leadingDetachedComments?: (string[]|null);
            }

            /** Represents a Location. */
            class Location implements ILocation {

                /**
                 * Constructs a new Location.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.protobuf.SourceCodeInfo.ILocation);

                /** Location path. */
                public path: number[];

                /** Location span. */
                public span: number[];

                /** Location leadingComments. */
                public leadingComments: string;

                /** Location trailingComments. */
                public trailingComments: string;

                /** Location leadingDetachedComments. */
                public leadingDetachedComments: string[];

                /**
                 * Creates a new Location instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns Location instance
                 */
                public static create(properties?: google.protobuf.SourceCodeInfo.ILocation): google.protobuf.SourceCodeInfo.Location;

                /**
                 * Encodes the specified Location message. Does not implicitly {@link google.protobuf.SourceCodeInfo.Location.verify|verify} messages.
                 * @param message Location message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.protobuf.SourceCodeInfo.ILocation, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified Location message, length delimited. Does not implicitly {@link google.protobuf.SourceCodeInfo.Location.verify|verify} messages.
                 * @param message Location message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.protobuf.SourceCodeInfo.ILocation, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a Location message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns Location
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.SourceCodeInfo.Location;

                /**
                 * Decodes a Location message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns Location
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.SourceCodeInfo.Location;

                /**
                 * Verifies a Location message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a Location message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns Location
                 */
                public static fromObject(object: { [k: string]: any }): google.protobuf.SourceCodeInfo.Location;

                /**
                 * Creates a plain object from a Location message. Also converts values to other types if specified.
                 * @param message Location
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.protobuf.SourceCodeInfo.Location, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this Location to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for Location
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }
        }

        /** Properties of a GeneratedCodeInfo. */
        interface IGeneratedCodeInfo {

            /** GeneratedCodeInfo annotation */
            annotation?: (google.protobuf.GeneratedCodeInfo.IAnnotation[]|null);
        }

        /** Represents a GeneratedCodeInfo. */
        class GeneratedCodeInfo implements IGeneratedCodeInfo {

            /**
             * Constructs a new GeneratedCodeInfo.
             * @param [properties] Properties to set
             */
            constructor(properties?: google.protobuf.IGeneratedCodeInfo);

            /** GeneratedCodeInfo annotation. */
            public annotation: google.protobuf.GeneratedCodeInfo.IAnnotation[];

            /**
             * Creates a new GeneratedCodeInfo instance using the specified properties.
             * @param [properties] Properties to set
             * @returns GeneratedCodeInfo instance
             */
            public static create(properties?: google.protobuf.IGeneratedCodeInfo): google.protobuf.GeneratedCodeInfo;

            /**
             * Encodes the specified GeneratedCodeInfo message. Does not implicitly {@link google.protobuf.GeneratedCodeInfo.verify|verify} messages.
             * @param message GeneratedCodeInfo message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: google.protobuf.IGeneratedCodeInfo, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified GeneratedCodeInfo message, length delimited. Does not implicitly {@link google.protobuf.GeneratedCodeInfo.verify|verify} messages.
             * @param message GeneratedCodeInfo message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: google.protobuf.IGeneratedCodeInfo, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a GeneratedCodeInfo message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns GeneratedCodeInfo
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.GeneratedCodeInfo;

            /**
             * Decodes a GeneratedCodeInfo message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns GeneratedCodeInfo
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.GeneratedCodeInfo;

            /**
             * Verifies a GeneratedCodeInfo message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a GeneratedCodeInfo message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns GeneratedCodeInfo
             */
            public static fromObject(object: { [k: string]: any }): google.protobuf.GeneratedCodeInfo;

            /**
             * Creates a plain object from a GeneratedCodeInfo message. Also converts values to other types if specified.
             * @param message GeneratedCodeInfo
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: google.protobuf.GeneratedCodeInfo, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this GeneratedCodeInfo to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for GeneratedCodeInfo
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        namespace GeneratedCodeInfo {

            /** Properties of an Annotation. */
            interface IAnnotation {

                /** Annotation path */
                path?: (number[]|null);

                /** Annotation sourceFile */
                sourceFile?: (string|null);

                /** Annotation begin */
                begin?: (number|null);

                /** Annotation end */
                end?: (number|null);

                /** Annotation semantic */
                semantic?: (google.protobuf.GeneratedCodeInfo.Annotation.Semantic|keyof typeof google.protobuf.GeneratedCodeInfo.Annotation.Semantic|null);
            }

            /** Represents an Annotation. */
            class Annotation implements IAnnotation {

                /**
                 * Constructs a new Annotation.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.protobuf.GeneratedCodeInfo.IAnnotation);

                /** Annotation path. */
                public path: number[];

                /** Annotation sourceFile. */
                public sourceFile: string;

                /** Annotation begin. */
                public begin: number;

                /** Annotation end. */
                public end: number;

                /** Annotation semantic. */
                public semantic: (google.protobuf.GeneratedCodeInfo.Annotation.Semantic|keyof typeof google.protobuf.GeneratedCodeInfo.Annotation.Semantic);

                /**
                 * Creates a new Annotation instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns Annotation instance
                 */
                public static create(properties?: google.protobuf.GeneratedCodeInfo.IAnnotation): google.protobuf.GeneratedCodeInfo.Annotation;

                /**
                 * Encodes the specified Annotation message. Does not implicitly {@link google.protobuf.GeneratedCodeInfo.Annotation.verify|verify} messages.
                 * @param message Annotation message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.protobuf.GeneratedCodeInfo.IAnnotation, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified Annotation message, length delimited. Does not implicitly {@link google.protobuf.GeneratedCodeInfo.Annotation.verify|verify} messages.
                 * @param message Annotation message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.protobuf.GeneratedCodeInfo.IAnnotation, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes an Annotation message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns Annotation
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.GeneratedCodeInfo.Annotation;

                /**
                 * Decodes an Annotation message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns Annotation
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.GeneratedCodeInfo.Annotation;

                /**
                 * Verifies an Annotation message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates an Annotation message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns Annotation
                 */
                public static fromObject(object: { [k: string]: any }): google.protobuf.GeneratedCodeInfo.Annotation;

                /**
                 * Creates a plain object from an Annotation message. Also converts values to other types if specified.
                 * @param message Annotation
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.protobuf.GeneratedCodeInfo.Annotation, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this Annotation to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for Annotation
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            namespace Annotation {

                /** Semantic enum. */
                enum Semantic {
                    NONE = 0,
                    SET = 1,
                    ALIAS = 2
                }
            }
        }

        /** SymbolVisibility enum. */
        enum SymbolVisibility {
            VISIBILITY_UNSET = 0,
            VISIBILITY_LOCAL = 1,
            VISIBILITY_EXPORT = 2
        }

        /** Properties of a Duration. */
        interface IDuration {

            /** Duration seconds */
            seconds?: (number|Long|string|null);

            /** Duration nanos */
            nanos?: (number|null);
        }

        /** Represents a Duration. */
        class Duration implements IDuration {

            /**
             * Constructs a new Duration.
             * @param [properties] Properties to set
             */
            constructor(properties?: google.protobuf.IDuration);

            /** Duration seconds. */
            public seconds: (number|Long|string);

            /** Duration nanos. */
            public nanos: number;

            /**
             * Creates a new Duration instance using the specified properties.
             * @param [properties] Properties to set
             * @returns Duration instance
             */
            public static create(properties?: google.protobuf.IDuration): google.protobuf.Duration;

            /**
             * Encodes the specified Duration message. Does not implicitly {@link google.protobuf.Duration.verify|verify} messages.
             * @param message Duration message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: google.protobuf.IDuration, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified Duration message, length delimited. Does not implicitly {@link google.protobuf.Duration.verify|verify} messages.
             * @param message Duration message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: google.protobuf.IDuration, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a Duration message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns Duration
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.Duration;

            /**
             * Decodes a Duration message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns Duration
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.Duration;

            /**
             * Verifies a Duration message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a Duration message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns Duration
             */
            public static fromObject(object: { [k: string]: any }): google.protobuf.Duration;

            /**
             * Creates a plain object from a Duration message. Also converts values to other types if specified.
             * @param message Duration
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: google.protobuf.Duration, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this Duration to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for Duration
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a FieldMask. */
        interface IFieldMask {

            /** FieldMask paths */
            paths?: (string[]|null);
        }

        /** Represents a FieldMask. */
        class FieldMask implements IFieldMask {

            /**
             * Constructs a new FieldMask.
             * @param [properties] Properties to set
             */
            constructor(properties?: google.protobuf.IFieldMask);

            /** FieldMask paths. */
            public paths: string[];

            /**
             * Creates a new FieldMask instance using the specified properties.
             * @param [properties] Properties to set
             * @returns FieldMask instance
             */
            public static create(properties?: google.protobuf.IFieldMask): google.protobuf.FieldMask;

            /**
             * Encodes the specified FieldMask message. Does not implicitly {@link google.protobuf.FieldMask.verify|verify} messages.
             * @param message FieldMask message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: google.protobuf.IFieldMask, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified FieldMask message, length delimited. Does not implicitly {@link google.protobuf.FieldMask.verify|verify} messages.
             * @param message FieldMask message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: google.protobuf.IFieldMask, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a FieldMask message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns FieldMask
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.FieldMask;

            /**
             * Decodes a FieldMask message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns FieldMask
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.FieldMask;

            /**
             * Verifies a FieldMask message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a FieldMask message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns FieldMask
             */
            public static fromObject(object: { [k: string]: any }): google.protobuf.FieldMask;

            /**
             * Creates a plain object from a FieldMask message. Also converts values to other types if specified.
             * @param message FieldMask
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: google.protobuf.FieldMask, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this FieldMask to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for FieldMask
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of an Any. */
        interface IAny {

            /** Any type_url */
            type_url?: (string|null);

            /** Any value */
            value?: (Uint8Array|Buffer|string|null);
        }

        /** Represents an Any. */
        class Any implements IAny {

            /**
             * Constructs a new Any.
             * @param [properties] Properties to set
             */
            constructor(properties?: google.protobuf.IAny);

            /** Any type_url. */
            public type_url: string;

            /** Any value. */
            public value: (Uint8Array|Buffer|string);

            /**
             * Creates a new Any instance using the specified properties.
             * @param [properties] Properties to set
             * @returns Any instance
             */
            public static create(properties?: google.protobuf.IAny): google.protobuf.Any;

            /**
             * Encodes the specified Any message. Does not implicitly {@link google.protobuf.Any.verify|verify} messages.
             * @param message Any message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: google.protobuf.IAny, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified Any message, length delimited. Does not implicitly {@link google.protobuf.Any.verify|verify} messages.
             * @param message Any message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: google.protobuf.IAny, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes an Any message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns Any
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.Any;

            /**
             * Decodes an Any message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns Any
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.Any;

            /**
             * Verifies an Any message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates an Any message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns Any
             */
            public static fromObject(object: { [k: string]: any }): google.protobuf.Any;

            /**
             * Creates a plain object from an Any message. Also converts values to other types if specified.
             * @param message Any
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: google.protobuf.Any, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this Any to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for Any
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of an Empty. */
        interface IEmpty {
        }

        /** Represents an Empty. */
        class Empty implements IEmpty {

            /**
             * Constructs a new Empty.
             * @param [properties] Properties to set
             */
            constructor(properties?: google.protobuf.IEmpty);

            /**
             * Creates a new Empty instance using the specified properties.
             * @param [properties] Properties to set
             * @returns Empty instance
             */
            public static create(properties?: google.protobuf.IEmpty): google.protobuf.Empty;

            /**
             * Encodes the specified Empty message. Does not implicitly {@link google.protobuf.Empty.verify|verify} messages.
             * @param message Empty message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: google.protobuf.IEmpty, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified Empty message, length delimited. Does not implicitly {@link google.protobuf.Empty.verify|verify} messages.
             * @param message Empty message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: google.protobuf.IEmpty, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes an Empty message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns Empty
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.Empty;

            /**
             * Decodes an Empty message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns Empty
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.Empty;

            /**
             * Verifies an Empty message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates an Empty message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns Empty
             */
            public static fromObject(object: { [k: string]: any }): google.protobuf.Empty;

            /**
             * Creates a plain object from an Empty message. Also converts values to other types if specified.
             * @param message Empty
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: google.protobuf.Empty, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this Empty to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for Empty
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a Timestamp. */
        interface ITimestamp {

            /** Timestamp seconds */
            seconds?: (number|Long|string|null);

            /** Timestamp nanos */
            nanos?: (number|null);
        }

        /** Represents a Timestamp. */
        class Timestamp implements ITimestamp {

            /**
             * Constructs a new Timestamp.
             * @param [properties] Properties to set
             */
            constructor(properties?: google.protobuf.ITimestamp);

            /** Timestamp seconds. */
            public seconds: (number|Long|string);

            /** Timestamp nanos. */
            public nanos: number;

            /**
             * Creates a new Timestamp instance using the specified properties.
             * @param [properties] Properties to set
             * @returns Timestamp instance
             */
            public static create(properties?: google.protobuf.ITimestamp): google.protobuf.Timestamp;

            /**
             * Encodes the specified Timestamp message. Does not implicitly {@link google.protobuf.Timestamp.verify|verify} messages.
             * @param message Timestamp message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: google.protobuf.ITimestamp, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified Timestamp message, length delimited. Does not implicitly {@link google.protobuf.Timestamp.verify|verify} messages.
             * @param message Timestamp message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: google.protobuf.ITimestamp, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a Timestamp message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns Timestamp
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.Timestamp;

            /**
             * Decodes a Timestamp message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns Timestamp
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.Timestamp;

            /**
             * Verifies a Timestamp message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a Timestamp message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns Timestamp
             */
            public static fromObject(object: { [k: string]: any }): google.protobuf.Timestamp;

            /**
             * Creates a plain object from a Timestamp message. Also converts values to other types if specified.
             * @param message Timestamp
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: google.protobuf.Timestamp, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this Timestamp to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for Timestamp
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }
    }

    /** Namespace iam. */
    namespace iam {

        /** Namespace v1. */
        namespace v1 {

            /** Represents a IAMPolicy */
            class IAMPolicy extends $protobuf.rpc.Service {

                /**
                 * Constructs a new IAMPolicy service.
                 * @param rpcImpl RPC implementation
                 * @param [requestDelimited=false] Whether requests are length-delimited
                 * @param [responseDelimited=false] Whether responses are length-delimited
                 */
                constructor(rpcImpl: $protobuf.RPCImpl, requestDelimited?: boolean, responseDelimited?: boolean);

                /**
                 * Creates new IAMPolicy service using the specified rpc implementation.
                 * @param rpcImpl RPC implementation
                 * @param [requestDelimited=false] Whether requests are length-delimited
                 * @param [responseDelimited=false] Whether responses are length-delimited
                 * @returns RPC service. Useful where requests and/or responses are streamed.
                 */
                public static create(rpcImpl: $protobuf.RPCImpl, requestDelimited?: boolean, responseDelimited?: boolean): IAMPolicy;

                /**
                 * Calls SetIamPolicy.
                 * @param request SetIamPolicyRequest message or plain object
                 * @param callback Node-style callback called with the error, if any, and Policy
                 */
                public setIamPolicy(request: google.iam.v1.ISetIamPolicyRequest, callback: google.iam.v1.IAMPolicy.SetIamPolicyCallback): void;

                /**
                 * Calls SetIamPolicy.
                 * @param request SetIamPolicyRequest message or plain object
                 * @returns Promise
                 */
                public setIamPolicy(request: google.iam.v1.ISetIamPolicyRequest): Promise<google.iam.v1.Policy>;

                /**
                 * Calls GetIamPolicy.
                 * @param request GetIamPolicyRequest message or plain object
                 * @param callback Node-style callback called with the error, if any, and Policy
                 */
                public getIamPolicy(request: google.iam.v1.IGetIamPolicyRequest, callback: google.iam.v1.IAMPolicy.GetIamPolicyCallback): void;

                /**
                 * Calls GetIamPolicy.
                 * @param request GetIamPolicyRequest message or plain object
                 * @returns Promise
                 */
                public getIamPolicy(request: google.iam.v1.IGetIamPolicyRequest): Promise<google.iam.v1.Policy>;

                /**
                 * Calls TestIamPermissions.
                 * @param request TestIamPermissionsRequest message or plain object
                 * @param callback Node-style callback called with the error, if any, and TestIamPermissionsResponse
                 */
                public testIamPermissions(request: google.iam.v1.ITestIamPermissionsRequest, callback: google.iam.v1.IAMPolicy.TestIamPermissionsCallback): void;

                /**
                 * Calls TestIamPermissions.
                 * @param request TestIamPermissionsRequest message or plain object
                 * @returns Promise
                 */
                public testIamPermissions(request: google.iam.v1.ITestIamPermissionsRequest): Promise<google.iam.v1.TestIamPermissionsResponse>;
            }

            namespace IAMPolicy {

                /**
                 * Callback as used by {@link google.iam.v1.IAMPolicy|setIamPolicy}.
                 * @param error Error, if any
                 * @param [response] Policy
                 */
                type SetIamPolicyCallback = (error: (Error|null), response?: google.iam.v1.Policy) => void;

                /**
                 * Callback as used by {@link google.iam.v1.IAMPolicy|getIamPolicy}.
                 * @param error Error, if any
                 * @param [response] Policy
                 */
                type GetIamPolicyCallback = (error: (Error|null), response?: google.iam.v1.Policy) => void;

                /**
                 * Callback as used by {@link google.iam.v1.IAMPolicy|testIamPermissions}.
                 * @param error Error, if any
                 * @param [response] TestIamPermissionsResponse
                 */
                type TestIamPermissionsCallback = (error: (Error|null), response?: google.iam.v1.TestIamPermissionsResponse) => void;
            }

            /** Properties of a SetIamPolicyRequest. */
            interface ISetIamPolicyRequest {

                /** SetIamPolicyRequest resource */
                resource?: (string|null);

                /** SetIamPolicyRequest policy */
                policy?: (google.iam.v1.IPolicy|null);

                /** SetIamPolicyRequest updateMask */
                updateMask?: (google.protobuf.IFieldMask|null);
            }

            /** Represents a SetIamPolicyRequest. */
            class SetIamPolicyRequest implements ISetIamPolicyRequest {

                /**
                 * Constructs a new SetIamPolicyRequest.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.iam.v1.ISetIamPolicyRequest);

                /** SetIamPolicyRequest resource. */
                public resource: string;

                /** SetIamPolicyRequest policy. */
                public policy?: (google.iam.v1.IPolicy|null);

                /** SetIamPolicyRequest updateMask. */
                public updateMask?: (google.protobuf.IFieldMask|null);

                /**
                 * Creates a new SetIamPolicyRequest instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns SetIamPolicyRequest instance
                 */
                public static create(properties?: google.iam.v1.ISetIamPolicyRequest): google.iam.v1.SetIamPolicyRequest;

                /**
                 * Encodes the specified SetIamPolicyRequest message. Does not implicitly {@link google.iam.v1.SetIamPolicyRequest.verify|verify} messages.
                 * @param message SetIamPolicyRequest message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.iam.v1.ISetIamPolicyRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified SetIamPolicyRequest message, length delimited. Does not implicitly {@link google.iam.v1.SetIamPolicyRequest.verify|verify} messages.
                 * @param message SetIamPolicyRequest message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.iam.v1.ISetIamPolicyRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a SetIamPolicyRequest message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns SetIamPolicyRequest
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.iam.v1.SetIamPolicyRequest;

                /**
                 * Decodes a SetIamPolicyRequest message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns SetIamPolicyRequest
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.iam.v1.SetIamPolicyRequest;

                /**
                 * Verifies a SetIamPolicyRequest message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a SetIamPolicyRequest message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns SetIamPolicyRequest
                 */
                public static fromObject(object: { [k: string]: any }): google.iam.v1.SetIamPolicyRequest;

                /**
                 * Creates a plain object from a SetIamPolicyRequest message. Also converts values to other types if specified.
                 * @param message SetIamPolicyRequest
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.iam.v1.SetIamPolicyRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this SetIamPolicyRequest to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for SetIamPolicyRequest
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a GetIamPolicyRequest. */
            interface IGetIamPolicyRequest {

                /** GetIamPolicyRequest resource */
                resource?: (string|null);

                /** GetIamPolicyRequest options */
                options?: (google.iam.v1.IGetPolicyOptions|null);
            }

            /** Represents a GetIamPolicyRequest. */
            class GetIamPolicyRequest implements IGetIamPolicyRequest {

                /**
                 * Constructs a new GetIamPolicyRequest.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.iam.v1.IGetIamPolicyRequest);

                /** GetIamPolicyRequest resource. */
                public resource: string;

                /** GetIamPolicyRequest options. */
                public options?: (google.iam.v1.IGetPolicyOptions|null);

                /**
                 * Creates a new GetIamPolicyRequest instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns GetIamPolicyRequest instance
                 */
                public static create(properties?: google.iam.v1.IGetIamPolicyRequest): google.iam.v1.GetIamPolicyRequest;

                /**
                 * Encodes the specified GetIamPolicyRequest message. Does not implicitly {@link google.iam.v1.GetIamPolicyRequest.verify|verify} messages.
                 * @param message GetIamPolicyRequest message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.iam.v1.IGetIamPolicyRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified GetIamPolicyRequest message, length delimited. Does not implicitly {@link google.iam.v1.GetIamPolicyRequest.verify|verify} messages.
                 * @param message GetIamPolicyRequest message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.iam.v1.IGetIamPolicyRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a GetIamPolicyRequest message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns GetIamPolicyRequest
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.iam.v1.GetIamPolicyRequest;

                /**
                 * Decodes a GetIamPolicyRequest message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns GetIamPolicyRequest
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.iam.v1.GetIamPolicyRequest;

                /**
                 * Verifies a GetIamPolicyRequest message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a GetIamPolicyRequest message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns GetIamPolicyRequest
                 */
                public static fromObject(object: { [k: string]: any }): google.iam.v1.GetIamPolicyRequest;

                /**
                 * Creates a plain object from a GetIamPolicyRequest message. Also converts values to other types if specified.
                 * @param message GetIamPolicyRequest
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.iam.v1.GetIamPolicyRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this GetIamPolicyRequest to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for GetIamPolicyRequest
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a TestIamPermissionsRequest. */
            interface ITestIamPermissionsRequest {

                /** TestIamPermissionsRequest resource */
                resource?: (string|null);

                /** TestIamPermissionsRequest permissions */
                permissions?: (string[]|null);
            }

            /** Represents a TestIamPermissionsRequest. */
            class TestIamPermissionsRequest implements ITestIamPermissionsRequest {

                /**
                 * Constructs a new TestIamPermissionsRequest.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.iam.v1.ITestIamPermissionsRequest);

                /** TestIamPermissionsRequest resource. */
                public resource: string;

                /** TestIamPermissionsRequest permissions. */
                public permissions: string[];

                /**
                 * Creates a new TestIamPermissionsRequest instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns TestIamPermissionsRequest instance
                 */
                public static create(properties?: google.iam.v1.ITestIamPermissionsRequest): google.iam.v1.TestIamPermissionsRequest;

                /**
                 * Encodes the specified TestIamPermissionsRequest message. Does not implicitly {@link google.iam.v1.TestIamPermissionsRequest.verify|verify} messages.
                 * @param message TestIamPermissionsRequest message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.iam.v1.ITestIamPermissionsRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified TestIamPermissionsRequest message, length delimited. Does not implicitly {@link google.iam.v1.TestIamPermissionsRequest.verify|verify} messages.
                 * @param message TestIamPermissionsRequest message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.iam.v1.ITestIamPermissionsRequest, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a TestIamPermissionsRequest message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns TestIamPermissionsRequest
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.iam.v1.TestIamPermissionsRequest;

                /**
                 * Decodes a TestIamPermissionsRequest message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns TestIamPermissionsRequest
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.iam.v1.TestIamPermissionsRequest;

                /**
                 * Verifies a TestIamPermissionsRequest message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a TestIamPermissionsRequest message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns TestIamPermissionsRequest
                 */
                public static fromObject(object: { [k: string]: any }): google.iam.v1.TestIamPermissionsRequest;

                /**
                 * Creates a plain object from a TestIamPermissionsRequest message. Also converts values to other types if specified.
                 * @param message TestIamPermissionsRequest
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.iam.v1.TestIamPermissionsRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this TestIamPermissionsRequest to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for TestIamPermissionsRequest
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a TestIamPermissionsResponse. */
            interface ITestIamPermissionsResponse {

                /** TestIamPermissionsResponse permissions */
                permissions?: (string[]|null);
            }

            /** Represents a TestIamPermissionsResponse. */
            class TestIamPermissionsResponse implements ITestIamPermissionsResponse {

                /**
                 * Constructs a new TestIamPermissionsResponse.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.iam.v1.ITestIamPermissionsResponse);

                /** TestIamPermissionsResponse permissions. */
                public permissions: string[];

                /**
                 * Creates a new TestIamPermissionsResponse instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns TestIamPermissionsResponse instance
                 */
                public static create(properties?: google.iam.v1.ITestIamPermissionsResponse): google.iam.v1.TestIamPermissionsResponse;

                /**
                 * Encodes the specified TestIamPermissionsResponse message. Does not implicitly {@link google.iam.v1.TestIamPermissionsResponse.verify|verify} messages.
                 * @param message TestIamPermissionsResponse message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.iam.v1.ITestIamPermissionsResponse, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified TestIamPermissionsResponse message, length delimited. Does not implicitly {@link google.iam.v1.TestIamPermissionsResponse.verify|verify} messages.
                 * @param message TestIamPermissionsResponse message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.iam.v1.ITestIamPermissionsResponse, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a TestIamPermissionsResponse message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns TestIamPermissionsResponse
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.iam.v1.TestIamPermissionsResponse;

                /**
                 * Decodes a TestIamPermissionsResponse message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns TestIamPermissionsResponse
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.iam.v1.TestIamPermissionsResponse;

                /**
                 * Verifies a TestIamPermissionsResponse message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a TestIamPermissionsResponse message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns TestIamPermissionsResponse
                 */
                public static fromObject(object: { [k: string]: any }): google.iam.v1.TestIamPermissionsResponse;

                /**
                 * Creates a plain object from a TestIamPermissionsResponse message. Also converts values to other types if specified.
                 * @param message TestIamPermissionsResponse
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.iam.v1.TestIamPermissionsResponse, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this TestIamPermissionsResponse to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for TestIamPermissionsResponse
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a GetPolicyOptions. */
            interface IGetPolicyOptions {

                /** GetPolicyOptions requestedPolicyVersion */
                requestedPolicyVersion?: (number|null);
            }

            /** Represents a GetPolicyOptions. */
            class GetPolicyOptions implements IGetPolicyOptions {

                /**
                 * Constructs a new GetPolicyOptions.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.iam.v1.IGetPolicyOptions);

                /** GetPolicyOptions requestedPolicyVersion. */
                public requestedPolicyVersion: number;

                /**
                 * Creates a new GetPolicyOptions instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns GetPolicyOptions instance
                 */
                public static create(properties?: google.iam.v1.IGetPolicyOptions): google.iam.v1.GetPolicyOptions;

                /**
                 * Encodes the specified GetPolicyOptions message. Does not implicitly {@link google.iam.v1.GetPolicyOptions.verify|verify} messages.
                 * @param message GetPolicyOptions message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.iam.v1.IGetPolicyOptions, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified GetPolicyOptions message, length delimited. Does not implicitly {@link google.iam.v1.GetPolicyOptions.verify|verify} messages.
                 * @param message GetPolicyOptions message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.iam.v1.IGetPolicyOptions, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a GetPolicyOptions message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns GetPolicyOptions
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.iam.v1.GetPolicyOptions;

                /**
                 * Decodes a GetPolicyOptions message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns GetPolicyOptions
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.iam.v1.GetPolicyOptions;

                /**
                 * Verifies a GetPolicyOptions message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a GetPolicyOptions message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns GetPolicyOptions
                 */
                public static fromObject(object: { [k: string]: any }): google.iam.v1.GetPolicyOptions;

                /**
                 * Creates a plain object from a GetPolicyOptions message. Also converts values to other types if specified.
                 * @param message GetPolicyOptions
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.iam.v1.GetPolicyOptions, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this GetPolicyOptions to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for GetPolicyOptions
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a Policy. */
            interface IPolicy {

                /** Policy version */
                version?: (number|null);

                /** Policy bindings */
                bindings?: (google.iam.v1.IBinding[]|null);

                /** Policy auditConfigs */
                auditConfigs?: (google.iam.v1.IAuditConfig[]|null);

                /** Policy etag */
                etag?: (Uint8Array|Buffer|string|null);
            }

            /** Represents a Policy. */
            class Policy implements IPolicy {

                /**
                 * Constructs a new Policy.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.iam.v1.IPolicy);

                /** Policy version. */
                public version: number;

                /** Policy bindings. */
                public bindings: google.iam.v1.IBinding[];

                /** Policy auditConfigs. */
                public auditConfigs: google.iam.v1.IAuditConfig[];

                /** Policy etag. */
                public etag: (Uint8Array|Buffer|string);

                /**
                 * Creates a new Policy instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns Policy instance
                 */
                public static create(properties?: google.iam.v1.IPolicy): google.iam.v1.Policy;

                /**
                 * Encodes the specified Policy message. Does not implicitly {@link google.iam.v1.Policy.verify|verify} messages.
                 * @param message Policy message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.iam.v1.IPolicy, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified Policy message, length delimited. Does not implicitly {@link google.iam.v1.Policy.verify|verify} messages.
                 * @param message Policy message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.iam.v1.IPolicy, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a Policy message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns Policy
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.iam.v1.Policy;

                /**
                 * Decodes a Policy message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns Policy
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.iam.v1.Policy;

                /**
                 * Verifies a Policy message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a Policy message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns Policy
                 */
                public static fromObject(object: { [k: string]: any }): google.iam.v1.Policy;

                /**
                 * Creates a plain object from a Policy message. Also converts values to other types if specified.
                 * @param message Policy
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.iam.v1.Policy, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this Policy to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for Policy
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a Binding. */
            interface IBinding {

                /** Binding role */
                role?: (string|null);

                /** Binding members */
                members?: (string[]|null);

                /** Binding condition */
                condition?: (google.type.IExpr|null);
            }

            /** Represents a Binding. */
            class Binding implements IBinding {

                /**
                 * Constructs a new Binding.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.iam.v1.IBinding);

                /** Binding role. */
                public role: string;

                /** Binding members. */
                public members: string[];

                /** Binding condition. */
                public condition?: (google.type.IExpr|null);

                /**
                 * Creates a new Binding instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns Binding instance
                 */
                public static create(properties?: google.iam.v1.IBinding): google.iam.v1.Binding;

                /**
                 * Encodes the specified Binding message. Does not implicitly {@link google.iam.v1.Binding.verify|verify} messages.
                 * @param message Binding message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.iam.v1.IBinding, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified Binding message, length delimited. Does not implicitly {@link google.iam.v1.Binding.verify|verify} messages.
                 * @param message Binding message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.iam.v1.IBinding, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a Binding message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns Binding
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.iam.v1.Binding;

                /**
                 * Decodes a Binding message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns Binding
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.iam.v1.Binding;

                /**
                 * Verifies a Binding message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a Binding message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns Binding
                 */
                public static fromObject(object: { [k: string]: any }): google.iam.v1.Binding;

                /**
                 * Creates a plain object from a Binding message. Also converts values to other types if specified.
                 * @param message Binding
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.iam.v1.Binding, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this Binding to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for Binding
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of an AuditConfig. */
            interface IAuditConfig {

                /** AuditConfig service */
                service?: (string|null);

                /** AuditConfig auditLogConfigs */
                auditLogConfigs?: (google.iam.v1.IAuditLogConfig[]|null);
            }

            /** Represents an AuditConfig. */
            class AuditConfig implements IAuditConfig {

                /**
                 * Constructs a new AuditConfig.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.iam.v1.IAuditConfig);

                /** AuditConfig service. */
                public service: string;

                /** AuditConfig auditLogConfigs. */
                public auditLogConfigs: google.iam.v1.IAuditLogConfig[];

                /**
                 * Creates a new AuditConfig instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns AuditConfig instance
                 */
                public static create(properties?: google.iam.v1.IAuditConfig): google.iam.v1.AuditConfig;

                /**
                 * Encodes the specified AuditConfig message. Does not implicitly {@link google.iam.v1.AuditConfig.verify|verify} messages.
                 * @param message AuditConfig message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.iam.v1.IAuditConfig, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified AuditConfig message, length delimited. Does not implicitly {@link google.iam.v1.AuditConfig.verify|verify} messages.
                 * @param message AuditConfig message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.iam.v1.IAuditConfig, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes an AuditConfig message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns AuditConfig
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.iam.v1.AuditConfig;

                /**
                 * Decodes an AuditConfig message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns AuditConfig
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.iam.v1.AuditConfig;

                /**
                 * Verifies an AuditConfig message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates an AuditConfig message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns AuditConfig
                 */
                public static fromObject(object: { [k: string]: any }): google.iam.v1.AuditConfig;

                /**
                 * Creates a plain object from an AuditConfig message. Also converts values to other types if specified.
                 * @param message AuditConfig
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.iam.v1.AuditConfig, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this AuditConfig to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for AuditConfig
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of an AuditLogConfig. */
            interface IAuditLogConfig {

                /** AuditLogConfig logType */
                logType?: (google.iam.v1.AuditLogConfig.LogType|keyof typeof google.iam.v1.AuditLogConfig.LogType|null);

                /** AuditLogConfig exemptedMembers */
                exemptedMembers?: (string[]|null);
            }

            /** Represents an AuditLogConfig. */
            class AuditLogConfig implements IAuditLogConfig {

                /**
                 * Constructs a new AuditLogConfig.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.iam.v1.IAuditLogConfig);

                /** AuditLogConfig logType. */
                public logType: (google.iam.v1.AuditLogConfig.LogType|keyof typeof google.iam.v1.AuditLogConfig.LogType);

                /** AuditLogConfig exemptedMembers. */
                public exemptedMembers: string[];

                /**
                 * Creates a new AuditLogConfig instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns AuditLogConfig instance
                 */
                public static create(properties?: google.iam.v1.IAuditLogConfig): google.iam.v1.AuditLogConfig;

                /**
                 * Encodes the specified AuditLogConfig message. Does not implicitly {@link google.iam.v1.AuditLogConfig.verify|verify} messages.
                 * @param message AuditLogConfig message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.iam.v1.IAuditLogConfig, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified AuditLogConfig message, length delimited. Does not implicitly {@link google.iam.v1.AuditLogConfig.verify|verify} messages.
                 * @param message AuditLogConfig message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.iam.v1.IAuditLogConfig, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes an AuditLogConfig message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns AuditLogConfig
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.iam.v1.AuditLogConfig;

                /**
                 * Decodes an AuditLogConfig message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns AuditLogConfig
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.iam.v1.AuditLogConfig;

                /**
                 * Verifies an AuditLogConfig message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates an AuditLogConfig message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns AuditLogConfig
                 */
                public static fromObject(object: { [k: string]: any }): google.iam.v1.AuditLogConfig;

                /**
                 * Creates a plain object from an AuditLogConfig message. Also converts values to other types if specified.
                 * @param message AuditLogConfig
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.iam.v1.AuditLogConfig, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this AuditLogConfig to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for AuditLogConfig
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            namespace AuditLogConfig {

                /** LogType enum. */
                enum LogType {
                    LOG_TYPE_UNSPECIFIED = 0,
                    ADMIN_READ = 1,
                    DATA_WRITE = 2,
                    DATA_READ = 3
                }
            }

            /** Properties of a PolicyDelta. */
            interface IPolicyDelta {

                /** PolicyDelta bindingDeltas */
                bindingDeltas?: (google.iam.v1.IBindingDelta[]|null);

                /** PolicyDelta auditConfigDeltas */
                auditConfigDeltas?: (google.iam.v1.IAuditConfigDelta[]|null);
            }

            /** Represents a PolicyDelta. */
            class PolicyDelta implements IPolicyDelta {

                /**
                 * Constructs a new PolicyDelta.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.iam.v1.IPolicyDelta);

                /** PolicyDelta bindingDeltas. */
                public bindingDeltas: google.iam.v1.IBindingDelta[];

                /** PolicyDelta auditConfigDeltas. */
                public auditConfigDeltas: google.iam.v1.IAuditConfigDelta[];

                /**
                 * Creates a new PolicyDelta instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns PolicyDelta instance
                 */
                public static create(properties?: google.iam.v1.IPolicyDelta): google.iam.v1.PolicyDelta;

                /**
                 * Encodes the specified PolicyDelta message. Does not implicitly {@link google.iam.v1.PolicyDelta.verify|verify} messages.
                 * @param message PolicyDelta message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.iam.v1.IPolicyDelta, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified PolicyDelta message, length delimited. Does not implicitly {@link google.iam.v1.PolicyDelta.verify|verify} messages.
                 * @param message PolicyDelta message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.iam.v1.IPolicyDelta, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a PolicyDelta message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns PolicyDelta
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.iam.v1.PolicyDelta;

                /**
                 * Decodes a PolicyDelta message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns PolicyDelta
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.iam.v1.PolicyDelta;

                /**
                 * Verifies a PolicyDelta message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a PolicyDelta message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns PolicyDelta
                 */
                public static fromObject(object: { [k: string]: any }): google.iam.v1.PolicyDelta;

                /**
                 * Creates a plain object from a PolicyDelta message. Also converts values to other types if specified.
                 * @param message PolicyDelta
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.iam.v1.PolicyDelta, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this PolicyDelta to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for PolicyDelta
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            /** Properties of a BindingDelta. */
            interface IBindingDelta {

                /** BindingDelta action */
                action?: (google.iam.v1.BindingDelta.Action|keyof typeof google.iam.v1.BindingDelta.Action|null);

                /** BindingDelta role */
                role?: (string|null);

                /** BindingDelta member */
                member?: (string|null);

                /** BindingDelta condition */
                condition?: (google.type.IExpr|null);
            }

            /** Represents a BindingDelta. */
            class BindingDelta implements IBindingDelta {

                /**
                 * Constructs a new BindingDelta.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.iam.v1.IBindingDelta);

                /** BindingDelta action. */
                public action: (google.iam.v1.BindingDelta.Action|keyof typeof google.iam.v1.BindingDelta.Action);

                /** BindingDelta role. */
                public role: string;

                /** BindingDelta member. */
                public member: string;

                /** BindingDelta condition. */
                public condition?: (google.type.IExpr|null);

                /**
                 * Creates a new BindingDelta instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns BindingDelta instance
                 */
                public static create(properties?: google.iam.v1.IBindingDelta): google.iam.v1.BindingDelta;

                /**
                 * Encodes the specified BindingDelta message. Does not implicitly {@link google.iam.v1.BindingDelta.verify|verify} messages.
                 * @param message BindingDelta message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.iam.v1.IBindingDelta, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified BindingDelta message, length delimited. Does not implicitly {@link google.iam.v1.BindingDelta.verify|verify} messages.
                 * @param message BindingDelta message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.iam.v1.IBindingDelta, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes a BindingDelta message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns BindingDelta
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.iam.v1.BindingDelta;

                /**
                 * Decodes a BindingDelta message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns BindingDelta
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.iam.v1.BindingDelta;

                /**
                 * Verifies a BindingDelta message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates a BindingDelta message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns BindingDelta
                 */
                public static fromObject(object: { [k: string]: any }): google.iam.v1.BindingDelta;

                /**
                 * Creates a plain object from a BindingDelta message. Also converts values to other types if specified.
                 * @param message BindingDelta
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.iam.v1.BindingDelta, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this BindingDelta to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for BindingDelta
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            namespace BindingDelta {

                /** Action enum. */
                enum Action {
                    ACTION_UNSPECIFIED = 0,
                    ADD = 1,
                    REMOVE = 2
                }
            }

            /** Properties of an AuditConfigDelta. */
            interface IAuditConfigDelta {

                /** AuditConfigDelta action */
                action?: (google.iam.v1.AuditConfigDelta.Action|keyof typeof google.iam.v1.AuditConfigDelta.Action|null);

                /** AuditConfigDelta service */
                service?: (string|null);

                /** AuditConfigDelta exemptedMember */
                exemptedMember?: (string|null);

                /** AuditConfigDelta logType */
                logType?: (string|null);
            }

            /** Represents an AuditConfigDelta. */
            class AuditConfigDelta implements IAuditConfigDelta {

                /**
                 * Constructs a new AuditConfigDelta.
                 * @param [properties] Properties to set
                 */
                constructor(properties?: google.iam.v1.IAuditConfigDelta);

                /** AuditConfigDelta action. */
                public action: (google.iam.v1.AuditConfigDelta.Action|keyof typeof google.iam.v1.AuditConfigDelta.Action);

                /** AuditConfigDelta service. */
                public service: string;

                /** AuditConfigDelta exemptedMember. */
                public exemptedMember: string;

                /** AuditConfigDelta logType. */
                public logType: string;

                /**
                 * Creates a new AuditConfigDelta instance using the specified properties.
                 * @param [properties] Properties to set
                 * @returns AuditConfigDelta instance
                 */
                public static create(properties?: google.iam.v1.IAuditConfigDelta): google.iam.v1.AuditConfigDelta;

                /**
                 * Encodes the specified AuditConfigDelta message. Does not implicitly {@link google.iam.v1.AuditConfigDelta.verify|verify} messages.
                 * @param message AuditConfigDelta message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encode(message: google.iam.v1.IAuditConfigDelta, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Encodes the specified AuditConfigDelta message, length delimited. Does not implicitly {@link google.iam.v1.AuditConfigDelta.verify|verify} messages.
                 * @param message AuditConfigDelta message or plain object to encode
                 * @param [writer] Writer to encode to
                 * @returns Writer
                 */
                public static encodeDelimited(message: google.iam.v1.IAuditConfigDelta, writer?: $protobuf.Writer): $protobuf.Writer;

                /**
                 * Decodes an AuditConfigDelta message from the specified reader or buffer.
                 * @param reader Reader or buffer to decode from
                 * @param [length] Message length if known beforehand
                 * @returns AuditConfigDelta
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.iam.v1.AuditConfigDelta;

                /**
                 * Decodes an AuditConfigDelta message from the specified reader or buffer, length delimited.
                 * @param reader Reader or buffer to decode from
                 * @returns AuditConfigDelta
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.iam.v1.AuditConfigDelta;

                /**
                 * Verifies an AuditConfigDelta message.
                 * @param message Plain object to verify
                 * @returns `null` if valid, otherwise the reason why it is not
                 */
                public static verify(message: { [k: string]: any }): (string|null);

                /**
                 * Creates an AuditConfigDelta message from a plain object. Also converts values to their respective internal types.
                 * @param object Plain object
                 * @returns AuditConfigDelta
                 */
                public static fromObject(object: { [k: string]: any }): google.iam.v1.AuditConfigDelta;

                /**
                 * Creates a plain object from an AuditConfigDelta message. Also converts values to other types if specified.
                 * @param message AuditConfigDelta
                 * @param [options] Conversion options
                 * @returns Plain object
                 */
                public static toObject(message: google.iam.v1.AuditConfigDelta, options?: $protobuf.IConversionOptions): { [k: string]: any };

                /**
                 * Converts this AuditConfigDelta to JSON.
                 * @returns JSON object
                 */
                public toJSON(): { [k: string]: any };

                /**
                 * Gets the default type url for AuditConfigDelta
                 * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
                 * @returns The default type url
                 */
                public static getTypeUrl(typeUrlPrefix?: string): string;
            }

            namespace AuditConfigDelta {

                /** Action enum. */
                enum Action {
                    ACTION_UNSPECIFIED = 0,
                    ADD = 1,
                    REMOVE = 2
                }
            }
        }
    }

    /** Namespace type. */
    namespace type {

        /** Properties of an Expr. */
        interface IExpr {

            /** Expr expression */
            expression?: (string|null);

            /** Expr title */
            title?: (string|null);

            /** Expr description */
            description?: (string|null);

            /** Expr location */
            location?: (string|null);
        }

        /** Represents an Expr. */
        class Expr implements IExpr {

            /**
             * Constructs a new Expr.
             * @param [properties] Properties to set
             */
            constructor(properties?: google.type.IExpr);

            /** Expr expression. */
            public expression: string;

            /** Expr title. */
            public title: string;

            /** Expr description. */
            public description: string;

            /** Expr location. */
            public location: string;

            /**
             * Creates a new Expr instance using the specified properties.
             * @param [properties] Properties to set
             * @returns Expr instance
             */
            public static create(properties?: google.type.IExpr): google.type.Expr;

            /**
             * Encodes the specified Expr message. Does not implicitly {@link google.type.Expr.verify|verify} messages.
             * @param message Expr message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: google.type.IExpr, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified Expr message, length delimited. Does not implicitly {@link google.type.Expr.verify|verify} messages.
             * @param message Expr message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: google.type.IExpr, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes an Expr message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns Expr
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.type.Expr;

            /**
             * Decodes an Expr message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns Expr
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.type.Expr;

            /**
             * Verifies an Expr message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates an Expr message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns Expr
             */
            public static fromObject(object: { [k: string]: any }): google.type.Expr;

            /**
             * Creates a plain object from an Expr message. Also converts values to other types if specified.
             * @param message Expr
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: google.type.Expr, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this Expr to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for Expr
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a Date. */
        interface IDate {

            /** Date year */
            year?: (number|null);

            /** Date month */
            month?: (number|null);

            /** Date day */
            day?: (number|null);
        }

        /** Represents a Date. */
        class Date implements IDate {

            /**
             * Constructs a new Date.
             * @param [properties] Properties to set
             */
            constructor(properties?: google.type.IDate);

            /** Date year. */
            public year: number;

            /** Date month. */
            public month: number;

            /** Date day. */
            public day: number;

            /**
             * Creates a new Date instance using the specified properties.
             * @param [properties] Properties to set
             * @returns Date instance
             */
            public static create(properties?: google.type.IDate): google.type.Date;

            /**
             * Encodes the specified Date message. Does not implicitly {@link google.type.Date.verify|verify} messages.
             * @param message Date message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: google.type.IDate, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified Date message, length delimited. Does not implicitly {@link google.type.Date.verify|verify} messages.
             * @param message Date message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: google.type.IDate, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a Date message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns Date
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.type.Date;

            /**
             * Decodes a Date message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns Date
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.type.Date;

            /**
             * Verifies a Date message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a Date message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns Date
             */
            public static fromObject(object: { [k: string]: any }): google.type.Date;

            /**
             * Creates a plain object from a Date message. Also converts values to other types if specified.
             * @param message Date
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: google.type.Date, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this Date to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for Date
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }
    }

    /** Namespace longrunning. */
    namespace longrunning {

        /** Represents an Operations */
        class Operations extends $protobuf.rpc.Service {

            /**
             * Constructs a new Operations service.
             * @param rpcImpl RPC implementation
             * @param [requestDelimited=false] Whether requests are length-delimited
             * @param [responseDelimited=false] Whether responses are length-delimited
             */
            constructor(rpcImpl: $protobuf.RPCImpl, requestDelimited?: boolean, responseDelimited?: boolean);

            /**
             * Creates new Operations service using the specified rpc implementation.
             * @param rpcImpl RPC implementation
             * @param [requestDelimited=false] Whether requests are length-delimited
             * @param [responseDelimited=false] Whether responses are length-delimited
             * @returns RPC service. Useful where requests and/or responses are streamed.
             */
            public static create(rpcImpl: $protobuf.RPCImpl, requestDelimited?: boolean, responseDelimited?: boolean): Operations;

            /**
             * Calls ListOperations.
             * @param request ListOperationsRequest message or plain object
             * @param callback Node-style callback called with the error, if any, and ListOperationsResponse
             */
            public listOperations(request: google.longrunning.IListOperationsRequest, callback: google.longrunning.Operations.ListOperationsCallback): void;

            /**
             * Calls ListOperations.
             * @param request ListOperationsRequest message or plain object
             * @returns Promise
             */
            public listOperations(request: google.longrunning.IListOperationsRequest): Promise<google.longrunning.ListOperationsResponse>;

            /**
             * Calls GetOperation.
             * @param request GetOperationRequest message or plain object
             * @param callback Node-style callback called with the error, if any, and Operation
             */
            public getOperation(request: google.longrunning.IGetOperationRequest, callback: google.longrunning.Operations.GetOperationCallback): void;

            /**
             * Calls GetOperation.
             * @param request GetOperationRequest message or plain object
             * @returns Promise
             */
            public getOperation(request: google.longrunning.IGetOperationRequest): Promise<google.longrunning.Operation>;

            /**
             * Calls DeleteOperation.
             * @param request DeleteOperationRequest message or plain object
             * @param callback Node-style callback called with the error, if any, and Empty
             */
            public deleteOperation(request: google.longrunning.IDeleteOperationRequest, callback: google.longrunning.Operations.DeleteOperationCallback): void;

            /**
             * Calls DeleteOperation.
             * @param request DeleteOperationRequest message or plain object
             * @returns Promise
             */
            public deleteOperation(request: google.longrunning.IDeleteOperationRequest): Promise<google.protobuf.Empty>;

            /**
             * Calls CancelOperation.
             * @param request CancelOperationRequest message or plain object
             * @param callback Node-style callback called with the error, if any, and Empty
             */
            public cancelOperation(request: google.longrunning.ICancelOperationRequest, callback: google.longrunning.Operations.CancelOperationCallback): void;

            /**
             * Calls CancelOperation.
             * @param request CancelOperationRequest message or plain object
             * @returns Promise
             */
            public cancelOperation(request: google.longrunning.ICancelOperationRequest): Promise<google.protobuf.Empty>;

            /**
             * Calls WaitOperation.
             * @param request WaitOperationRequest message or plain object
             * @param callback Node-style callback called with the error, if any, and Operation
             */
            public waitOperation(request: google.longrunning.IWaitOperationRequest, callback: google.longrunning.Operations.WaitOperationCallback): void;

            /**
             * Calls WaitOperation.
             * @param request WaitOperationRequest message or plain object
             * @returns Promise
             */
            public waitOperation(request: google.longrunning.IWaitOperationRequest): Promise<google.longrunning.Operation>;
        }

        namespace Operations {

            /**
             * Callback as used by {@link google.longrunning.Operations|listOperations}.
             * @param error Error, if any
             * @param [response] ListOperationsResponse
             */
            type ListOperationsCallback = (error: (Error|null), response?: google.longrunning.ListOperationsResponse) => void;

            /**
             * Callback as used by {@link google.longrunning.Operations|getOperation}.
             * @param error Error, if any
             * @param [response] Operation
             */
            type GetOperationCallback = (error: (Error|null), response?: google.longrunning.Operation) => void;

            /**
             * Callback as used by {@link google.longrunning.Operations|deleteOperation}.
             * @param error Error, if any
             * @param [response] Empty
             */
            type DeleteOperationCallback = (error: (Error|null), response?: google.protobuf.Empty) => void;

            /**
             * Callback as used by {@link google.longrunning.Operations|cancelOperation}.
             * @param error Error, if any
             * @param [response] Empty
             */
            type CancelOperationCallback = (error: (Error|null), response?: google.protobuf.Empty) => void;

            /**
             * Callback as used by {@link google.longrunning.Operations|waitOperation}.
             * @param error Error, if any
             * @param [response] Operation
             */
            type WaitOperationCallback = (error: (Error|null), response?: google.longrunning.Operation) => void;
        }

        /** Properties of an Operation. */
        interface IOperation {

            /** Operation name */
            name?: (string|null);

            /** Operation metadata */
            metadata?: (google.protobuf.IAny|null);

            /** Operation done */
            done?: (boolean|null);

            /** Operation error */
            error?: (google.rpc.IStatus|null);

            /** Operation response */
            response?: (google.protobuf.IAny|null);
        }

        /** Represents an Operation. */
        class Operation implements IOperation {

            /**
             * Constructs a new Operation.
             * @param [properties] Properties to set
             */
            constructor(properties?: google.longrunning.IOperation);

            /** Operation name. */
            public name: string;

            /** Operation metadata. */
            public metadata?: (google.protobuf.IAny|null);

            /** Operation done. */
            public done: boolean;

            /** Operation error. */
            public error?: (google.rpc.IStatus|null);

            /** Operation response. */
            public response?: (google.protobuf.IAny|null);

            /** Operation result. */
            public result?: ("error"|"response");

            /**
             * Creates a new Operation instance using the specified properties.
             * @param [properties] Properties to set
             * @returns Operation instance
             */
            public static create(properties?: google.longrunning.IOperation): google.longrunning.Operation;

            /**
             * Encodes the specified Operation message. Does not implicitly {@link google.longrunning.Operation.verify|verify} messages.
             * @param message Operation message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: google.longrunning.IOperation, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified Operation message, length delimited. Does not implicitly {@link google.longrunning.Operation.verify|verify} messages.
             * @param message Operation message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: google.longrunning.IOperation, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes an Operation message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns Operation
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.longrunning.Operation;

            /**
             * Decodes an Operation message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns Operation
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.longrunning.Operation;

            /**
             * Verifies an Operation message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates an Operation message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns Operation
             */
            public static fromObject(object: { [k: string]: any }): google.longrunning.Operation;

            /**
             * Creates a plain object from an Operation message. Also converts values to other types if specified.
             * @param message Operation
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: google.longrunning.Operation, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this Operation to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for Operation
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a GetOperationRequest. */
        interface IGetOperationRequest {

            /** GetOperationRequest name */
            name?: (string|null);
        }

        /** Represents a GetOperationRequest. */
        class GetOperationRequest implements IGetOperationRequest {

            /**
             * Constructs a new GetOperationRequest.
             * @param [properties] Properties to set
             */
            constructor(properties?: google.longrunning.IGetOperationRequest);

            /** GetOperationRequest name. */
            public name: string;

            /**
             * Creates a new GetOperationRequest instance using the specified properties.
             * @param [properties] Properties to set
             * @returns GetOperationRequest instance
             */
            public static create(properties?: google.longrunning.IGetOperationRequest): google.longrunning.GetOperationRequest;

            /**
             * Encodes the specified GetOperationRequest message. Does not implicitly {@link google.longrunning.GetOperationRequest.verify|verify} messages.
             * @param message GetOperationRequest message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: google.longrunning.IGetOperationRequest, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified GetOperationRequest message, length delimited. Does not implicitly {@link google.longrunning.GetOperationRequest.verify|verify} messages.
             * @param message GetOperationRequest message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: google.longrunning.IGetOperationRequest, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a GetOperationRequest message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns GetOperationRequest
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.longrunning.GetOperationRequest;

            /**
             * Decodes a GetOperationRequest message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns GetOperationRequest
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.longrunning.GetOperationRequest;

            /**
             * Verifies a GetOperationRequest message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a GetOperationRequest message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns GetOperationRequest
             */
            public static fromObject(object: { [k: string]: any }): google.longrunning.GetOperationRequest;

            /**
             * Creates a plain object from a GetOperationRequest message. Also converts values to other types if specified.
             * @param message GetOperationRequest
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: google.longrunning.GetOperationRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this GetOperationRequest to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for GetOperationRequest
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a ListOperationsRequest. */
        interface IListOperationsRequest {

            /** ListOperationsRequest name */
            name?: (string|null);

            /** ListOperationsRequest filter */
            filter?: (string|null);

            /** ListOperationsRequest pageSize */
            pageSize?: (number|null);

            /** ListOperationsRequest pageToken */
            pageToken?: (string|null);
        }

        /** Represents a ListOperationsRequest. */
        class ListOperationsRequest implements IListOperationsRequest {

            /**
             * Constructs a new ListOperationsRequest.
             * @param [properties] Properties to set
             */
            constructor(properties?: google.longrunning.IListOperationsRequest);

            /** ListOperationsRequest name. */
            public name: string;

            /** ListOperationsRequest filter. */
            public filter: string;

            /** ListOperationsRequest pageSize. */
            public pageSize: number;

            /** ListOperationsRequest pageToken. */
            public pageToken: string;

            /**
             * Creates a new ListOperationsRequest instance using the specified properties.
             * @param [properties] Properties to set
             * @returns ListOperationsRequest instance
             */
            public static create(properties?: google.longrunning.IListOperationsRequest): google.longrunning.ListOperationsRequest;

            /**
             * Encodes the specified ListOperationsRequest message. Does not implicitly {@link google.longrunning.ListOperationsRequest.verify|verify} messages.
             * @param message ListOperationsRequest message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: google.longrunning.IListOperationsRequest, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified ListOperationsRequest message, length delimited. Does not implicitly {@link google.longrunning.ListOperationsRequest.verify|verify} messages.
             * @param message ListOperationsRequest message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: google.longrunning.IListOperationsRequest, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a ListOperationsRequest message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns ListOperationsRequest
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.longrunning.ListOperationsRequest;

            /**
             * Decodes a ListOperationsRequest message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns ListOperationsRequest
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.longrunning.ListOperationsRequest;

            /**
             * Verifies a ListOperationsRequest message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a ListOperationsRequest message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns ListOperationsRequest
             */
            public static fromObject(object: { [k: string]: any }): google.longrunning.ListOperationsRequest;

            /**
             * Creates a plain object from a ListOperationsRequest message. Also converts values to other types if specified.
             * @param message ListOperationsRequest
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: google.longrunning.ListOperationsRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this ListOperationsRequest to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for ListOperationsRequest
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a ListOperationsResponse. */
        interface IListOperationsResponse {

            /** ListOperationsResponse operations */
            operations?: (google.longrunning.IOperation[]|null);

            /** ListOperationsResponse nextPageToken */
            nextPageToken?: (string|null);
        }

        /** Represents a ListOperationsResponse. */
        class ListOperationsResponse implements IListOperationsResponse {

            /**
             * Constructs a new ListOperationsResponse.
             * @param [properties] Properties to set
             */
            constructor(properties?: google.longrunning.IListOperationsResponse);

            /** ListOperationsResponse operations. */
            public operations: google.longrunning.IOperation[];

            /** ListOperationsResponse nextPageToken. */
            public nextPageToken: string;

            /**
             * Creates a new ListOperationsResponse instance using the specified properties.
             * @param [properties] Properties to set
             * @returns ListOperationsResponse instance
             */
            public static create(properties?: google.longrunning.IListOperationsResponse): google.longrunning.ListOperationsResponse;

            /**
             * Encodes the specified ListOperationsResponse message. Does not implicitly {@link google.longrunning.ListOperationsResponse.verify|verify} messages.
             * @param message ListOperationsResponse message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: google.longrunning.IListOperationsResponse, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified ListOperationsResponse message, length delimited. Does not implicitly {@link google.longrunning.ListOperationsResponse.verify|verify} messages.
             * @param message ListOperationsResponse message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: google.longrunning.IListOperationsResponse, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a ListOperationsResponse message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns ListOperationsResponse
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.longrunning.ListOperationsResponse;

            /**
             * Decodes a ListOperationsResponse message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns ListOperationsResponse
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.longrunning.ListOperationsResponse;

            /**
             * Verifies a ListOperationsResponse message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a ListOperationsResponse message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns ListOperationsResponse
             */
            public static fromObject(object: { [k: string]: any }): google.longrunning.ListOperationsResponse;

            /**
             * Creates a plain object from a ListOperationsResponse message. Also converts values to other types if specified.
             * @param message ListOperationsResponse
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: google.longrunning.ListOperationsResponse, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this ListOperationsResponse to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for ListOperationsResponse
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a CancelOperationRequest. */
        interface ICancelOperationRequest {

            /** CancelOperationRequest name */
            name?: (string|null);
        }

        /** Represents a CancelOperationRequest. */
        class CancelOperationRequest implements ICancelOperationRequest {

            /**
             * Constructs a new CancelOperationRequest.
             * @param [properties] Properties to set
             */
            constructor(properties?: google.longrunning.ICancelOperationRequest);

            /** CancelOperationRequest name. */
            public name: string;

            /**
             * Creates a new CancelOperationRequest instance using the specified properties.
             * @param [properties] Properties to set
             * @returns CancelOperationRequest instance
             */
            public static create(properties?: google.longrunning.ICancelOperationRequest): google.longrunning.CancelOperationRequest;

            /**
             * Encodes the specified CancelOperationRequest message. Does not implicitly {@link google.longrunning.CancelOperationRequest.verify|verify} messages.
             * @param message CancelOperationRequest message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: google.longrunning.ICancelOperationRequest, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified CancelOperationRequest message, length delimited. Does not implicitly {@link google.longrunning.CancelOperationRequest.verify|verify} messages.
             * @param message CancelOperationRequest message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: google.longrunning.ICancelOperationRequest, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a CancelOperationRequest message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns CancelOperationRequest
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.longrunning.CancelOperationRequest;

            /**
             * Decodes a CancelOperationRequest message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns CancelOperationRequest
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.longrunning.CancelOperationRequest;

            /**
             * Verifies a CancelOperationRequest message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a CancelOperationRequest message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns CancelOperationRequest
             */
            public static fromObject(object: { [k: string]: any }): google.longrunning.CancelOperationRequest;

            /**
             * Creates a plain object from a CancelOperationRequest message. Also converts values to other types if specified.
             * @param message CancelOperationRequest
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: google.longrunning.CancelOperationRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this CancelOperationRequest to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for CancelOperationRequest
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a DeleteOperationRequest. */
        interface IDeleteOperationRequest {

            /** DeleteOperationRequest name */
            name?: (string|null);
        }

        /** Represents a DeleteOperationRequest. */
        class DeleteOperationRequest implements IDeleteOperationRequest {

            /**
             * Constructs a new DeleteOperationRequest.
             * @param [properties] Properties to set
             */
            constructor(properties?: google.longrunning.IDeleteOperationRequest);

            /** DeleteOperationRequest name. */
            public name: string;

            /**
             * Creates a new DeleteOperationRequest instance using the specified properties.
             * @param [properties] Properties to set
             * @returns DeleteOperationRequest instance
             */
            public static create(properties?: google.longrunning.IDeleteOperationRequest): google.longrunning.DeleteOperationRequest;

            /**
             * Encodes the specified DeleteOperationRequest message. Does not implicitly {@link google.longrunning.DeleteOperationRequest.verify|verify} messages.
             * @param message DeleteOperationRequest message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: google.longrunning.IDeleteOperationRequest, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified DeleteOperationRequest message, length delimited. Does not implicitly {@link google.longrunning.DeleteOperationRequest.verify|verify} messages.
             * @param message DeleteOperationRequest message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: google.longrunning.IDeleteOperationRequest, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a DeleteOperationRequest message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns DeleteOperationRequest
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.longrunning.DeleteOperationRequest;

            /**
             * Decodes a DeleteOperationRequest message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns DeleteOperationRequest
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.longrunning.DeleteOperationRequest;

            /**
             * Verifies a DeleteOperationRequest message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a DeleteOperationRequest message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns DeleteOperationRequest
             */
            public static fromObject(object: { [k: string]: any }): google.longrunning.DeleteOperationRequest;

            /**
             * Creates a plain object from a DeleteOperationRequest message. Also converts values to other types if specified.
             * @param message DeleteOperationRequest
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: google.longrunning.DeleteOperationRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this DeleteOperationRequest to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for DeleteOperationRequest
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of a WaitOperationRequest. */
        interface IWaitOperationRequest {

            /** WaitOperationRequest name */
            name?: (string|null);

            /** WaitOperationRequest timeout */
            timeout?: (google.protobuf.IDuration|null);
        }

        /** Represents a WaitOperationRequest. */
        class WaitOperationRequest implements IWaitOperationRequest {

            /**
             * Constructs a new WaitOperationRequest.
             * @param [properties] Properties to set
             */
            constructor(properties?: google.longrunning.IWaitOperationRequest);

            /** WaitOperationRequest name. */
            public name: string;

            /** WaitOperationRequest timeout. */
            public timeout?: (google.protobuf.IDuration|null);

            /**
             * Creates a new WaitOperationRequest instance using the specified properties.
             * @param [properties] Properties to set
             * @returns WaitOperationRequest instance
             */
            public static create(properties?: google.longrunning.IWaitOperationRequest): google.longrunning.WaitOperationRequest;

            /**
             * Encodes the specified WaitOperationRequest message. Does not implicitly {@link google.longrunning.WaitOperationRequest.verify|verify} messages.
             * @param message WaitOperationRequest message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: google.longrunning.IWaitOperationRequest, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified WaitOperationRequest message, length delimited. Does not implicitly {@link google.longrunning.WaitOperationRequest.verify|verify} messages.
             * @param message WaitOperationRequest message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: google.longrunning.IWaitOperationRequest, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a WaitOperationRequest message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns WaitOperationRequest
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.longrunning.WaitOperationRequest;

            /**
             * Decodes a WaitOperationRequest message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns WaitOperationRequest
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.longrunning.WaitOperationRequest;

            /**
             * Verifies a WaitOperationRequest message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a WaitOperationRequest message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns WaitOperationRequest
             */
            public static fromObject(object: { [k: string]: any }): google.longrunning.WaitOperationRequest;

            /**
             * Creates a plain object from a WaitOperationRequest message. Also converts values to other types if specified.
             * @param message WaitOperationRequest
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: google.longrunning.WaitOperationRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this WaitOperationRequest to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for WaitOperationRequest
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }

        /** Properties of an OperationInfo. */
        interface IOperationInfo {

            /** OperationInfo responseType */
            responseType?: (string|null);

            /** OperationInfo metadataType */
            metadataType?: (string|null);
        }

        /** Represents an OperationInfo. */
        class OperationInfo implements IOperationInfo {

            /**
             * Constructs a new OperationInfo.
             * @param [properties] Properties to set
             */
            constructor(properties?: google.longrunning.IOperationInfo);

            /** OperationInfo responseType. */
            public responseType: string;

            /** OperationInfo metadataType. */
            public metadataType: string;

            /**
             * Creates a new OperationInfo instance using the specified properties.
             * @param [properties] Properties to set
             * @returns OperationInfo instance
             */
            public static create(properties?: google.longrunning.IOperationInfo): google.longrunning.OperationInfo;

            /**
             * Encodes the specified OperationInfo message. Does not implicitly {@link google.longrunning.OperationInfo.verify|verify} messages.
             * @param message OperationInfo message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: google.longrunning.IOperationInfo, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified OperationInfo message, length delimited. Does not implicitly {@link google.longrunning.OperationInfo.verify|verify} messages.
             * @param message OperationInfo message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: google.longrunning.IOperationInfo, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes an OperationInfo message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns OperationInfo
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.longrunning.OperationInfo;

            /**
             * Decodes an OperationInfo message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns OperationInfo
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.longrunning.OperationInfo;

            /**
             * Verifies an OperationInfo message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates an OperationInfo message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns OperationInfo
             */
            public static fromObject(object: { [k: string]: any }): google.longrunning.OperationInfo;

            /**
             * Creates a plain object from an OperationInfo message. Also converts values to other types if specified.
             * @param message OperationInfo
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: google.longrunning.OperationInfo, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this OperationInfo to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for OperationInfo
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }
    }

    /** Namespace rpc. */
    namespace rpc {

        /** Properties of a Status. */
        interface IStatus {

            /** Status code */
            code?: (number|null);

            /** Status message */
            message?: (string|null);

            /** Status details */
            details?: (google.protobuf.IAny[]|null);
        }

        /** Represents a Status. */
        class Status implements IStatus {

            /**
             * Constructs a new Status.
             * @param [properties] Properties to set
             */
            constructor(properties?: google.rpc.IStatus);

            /** Status code. */
            public code: number;

            /** Status message. */
            public message: string;

            /** Status details. */
            public details: google.protobuf.IAny[];

            /**
             * Creates a new Status instance using the specified properties.
             * @param [properties] Properties to set
             * @returns Status instance
             */
            public static create(properties?: google.rpc.IStatus): google.rpc.Status;

            /**
             * Encodes the specified Status message. Does not implicitly {@link google.rpc.Status.verify|verify} messages.
             * @param message Status message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encode(message: google.rpc.IStatus, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Encodes the specified Status message, length delimited. Does not implicitly {@link google.rpc.Status.verify|verify} messages.
             * @param message Status message or plain object to encode
             * @param [writer] Writer to encode to
             * @returns Writer
             */
            public static encodeDelimited(message: google.rpc.IStatus, writer?: $protobuf.Writer): $protobuf.Writer;

            /**
             * Decodes a Status message from the specified reader or buffer.
             * @param reader Reader or buffer to decode from
             * @param [length] Message length if known beforehand
             * @returns Status
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.rpc.Status;

            /**
             * Decodes a Status message from the specified reader or buffer, length delimited.
             * @param reader Reader or buffer to decode from
             * @returns Status
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.rpc.Status;

            /**
             * Verifies a Status message.
             * @param message Plain object to verify
             * @returns `null` if valid, otherwise the reason why it is not
             */
            public static verify(message: { [k: string]: any }): (string|null);

            /**
             * Creates a Status message from a plain object. Also converts values to their respective internal types.
             * @param object Plain object
             * @returns Status
             */
            public static fromObject(object: { [k: string]: any }): google.rpc.Status;

            /**
             * Creates a plain object from a Status message. Also converts values to other types if specified.
             * @param message Status
             * @param [options] Conversion options
             * @returns Plain object
             */
            public static toObject(message: google.rpc.Status, options?: $protobuf.IConversionOptions): { [k: string]: any };

            /**
             * Converts this Status to JSON.
             * @returns JSON object
             */
            public toJSON(): { [k: string]: any };

            /**
             * Gets the default type url for Status
             * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
             * @returns The default type url
             */
            public static getTypeUrl(typeUrlPrefix?: string): string;
        }
    }
}
