text:
using grpc = global::Grpc.Core;

namespace Google.Cloud.AppEngine.V1 {
  ///
  /// Manages App Engine applications.
  ///
  public static partial class Applications
  {
    static readonly string __ServiceName = "google.appengine.v1.Applications";

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static void __Helper_SerializeMessage(global::Google.Protobuf.IMessage message, grpc::SerializationContext context)
    {
      #if !GRPC_DISABLE_PROTOBUF_BUFFER_SERIALIZATION
      if (message is global::Google.Protobuf.IBufferMessage)
      {
        context.SetPayloadLength(message.CalculateSize());
        global::Google.Protobuf.MessageExtensions.WriteTo(message, context.GetBufferWriter());
        context.Complete();
        return;
      }
      #endif
      context.Complete(global::Google.Protobuf.MessageExtensions.ToByteArray(message));
    }

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static class __Helper_MessageCache<T>
    {
      public static readonly bool IsBufferMessage = global::System.Reflection.IntrospectionExtensions.GetTypeInfo(typeof(global::Google.Protobuf.IBufferMessage)).IsAssignableFrom(typeof(T));
    }

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static T __Helper_DeserializeMessage<T>(grpc::DeserializationContext context, global::Google.Protobuf.MessageParser<T> parser) where T : global::Google.Protobuf.IMessage<T>
    {
      #if !GRPC_DISABLE_PROTOBUF_BUFFER_SERIALIZATION
      if (__Helper_MessageCache<T>.IsBufferMessage)
      {
        return parser.ParseFrom(context.PayloadAsReadOnlySequence());
      }
      #endif
      return parser.ParseFrom(context.PayloadAsNewBuffer());
    }

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Marshaller<global::Google.Cloud.AppEngine.V1.GetApplicationRequest> __Marshaller_google_appengine_v1_GetApplicationRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.AppEngine.V1.GetApplicationRequest.Parser));
    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Marshaller<global::Google.Cloud.AppEngine.V1.Application> __Marshaller_google_appengine_v1_Application = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.AppEngine.V1.Application.Parser));
    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Marshaller<global::Google.Cloud.AppEngine.V1.CreateApplicationRequest> __Marshaller_google_appengine_v1_CreateApplicationRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.AppEngine.V1.CreateApplicationRequest.Parser));
    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Marshaller<global::Google.LongRunning.Operation> __Marshaller_google_longrunning_Operation = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.LongRunning.Operation.Parser));
    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Marshaller<global::Google.Cloud.AppEngine.V1.UpdateApplicationRequest> __Marshaller_google_appengine_v1_UpdateApplicationRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.AppEngine.V1.UpdateApplicationRequest.Parser));
    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Marshaller<global::Google.Cloud.AppEngine.V1.RepairApplicationRequest> __Marshaller_google_appengine_v1_RepairApplicationRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.AppEngine.V1.RepairApplicationRequest.Parser));

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Method<global::Google.Cloud.AppEngine.V1.GetApplicationRequest, global::Google.Cloud.AppEngine.V1.Application> __Method_GetApplication = new grpc::Method<global::Google.Cloud.AppEngine.V1.GetApplicationRequest, global::Google.Cloud.AppEngine.V1.Application>(
        grpc::MethodType.Unary,
        __ServiceName,
        "GetApplication",
        __Marshaller_google_appengine_v1_GetApplicationRequest,
        __Marshaller_google_appengine_v1_Application);

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Method<global::Google.Cloud.AppEngine.V1.CreateApplicationRequest, global::Google.LongRunning.Operation> __Method_CreateApplication = new grpc::Method<global::Google.Cloud.AppEngine.V1.CreateApplicationRequest, global::Google.LongRunning.Operation>(
        grpc::MethodType.Unary,
        __ServiceName,
        "CreateApplication",
        __Marshaller_google_appengine_v1_CreateApplicationRequest,
        __Marshaller_google_longrunning_Operation);

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Method<global::Google.Cloud.AppEngine.V1.UpdateApplicationRequest, global::Google.LongRunning.Operation> __Method_UpdateApplication = new grpc::Method<global::Google.Cloud.AppEngine.V1.UpdateApplicationRequest, global::Google.LongRunning.Operation>(
        grpc::MethodType.Unary,
        __ServiceName,
        "UpdateApplication",
        __Marshaller_google_appengine_v1_UpdateApplicationRequest,
        __Marshaller_google_longrunning_Operation);

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Method<global::Google.Cloud.AppEngine.V1.RepairApplicationRequest, global::Google.LongRunning.Operation> __Method_RepairApplication = new grpc::Method<global::Google.Cloud.AppEngine.V1.RepairApplicationRequest, global::Google.LongRunning.Operation>(
        grpc::MethodType.Unary,
        __ServiceName,
        "RepairApplication",
        __Marshaller_google_appengine_v1_RepairApplicationRequest,
        __Marshaller_google_longrunning_Operation);

    /// Service descriptor
    public static global::Google.Protobuf.Reflection.ServiceDescriptor Descriptor
    {
      get { return global::Google.Cloud.AppEngine.V1.AppengineReflection.Descriptor.Services[0]; }
    }

    /// Base class for server-side implementations of Applications
    [grpc::BindServiceMethod(typeof(Applications), "BindService")]
    public abstract partial class ApplicationsBase
    {
      ///
      /// Gets information about an application.
      ///
      /// <param name="request">The request received from the client.</param>
      /// <param name="context">The context of the server-side call handler being invoked.</param>
      /// <returns>The response to send back to the client (wrapped by a task).</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::System.Threading.Tasks.Task<global::Google.Cloud.AppEngine.V1.Application> GetApplication(global::Google.Cloud.AppEngine.V1.GetApplicationRequest request, grpc::ServerCallContext context)
      {
        throw new grpc::RpcException(new grpc::Status(grpc::StatusCode.Unimplemented, ""));
      }

      ///
      /// Creates an App Engine application for a Google Cloud Platform project.
      /// Required fields:
      ///
      /// * `id` - The ID of the target Cloud Platform project.
      /// * *location* - The [region](https://cloud.google.com/appengine/docs/locations) where you want the App Engine application located.
      ///
      /// For more information about App Engine applications, see [Managing Projects, Applications, and Billing](https://cloud.google.com/appengine/docs/standard/python/console/).
      ///
      /// <param name="request">The request received from the client.</param>
      /// <param name="context">The context of the server-side call handler being invoked.</param>
      /// <returns>The response to send back to the client (wrapped by a task).</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::System.Threading.Tasks.Task<global::Google.LongRunning.Operation> CreateApplication(global::Google.Cloud.AppEngine.V1.CreateApplicationRequest request, grpc::ServerCallContext context)
      {
        throw new grpc::RpcException(new grpc::Status(grpc::StatusCode.Unimplemented, ""));
      }

      ///
      /// Updates the specified Application resource.
      /// You can update the following fields:
      ///
      /// * `auth_domain` - Google authentication domain for controlling user access to the application.
      /// * `default_cookie_expiration` - Cookie expiration policy for the application.
      ///
      /// <param name="request">The request received from the client.</param>
      /// <param name="context">The context of the server-side call handler being invoked.</param>
      /// <returns>The response to send back to the client (wrapped by a task).</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::System.Threading.Tasks.Task<global::Google.LongRunning.Operation> UpdateApplication(global::Google.Cloud.AppEngine.V1.UpdateApplicationRequest request, grpc::ServerCallContext context)
      {
        throw new grpc::RpcException(new grpc::Status(grpc::StatusCode.Unimplemented, ""));
      }

      ///
      /// Recreates the required App Engine features for the specified App Engine
      /// application, for example a Cloud Storage bucket or App Engine service
      /// account.
      /// Use this method if you receive an error message about a missing feature,
      /// for example, *Error retrieving the App Engine service account*.
      /// If you have deleted your App Engine service account, this will
      /// not be able to recreate it. Instead, you should attempt to use the
      /// IAM undelete API if possible at https://cloud.google.com/iam/reference/rest/v1/projects.serviceAccounts/undelete?apix_params=%7B"name"%3A"projects%2F-%2FserviceAccounts%2Funique_id"%2C"resource"%3A%7B%7D%7D .
      /// If the deletion was recent, the numeric ID can be found in the Cloud
      /// Console Activity Log.
      ///
      /// <param name="request">The request received from the client.</param>
      /// <param name="context">The context of the server-side call handler being invoked.</param>
      /// <returns>The response to send back to the client (wrapped by a task).</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::System.Threading.Tasks.Task<global::Google.LongRunning.Operation> RepairApplication(global::Google.Cloud.AppEngine.V1.RepairApplicationRequest request, grpc::ServerCallContext context)
      {
        throw new grpc::RpcException(new grpc::Status(grpc::StatusCode.Unimplemented, ""));
      }

    }

    /// Client for Applications
    public partial class ApplicationsClient : grpc::ClientBase<ApplicationsClient>
    {
      /// Creates a new client for Applications
      /// <param name="channel">The channel to use to make remote calls.</param>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public ApplicationsClient(grpc::ChannelBase channel) : base(channel)
      {
      }
      /// Creates a new client for Applications that uses a custom <c>CallInvoker</c>.
      /// <param name="callInvoker">The callInvoker to use to make remote calls.</param>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public ApplicationsClient(grpc::CallInvoker callInvoker) : base(callInvoker)
      {
      }
      /// Protected parameterless constructor to allow creation of test doubles.
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      protected ApplicationsClient() : base()
      {
      }
      /// Protected constructor to allow creation of configured clients.
      /// <param name="configuration">The client configuration.</param>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      protected ApplicationsClient(ClientBaseConfiguration configuration) : base(configuration)
      {
      }

      ///
      /// Gets information about an application.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.Cloud.AppEngine.V1.Application GetApplication(global::Google.Cloud.AppEngine.V1.GetApplicationRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return GetApplication(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Gets information about an application.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.Cloud.AppEngine.V1.Application GetApplication(global::Google.Cloud.AppEngine.V1.GetApplicationRequest request, grpc::CallOptions options)
      {
        return CallInvoker.BlockingUnaryCall(__Method_GetApplication, null, options, request);
      }
      ///
      /// Gets information about an application.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.Cloud.AppEngine.V1.Application> GetApplicationAsync(global::Google.Cloud.AppEngine.V1.GetApplicationRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return GetApplicationAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Gets information about an application.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.Cloud.AppEngine.V1.Application> GetApplicationAsync(global::Google.Cloud.AppEngine.V1.GetApplicationRequest request, grpc::CallOptions options)
      {
        return CallInvoker.AsyncUnaryCall(__Method_GetApplication, null, options, request);
      }
      ///
      /// Creates an App Engine application for a Google Cloud Platform project.
      /// Required fields:
      ///
      /// * `id` - The ID of the target Cloud Platform project.
      /// * *location* - The [region](https://cloud.google.com/appengine/docs/locations) where you want the App Engine application located.
      ///
      /// For more information about App Engine applications, see [Managing Projects, Applications, and Billing](https://cloud.google.com/appengine/docs/standard/python/console/).
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.LongRunning.Operation CreateApplication(global::Google.Cloud.AppEngine.V1.CreateApplicationRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return CreateApplication(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Creates an App Engine application for a Google Cloud Platform project.
      /// Required fields:
      ///
      /// * `id` - The ID of the target Cloud Platform project.
      /// * *location* - The [region](https://cloud.google.com/appengine/docs/locations) where you want the App Engine application located.
      ///
      /// For more information about App Engine applications, see [Managing Projects, Applications, and Billing](https://cloud.google.com/appengine/docs/standard/python/console/).
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.LongRunning.Operation CreateApplication(global::Google.Cloud.AppEngine.V1.CreateApplicationRequest request, grpc::CallOptions options)
      {
        return CallInvoker.BlockingUnaryCall(__Method_CreateApplication, null, options, request);
      }
      ///
      /// Creates an App Engine application for a Google Cloud Platform project.
      /// Required fields:
      ///
      /// * `id` - The ID of the target Cloud Platform project.
      /// * *location* - The [region](https://cloud.google.com/appengine/docs/locations) where you want the App Engine application located.
      ///
      /// For more information about App Engine applications, see [Managing Projects, Applications, and Billing](https://cloud.google.com/appengine/docs/standard/python/console/).
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.LongRunning.Operation> CreateApplicationAsync(global::Google.Cloud.AppEngine.V1.CreateApplicationRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return CreateApplicationAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Creates an App Engine application for a Google Cloud Platform project.
      /// Required fields:
      ///
      /// * `id` - The ID of the target Cloud Platform project.
      /// * *location* - The [region](https://cloud.google.com/appengine/docs/locations) where you want the App Engine application located.
      ///
      /// For more information about App Engine applications, see [Managing Projects, Applications, and Billing](https://cloud.google.com/appengine/docs/standard/python/console/).
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.LongRunning.Operation> CreateApplicationAsync(global::Google.Cloud.AppEngine.V1.CreateApplicationRequest request, grpc::CallOptions options)
      {
        return CallInvoker.AsyncUnaryCall(__Method_CreateApplication, null, options, request);
      }
      ///
      /// Updates the specified Application resource.
      /// You can update the following fields:
      ///
      /// * `auth_domain` - Google authentication domain for controlling user access to the application.
      /// * `default_cookie_expiration` - Cookie expiration policy for the application.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.LongRunning.Operation UpdateApplication(global::Google.Cloud.AppEngine.V1.UpdateApplicationRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return UpdateApplication(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Updates the specified Application resource.
      /// You can update the following fields:
      ///
      /// * `auth_domain` - Google authentication domain for controlling user access to the application.
      /// * `default_cookie_expiration` - Cookie expiration policy for the application.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.LongRunning.Operation UpdateApplication(global::Google.Cloud.AppEngine.V1.UpdateApplicationRequest request, grpc::CallOptions options)
      {
        return CallInvoker.BlockingUnaryCall(__Method_UpdateApplication, null, options, request);
      }
      ///
      /// Updates the specified Application resource.
      /// You can update the following fields:
      ///
      /// * `auth_domain` - Google authentication domain for controlling user access to the application.
      /// * `default_cookie_expiration` - Cookie expiration policy for the application.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.LongRunning.Operation> UpdateApplicationAsync(global::Google.Cloud.AppEngine.V1.UpdateApplicationRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return UpdateApplicationAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Updates the specified Application resource.
      /// You can update the following fields:
      ///
      /// * `auth_domain` - Google authentication domain for controlling user access to the application.
      /// * `default_cookie_expiration` - Cookie expiration policy for the application.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.LongRunning.Operation> UpdateApplicationAsync(global::Google.Cloud.AppEngine.V1.UpdateApplicationRequest request, grpc::CallOptions options)
      {
        return CallInvoker.AsyncUnaryCall(__Method_UpdateApplication, null, options, request);
      }
      ///
      /// Recreates the required App Engine features for the specified App Engine
      /// application, for example a Cloud Storage bucket or App Engine service
      /// account.
      /// Use this method if you receive an error message about a missing feature,
      /// for example, *Error retrieving the App Engine service account*.
      /// If you have deleted your App Engine service account, this will
      /// not be able to recreate it. Instead, you should attempt to use the
      /// IAM undelete API if possible at https://cloud.google.com/iam/reference/rest/v1/projects.serviceAccounts/undelete?apix_params=%7B"name"%3A"projects%2F-%2FserviceAccounts%2Funique_id"%2C"resource"%3A%7B%7D%7D .
      /// If the deletion was recent, the numeric ID can be found in the Cloud
      /// Console Activity Log.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.LongRunning.Operation RepairApplication(global::Google.Cloud.AppEngine.V1.RepairApplicationRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return RepairApplication(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Recreates the required App Engine features for the specified App Engine
      /// application, for example a Cloud Storage bucket or App Engine service
      /// account.
      /// Use this method if you receive an error message about a missing feature,
      /// for example, *Error retrieving the App Engine service account*.
      /// If you have deleted your App Engine service account, this will
      /// not be able to recreate it. Instead, you should attempt to use the
      /// IAM undelete API if possible at https://cloud.google.com/iam/reference/rest/v1/projects.serviceAccounts/undelete?apix_params=%7B"name"%3A"projects%2F-%2FserviceAccounts%2Funique_id"%2C"resource"%3A%7B%7D%7D .
      /// If the deletion was recent, the numeric ID can be found in the Cloud
      /// Console Activity Log.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.LongRunning.Operation RepairApplication(global::Google.Cloud.AppEngine.V1.RepairApplicationRequest request, grpc::CallOptions options)
      {
        return CallInvoker.BlockingUnaryCall(__Method_RepairApplication, null, options, request);
      }
      ///
      /// Recreates the required App Engine features for the specified App Engine
      /// application, for example a Cloud Storage bucket or App Engine service
      /// account.
      /// Use this method if you receive an error message about a missing feature,
      /// for example, *Error retrieving the App Engine service account*.
      /// If you have deleted your App Engine service account, this will
      /// not be able to recreate it. Instead, you should attempt to use the
      /// IAM undelete API if possible at https://cloud.google.com/iam/reference/rest/v1/projects.serviceAccounts/undelete?apix_params=%7B"name"%3A"projects%2F-%2FserviceAccounts%2Funique_id"%2C"resource"%3A%7B%7D%7D .
      /// If the deletion was recent, the numeric ID can be found in the Cloud
      /// Console Activity Log.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.LongRunning.Operation> RepairApplicationAsync(global::Google.Cloud.AppEngine.V1.RepairApplicationRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return RepairApplicationAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Recreates the required App Engine features for the specified App Engine
      /// application, for example a Cloud Storage bucket or App Engine service
      /// account.
      /// Use this method if you receive an error message about a missing feature,
      /// for example, *Error retrieving the App Engine service account*.
      /// If you have deleted your App Engine service account, this will
      /// not be able to recreate it. Instead, you should attempt to use the
      /// IAM undelete API if possible at https://cloud.google.com/iam/reference/rest/v1/projects.serviceAccounts/undelete?apix_params=%7B"name"%3A"projects%2F-%2FserviceAccounts%2Funique_id"%2C"resource"%3A%7B%7D%7D .
      /// If the deletion was recent, the numeric ID can be found in the Cloud
      /// Console Activity Log.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.LongRunning.Operation> RepairApplicationAsync(global::Google.Cloud.AppEngine.V1.RepairApplicationRequest request, grpc::CallOptions options)
      {
        return CallInvoker.AsyncUnaryCall(__Method_RepairApplication, null, options, request);
      }
      /// Creates a new instance of client from given <c>ClientBaseConfiguration</c>.
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      protected override ApplicationsClient NewInstance(ClientBaseConfiguration configuration)
      {
        return new ApplicationsClient(configuration);
      }
    }

    /// Creates service definition that can be registered with a server
    /// <param name="serviceImpl">An object implementing the server-side handling logic.</param>
    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    public static grpc::ServerServiceDefinition BindService(ApplicationsBase serviceImpl)
    {
      return grpc::ServerServiceDefinition.CreateBuilder()
          .AddMethod(__Method_GetApplication, serviceImpl.GetApplication)
          .AddMethod(__Method_CreateApplication, serviceImpl.CreateApplication)
          .AddMethod(__Method_UpdateApplication, serviceImpl.UpdateApplication)
          .AddMethod(__Method_RepairApplication, serviceImpl.RepairApplication).Build();
    }

    /// Register service method with a service binder with or without implementation. Useful when customizing the  service binding logic.
    /// Note: this method is part of an experimental API that can change or be removed without any prior notice.
    /// <param name="serviceBinder">Service methods will be bound by calling <c>AddMethod</c> on this object.</param>
    /// <param name="serviceImpl">An object implementing the server-side handling logic.</param>
    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    public static void BindService(grpc::ServiceBinderBase serviceBinder, ApplicationsBase serviceImpl)
    {
      serviceBinder.AddMethod(__Method_GetApplication, serviceImpl == null ? null : new grpc::UnaryServerMethod<global::Google.Cloud.AppEngine.V1.GetApplicationRequest, global::Google.Cloud.AppEngine.V1.Application>(serviceImpl.GetApplication));
      serviceBinder.AddMethod(__Method_CreateApplication, serviceImpl == null ? null : new grpc::UnaryServerMethod<global::Google.Cloud.AppEngine.V1.CreateApplicationRequest, global::Google.LongRunning.Operation>(serviceImpl.CreateApplication));
      serviceBinder.AddMethod(__Method_UpdateApplication, serviceImpl == null ? null : new grpc::UnaryServerMethod<global::Google.Cloud.AppEngine.V1.UpdateApplicationRequest, global::Google.LongRunning.Operation>(serviceImpl.UpdateApplication));
      serviceBinder.AddMethod(__Method_RepairApplication, serviceImpl == null ? null : new grpc::UnaryServerMethod<global::Google.Cloud.AppEngine.V1.RepairApplicationRequest, global::Google.LongRunning.Operation>(serviceImpl.RepairApplication));
    }

  }
  ///
  /// Manages services of an application.
  ///
  public static partial class Services
  {
    static readonly string __ServiceName = "google.appengine.v1.Services";

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static void __Helper_SerializeMessage(global::Google.Protobuf.IMessage message, grpc::SerializationContext context)
    {
      #if !GRPC_DISABLE_PROTOBUF_BUFFER_SERIALIZATION
      if (message is global::Google.Protobuf.IBufferMessage)
      {
        context.SetPayloadLength(message.CalculateSize());
        global::Google.Protobuf.MessageExtensions.WriteTo(message, context.GetBufferWriter());
        context.Complete();
        return;
      }
      #endif
      context.Complete(global::Google.Protobuf.MessageExtensions.ToByteArray(message));
    }

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static class __Helper_MessageCache<T>
    {
      public static readonly bool IsBufferMessage = global::System.Reflection.IntrospectionExtensions.GetTypeInfo(typeof(global::Google.Protobuf.IBufferMessage)).IsAssignableFrom(typeof(T));
    }

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static T __Helper_DeserializeMessage<T>(grpc::DeserializationContext context, global::Google.Protobuf.MessageParser<T> parser) where T : global::Google.Protobuf.IMessage<T>
    {
      #if !GRPC_DISABLE_PROTOBUF_BUFFER_SERIALIZATION
      if (__Helper_MessageCache<T>.IsBufferMessage)
      {
        return parser.ParseFrom(context.PayloadAsReadOnlySequence());
      }
      #endif
      return parser.ParseFrom(context.PayloadAsNewBuffer());
    }

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Marshaller<global::Google.Cloud.AppEngine.V1.ListServicesRequest> __Marshaller_google_appengine_v1_ListServicesRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.AppEngine.V1.ListServicesRequest.Parser));
    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Marshaller<global::Google.Cloud.AppEngine.V1.ListServicesResponse> __Marshaller_google_appengine_v1_ListServicesResponse = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.AppEngine.V1.ListServicesResponse.Parser));
    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Marshaller<global::Google.Cloud.AppEngine.V1.GetServiceRequest> __Marshaller_google_appengine_v1_GetServiceRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.AppEngine.V1.GetServiceRequest.Parser));
    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Marshaller<global::Google.Cloud.AppEngine.V1.Service> __Marshaller_google_appengine_v1_Service = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.AppEngine.V1.Service.Parser));
    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Marshaller<global::Google.Cloud.AppEngine.V1.UpdateServiceRequest> __Marshaller_google_appengine_v1_UpdateServiceRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.AppEngine.V1.UpdateServiceRequest.Parser));
    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Marshaller<global::Google.LongRunning.Operation> __Marshaller_google_longrunning_Operation = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.LongRunning.Operation.Parser));
    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Marshaller<global::Google.Cloud.AppEngine.V1.DeleteServiceRequest> __Marshaller_google_appengine_v1_DeleteServiceRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.AppEngine.V1.DeleteServiceRequest.Parser));

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Method<global::Google.Cloud.AppEngine.V1.ListServicesRequest, global::Google.Cloud.AppEngine.V1.ListServicesResponse> __Method_ListServices = new grpc::Method<global::Google.Cloud.AppEngine.V1.ListServicesRequest, global::Google.Cloud.AppEngine.V1.ListServicesResponse>(
        grpc::MethodType.Unary,
        __ServiceName,
        "ListServices",
        __Marshaller_google_appengine_v1_ListServicesRequest,
        __Marshaller_google_appengine_v1_ListServicesResponse);

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Method<global::Google.Cloud.AppEngine.V1.GetServiceRequest, global::Google.Cloud.AppEngine.V1.Service> __Method_GetService = new grpc::Method<global::Google.Cloud.AppEngine.V1.GetServiceRequest, global::Google.Cloud.AppEngine.V1.Service>(
        grpc::MethodType.Unary,
        __ServiceName,
        "GetService",
        __Marshaller_google_appengine_v1_GetServiceRequest,
        __Marshaller_google_appengine_v1_Service);

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Method<global::Google.Cloud.AppEngine.V1.UpdateServiceRequest, global::Google.LongRunning.Operation> __Method_UpdateService = new grpc::Method<global::Google.Cloud.AppEngine.V1.UpdateServiceRequest, global::Google.LongRunning.Operation>(
        grpc::MethodType.Unary,
        __ServiceName,
        "UpdateService",
        __Marshaller_google_appengine_v1_UpdateServiceRequest,
        __Marshaller_google_longrunning_Operation);

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Method<global::Google.Cloud.AppEngine.V1.DeleteServiceRequest, global::Google.LongRunning.Operation> __Method_DeleteService = new grpc::Method<global::Google.Cloud.AppEngine.V1.DeleteServiceRequest, global::Google.LongRunning.Operation>(
        grpc::MethodType.Unary,
        __ServiceName,
        "DeleteService",
        __Marshaller_google_appengine_v1_DeleteServiceRequest,
        __Marshaller_google_longrunning_Operation);

    /// Service descriptor
    public static global::Google.Protobuf.Reflection.ServiceDescriptor Descriptor
    {
      get { return global::Google.Cloud.AppEngine.V1.AppengineReflection.Descriptor.Services[1]; }
    }

    /// Base class for server-side implementations of Services
    [grpc::BindServiceMethod(typeof(Services), "BindService")]
    public abstract partial class ServicesBase
    {
      ///
      /// Lists all the services in the application.
      ///
      /// <param name="request">The request received from the client.</param>
      /// <param name="context">The context of the server-side call handler being invoked.</param>
      /// <returns>The response to send back to the client (wrapped by a task).</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::System.Threading.Tasks.Task<global::Google.Cloud.AppEngine.V1.ListServicesResponse> ListServices(global::Google.Cloud.AppEngine.V1.ListServicesRequest request, grpc::ServerCallContext context)
      {
        throw new grpc::RpcException(new grpc::Status(grpc::StatusCode.Unimplemented, ""));
      }

      ///
      /// Gets the current configuration of the specified service.
      ///
      /// <param name="request">The request received from the client.</param>
      /// <param name="context">The context of the server-side call handler being invoked.</param>
      /// <returns>The response to send back to the client (wrapped by a task).</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::System.Threading.Tasks.Task<global::Google.Cloud.AppEngine.V1.Service> GetService(global::Google.Cloud.AppEngine.V1.GetServiceRequest request, grpc::ServerCallContext context)
      {
        throw new grpc::RpcException(new grpc::Status(grpc::StatusCode.Unimplemented, ""));
      }

      ///
      /// Updates the configuration of the specified service.
      ///
      /// <param name="request">The request received from the client.</param>
      /// <param name="context">The context of the server-side call handler being invoked.</param>
      /// <returns>The response to send back to the client (wrapped by a task).</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::System.Threading.Tasks.Task<global::Google.LongRunning.Operation> UpdateService(global::Google.Cloud.AppEngine.V1.UpdateServiceRequest request, grpc::ServerCallContext context)
      {
        throw new grpc::RpcException(new grpc::Status(grpc::StatusCode.Unimplemented, ""));
      }

      ///
      /// Deletes the specified service and all enclosed versions.
      ///
      /// <param name="request">The request received from the client.</param>
      /// <param name="context">The context of the server-side call handler being invoked.</param>
      /// <returns>The response to send back to the client (wrapped by a task).</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::System.Threading.Tasks.Task<global::Google.LongRunning.Operation> DeleteService(global::Google.Cloud.AppEngine.V1.DeleteServiceRequest request, grpc::ServerCallContext context)
      {
        throw new grpc::RpcException(new grpc::Status(grpc::StatusCode.Unimplemented, ""));
      }

    }

    /// Client for Services
    public partial class ServicesClient : grpc::ClientBase<ServicesClient>
    {
      /// Creates a new client for Services
      /// <param name="channel">The channel to use to make remote calls.</param>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public ServicesClient(grpc::ChannelBase channel) : base(channel)
      {
      }
      /// Creates a new client for Services that uses a custom <c>CallInvoker</c>.
      /// <param name="callInvoker">The callInvoker to use to make remote calls.</param>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public ServicesClient(grpc::CallInvoker callInvoker) : base(callInvoker)
      {
      }
      /// Protected parameterless constructor to allow creation of test doubles.
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      protected ServicesClient() : base()
      {
      }
      /// Protected constructor to allow creation of configured clients.
      /// <param name="configuration">The client configuration.</param>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      protected ServicesClient(ClientBaseConfiguration configuration) : base(configuration)
      {
      }

      ///
      /// Lists all the services in the application.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.Cloud.AppEngine.V1.ListServicesResponse ListServices(global::Google.Cloud.AppEngine.V1.ListServicesRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return ListServices(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Lists all the services in the application.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.Cloud.AppEngine.V1.ListServicesResponse ListServices(global::Google.Cloud.AppEngine.V1.ListServicesRequest request, grpc::CallOptions options)
      {
        return CallInvoker.BlockingUnaryCall(__Method_ListServices, null, options, request);
      }
      ///
      /// Lists all the services in the application.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.Cloud.AppEngine.V1.ListServicesResponse> ListServicesAsync(global::Google.Cloud.AppEngine.V1.ListServicesRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return ListServicesAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Lists all the services in the application.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.Cloud.AppEngine.V1.ListServicesResponse> ListServicesAsync(global::Google.Cloud.AppEngine.V1.ListServicesRequest request, grpc::CallOptions options)
      {
        return CallInvoker.AsyncUnaryCall(__Method_ListServices, null, options, request);
      }
      ///
      /// Gets the current configuration of the specified service.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.Cloud.AppEngine.V1.Service GetService(global::Google.Cloud.AppEngine.V1.GetServiceRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return GetService(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Gets the current configuration of the specified service.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.Cloud.AppEngine.V1.Service GetService(global::Google.Cloud.AppEngine.V1.GetServiceRequest request, grpc::CallOptions options)
      {
        return CallInvoker.BlockingUnaryCall(__Method_GetService, null, options, request);
      }
      ///
      /// Gets the current configuration of the specified service.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.Cloud.AppEngine.V1.Service> GetServiceAsync(global::Google.Cloud.AppEngine.V1.GetServiceRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return GetServiceAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Gets the current configuration of the specified service.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.Cloud.AppEngine.V1.Service> GetServiceAsync(global::Google.Cloud.AppEngine.V1.GetServiceRequest request, grpc::CallOptions options)
      {
        return CallInvoker.AsyncUnaryCall(__Method_GetService, null, options, request);
      }
      ///
      /// Updates the configuration of the specified service.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.LongRunning.Operation UpdateService(global::Google.Cloud.AppEngine.V1.UpdateServiceRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return UpdateService(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Updates the configuration of the specified service.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.LongRunning.Operation UpdateService(global::Google.Cloud.AppEngine.V1.UpdateServiceRequest request, grpc::CallOptions options)
      {
        return CallInvoker.BlockingUnaryCall(__Method_UpdateService, null, options, request);
      }
      ///
      /// Updates the configuration of the specified service.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.LongRunning.Operation> UpdateServiceAsync(global::Google.Cloud.AppEngine.V1.UpdateServiceRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return UpdateServiceAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Updates the configuration of the specified service.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.LongRunning.Operation> UpdateServiceAsync(global::Google.Cloud.AppEngine.V1.UpdateServiceRequest request, grpc::CallOptions options)
      {
        return CallInvoker.AsyncUnaryCall(__Method_UpdateService, null, options, request);
      }
      ///
      /// Deletes the specified service and all enclosed versions.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.LongRunning.Operation DeleteService(global::Google.Cloud.AppEngine.V1.DeleteServiceRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return DeleteService(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Deletes the specified service and all enclosed versions.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.LongRunning.Operation DeleteService(global::Google.Cloud.AppEngine.V1.DeleteServiceRequest request, grpc::CallOptions options)
      {
        return CallInvoker.BlockingUnaryCall(__Method_DeleteService, null, options, request);
      }
      ///
      /// Deletes the specified service and all enclosed versions.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.LongRunning.Operation> DeleteServiceAsync(global::Google.Cloud.AppEngine.V1.DeleteServiceRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return DeleteServiceAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Deletes the specified service and all enclosed versions.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.LongRunning.Operation> DeleteServiceAsync(global::Google.Cloud.AppEngine.V1.DeleteServiceRequest request, grpc::CallOptions options)
      {
        return CallInvoker.AsyncUnaryCall(__Method_DeleteService, null, options, request);
      }
      /// Creates a new instance of client from given <c>ClientBaseConfiguration</c>.
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      protected override ServicesClient NewInstance(ClientBaseConfiguration configuration)
      {
        return new ServicesClient(configuration);
      }
    }

    /// Creates service definition that can be registered with a server
    /// <param name="serviceImpl">An object implementing the server-side handling logic.</param>
    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    public static grpc::ServerServiceDefinition BindService(ServicesBase serviceImpl)
    {
      return grpc::ServerServiceDefinition.CreateBuilder()
          .AddMethod(__Method_ListServices, serviceImpl.ListServices)
          .AddMethod(__Method_GetService, serviceImpl.GetService)
          .AddMethod(__Method_UpdateService, serviceImpl.UpdateService)
          .AddMethod(__Method_DeleteService, serviceImpl.DeleteService).Build();
    }

    /// Register service method with a service binder with or without implementation. Useful when customizing the  service binding logic.
    /// Note: this method is part of an experimental API that can change or be removed without any prior notice.
    /// <param name="serviceBinder">Service methods will be bound by calling <c>AddMethod</c> on this object.</param>
    /// <param name="serviceImpl">An object implementing the server-side handling logic.</param>
    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    public static void BindService(grpc::ServiceBinderBase serviceBinder, ServicesBase serviceImpl)
    {
      serviceBinder.AddMethod(__Method_ListServices, serviceImpl == null ? null : new grpc::UnaryServerMethod<global::Google.Cloud.AppEngine.V1.ListServicesRequest, global::Google.Cloud.AppEngine.V1.ListServicesResponse>(serviceImpl.ListServices));
      serviceBinder.AddMethod(__Method_GetService, serviceImpl == null ? null : new grpc::UnaryServerMethod<global::Google.Cloud.AppEngine.V1.GetServiceRequest, global::Google.Cloud.AppEngine.V1.Service>(serviceImpl.GetService));
      serviceBinder.AddMethod(__Method_UpdateService, serviceImpl == null ? null : new grpc::UnaryServerMethod<global::Google.Cloud.AppEngine.V1.UpdateServiceRequest, global::Google.LongRunning.Operation>(serviceImpl.UpdateService));
      serviceBinder.AddMethod(__Method_DeleteService, serviceImpl == null ? null : new grpc::UnaryServerMethod<global::Google.Cloud.AppEngine.V1.DeleteServiceRequest, global::Google.LongRunning.Operation>(serviceImpl.DeleteService));
    }

  }
  ///
  /// Manages versions of a service.
  ///
  public static partial class Versions
  {
    static readonly string __ServiceName = "google.appengine.v1.Versions";

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static void __Helper_SerializeMessage(global::Google.Protobuf.IMessage message, grpc::SerializationContext context)
    {
      #if !GRPC_DISABLE_PROTOBUF_BUFFER_SERIALIZATION
      if (message is global::Google.Protobuf.IBufferMessage)
      {
        context.SetPayloadLength(message.CalculateSize());
        global::Google.Protobuf.MessageExtensions.WriteTo(message, context.GetBufferWriter());
        context.Complete();
        return;
      }
      #endif
      context.Complete(global::Google.Protobuf.MessageExtensions.ToByteArray(message));
    }

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static class __Helper_MessageCache<T>
    {
      public static readonly bool IsBufferMessage = global::System.Reflection.IntrospectionExtensions.GetTypeInfo(typeof(global::Google.Protobuf.IBufferMessage)).IsAssignableFrom(typeof(T));
    }

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static T __Helper_DeserializeMessage<T>(grpc::DeserializationContext context, global::Google.Protobuf.MessageParser<T> parser) where T : global::Google.Protobuf.IMessage<T>
    {
      #if !GRPC_DISABLE_PROTOBUF_BUFFER_SERIALIZATION
      if (__Helper_MessageCache<T>.IsBufferMessage)
      {
        return parser.ParseFrom(context.PayloadAsReadOnlySequence());
      }
      #endif
      return parser.ParseFrom(context.PayloadAsNewBuffer());
    }

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Marshaller<global::Google.Cloud.AppEngine.V1.ListVersionsRequest> __Marshaller_google_appengine_v1_ListVersionsRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.AppEngine.V1.ListVersionsRequest.Parser));
    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Marshaller<global::Google.Cloud.AppEngine.V1.ListVersionsResponse> __Marshaller_google_appengine_v1_ListVersionsResponse = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.AppEngine.V1.ListVersionsResponse.Parser));
    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Marshaller<global::Google.Cloud.AppEngine.V1.GetVersionRequest> __Marshaller_google_appengine_v1_GetVersionRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.AppEngine.V1.GetVersionRequest.Parser));
    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Marshaller<global::Google.Cloud.AppEngine.V1.Version> __Marshaller_google_appengine_v1_Version = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.AppEngine.V1.Version.Parser));
    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Marshaller<global::Google.Cloud.AppEngine.V1.CreateVersionRequest> __Marshaller_google_appengine_v1_CreateVersionRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.AppEngine.V1.CreateVersionRequest.Parser));
    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Marshaller<global::Google.LongRunning.Operation> __Marshaller_google_longrunning_Operation = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.LongRunning.Operation.Parser));
    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Marshaller<global::Google.Cloud.AppEngine.V1.UpdateVersionRequest> __Marshaller_google_appengine_v1_UpdateVersionRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.AppEngine.V1.UpdateVersionRequest.Parser));
    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Marshaller<global::Google.Cloud.AppEngine.V1.DeleteVersionRequest> __Marshaller_google_appengine_v1_DeleteVersionRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.AppEngine.V1.DeleteVersionRequest.Parser));

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Method<global::Google.Cloud.AppEngine.V1.ListVersionsRequest, global::Google.Cloud.AppEngine.V1.ListVersionsResponse> __Method_ListVersions = new grpc::Method<global::Google.Cloud.AppEngine.V1.ListVersionsRequest, global::Google.Cloud.AppEngine.V1.ListVersionsResponse>(
        grpc::MethodType.Unary,
        __ServiceName,
        "ListVersions",
        __Marshaller_google_appengine_v1_ListVersionsRequest,
        __Marshaller_google_appengine_v1_ListVersionsResponse);

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Method<global::Google.Cloud.AppEngine.V1.GetVersionRequest, global::Google.Cloud.AppEngine.V1.Version> __Method_GetVersion = new grpc::Method<global::Google.Cloud.AppEngine.V1.GetVersionRequest, global::Google.Cloud.AppEngine.V1.Version>(
        grpc::MethodType.Unary,
        __ServiceName,
        "GetVersion",
        __Marshaller_google_appengine_v1_GetVersionRequest,
        __Marshaller_google_appengine_v1_Version);

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Method<global::Google.Cloud.AppEngine.V1.CreateVersionRequest, global::Google.LongRunning.Operation> __Method_CreateVersion = new grpc::Method<global::Google.Cloud.AppEngine.V1.CreateVersionRequest, global::Google.LongRunning.Operation>(
        grpc::MethodType.Unary,
        __ServiceName,
        "CreateVersion",
        __Marshaller_google_appengine_v1_CreateVersionRequest,
        __Marshaller_google_longrunning_Operation);

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Method<global::Google.Cloud.AppEngine.V1.UpdateVersionRequest, global::Google.LongRunning.Operation> __Method_UpdateVersion = new grpc::Method<global::Google.Cloud.AppEngine.V1.UpdateVersionRequest, global::Google.LongRunning.Operation>(
        grpc::MethodType.Unary,
        __ServiceName,
        "UpdateVersion",
        __Marshaller_google_appengine_v1_UpdateVersionRequest,
        __Marshaller_google_longrunning_Operation);

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Method<global::Google.Cloud.AppEngine.V1.DeleteVersionRequest, global::Google.LongRunning.Operation> __Method_DeleteVersion = new grpc::Method<global::Google.Cloud.AppEngine.V1.DeleteVersionRequest, global::Google.LongRunning.Operation>(
        grpc::MethodType.Unary,
        __ServiceName,
        "DeleteVersion",
        __Marshaller_google_appengine_v1_DeleteVersionRequest,
        __Marshaller_google_longrunning_Operation);

    /// Service descriptor
    public static global::Google.Protobuf.Reflection.ServiceDescriptor Descriptor
    {
      get { return global::Google.Cloud.AppEngine.V1.AppengineReflection.Descriptor.Services[2]; }
    }

    /// Base class for server-side implementations of Versions
    [grpc::BindServiceMethod(typeof(Versions), "BindService")]
    public abstract partial class VersionsBase
    {
      ///
      /// Lists the versions of a service.
      ///
      /// <param name="request">The request received from the client.</param>
      /// <param name="context">The context of the server-side call handler being invoked.</param>
      /// <returns>The response to send back to the client (wrapped by a task).</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::System.Threading.Tasks.Task<global::Google.Cloud.AppEngine.V1.ListVersionsResponse> ListVersions(global::Google.Cloud.AppEngine.V1.ListVersionsRequest request, grpc::ServerCallContext context)
      {
        throw new grpc::RpcException(new grpc::Status(grpc::StatusCode.Unimplemented, ""));
      }

      ///
      /// Gets the specified Version resource.
      /// By default, only a `BASIC_VIEW` will be returned.
      /// Specify the `FULL_VIEW` parameter to get the full resource.
      ///
      /// <param name="request">The request received from the client.</param>
      /// <param name="context">The context of the server-side call handler being invoked.</param>
      /// <returns>The response to send back to the client (wrapped by a task).</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::System.Threading.Tasks.Task<global::Google.Cloud.AppEngine.V1.Version> GetVersion(global::Google.Cloud.AppEngine.V1.GetVersionRequest request, grpc::ServerCallContext context)
      {
        throw new grpc::RpcException(new grpc::Status(grpc::StatusCode.Unimplemented, ""));
      }

      ///
      /// Deploys code and resource files to a new version.
      ///
      /// <param name="request">The request received from the client.</param>
      /// <param name="context">The context of the server-side call handler being invoked.</param>
      /// <returns>The response to send back to the client (wrapped by a task).</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::System.Threading.Tasks.Task<global::Google.LongRunning.Operation> CreateVersion(global::Google.Cloud.AppEngine.V1.CreateVersionRequest request, grpc::ServerCallContext context)
      {
        throw new grpc::RpcException(new grpc::Status(grpc::StatusCode.Unimplemented, ""));
      }

      ///
      /// Updates the specified Version resource.
      /// You can specify the following fields depending on the App Engine
      /// environment and type of scaling that the version resource uses:
      ///
      /// **Standard environment**
      ///
      /// * [`instance_class`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#Version.FIELDS.instance_class)
      ///
      /// *automatic scaling* in the standard environment:
      ///
      /// * [`automatic_scaling.min_idle_instances`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#Version.FIELDS.automatic_scaling)
      /// * [`automatic_scaling.max_idle_instances`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#Version.FIELDS.automatic_scaling)
      /// * [`automaticScaling.standard_scheduler_settings.max_instances`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#StandardSchedulerSettings)
      /// * [`automaticScaling.standard_scheduler_settings.min_instances`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#StandardSchedulerSettings)
      /// * [`automaticScaling.standard_scheduler_settings.target_cpu_utilization`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#StandardSchedulerSettings)
      /// * [`automaticScaling.standard_scheduler_settings.target_throughput_utilization`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#StandardSchedulerSettings)
      ///
      /// *basic scaling* or *manual scaling* in the standard environment:
      ///
      /// * [`serving_status`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#Version.FIELDS.serving_status)
      /// * [`manual_scaling.instances`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#manualscaling)
      ///
      /// **Flexible environment**
      ///
      /// * [`serving_status`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#Version.FIELDS.serving_status)
      ///
      /// *automatic scaling* in the flexible environment:
      ///
      /// * [`automatic_scaling.min_total_instances`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#Version.FIELDS.automatic_scaling)
      /// * [`automatic_scaling.max_total_instances`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#Version.FIELDS.automatic_scaling)
      /// * [`automatic_scaling.cool_down_period_sec`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#Version.FIELDS.automatic_scaling)
      /// * [`automatic_scaling.cpu_utilization.target_utilization`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#Version.FIELDS.automatic_scaling)
      ///
      /// *manual scaling* in the flexible environment:
      ///
      /// * [`manual_scaling.instances`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#manualscaling)
      ///
      /// <param name="request">The request received from the client.</param>
      /// <param name="context">The context of the server-side call handler being invoked.</param>
      /// <returns>The response to send back to the client (wrapped by a task).</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::System.Threading.Tasks.Task<global::Google.LongRunning.Operation> UpdateVersion(global::Google.Cloud.AppEngine.V1.UpdateVersionRequest request, grpc::ServerCallContext context)
      {
        throw new grpc::RpcException(new grpc::Status(grpc::StatusCode.Unimplemented, ""));
      }

      ///
      /// Deletes an existing Version resource.
      ///
      /// <param name="request">The request received from the client.</param>
      /// <param name="context">The context of the server-side call handler being invoked.</param>
      /// <returns>The response to send back to the client (wrapped by a task).</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::System.Threading.Tasks.Task<global::Google.LongRunning.Operation> DeleteVersion(global::Google.Cloud.AppEngine.V1.DeleteVersionRequest request, grpc::ServerCallContext context)
      {
        throw new grpc::RpcException(new grpc::Status(grpc::StatusCode.Unimplemented, ""));
      }

    }

    /// Client for Versions
    public partial class VersionsClient : grpc::ClientBase<VersionsClient>
    {
      /// Creates a new client for Versions
      /// <param name="channel">The channel to use to make remote calls.</param>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public VersionsClient(grpc::ChannelBase channel) : base(channel)
      {
      }
      /// Creates a new client for Versions that uses a custom <c>CallInvoker</c>.
      /// <param name="callInvoker">The callInvoker to use to make remote calls.</param>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public VersionsClient(grpc::CallInvoker callInvoker) : base(callInvoker)
      {
      }
      /// Protected parameterless constructor to allow creation of test doubles.
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      protected VersionsClient() : base()
      {
      }
      /// Protected constructor to allow creation of configured clients.
      /// <param name="configuration">The client configuration.</param>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      protected VersionsClient(ClientBaseConfiguration configuration) : base(configuration)
      {
      }

      ///
      /// Lists the versions of a service.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.Cloud.AppEngine.V1.ListVersionsResponse ListVersions(global::Google.Cloud.AppEngine.V1.ListVersionsRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return ListVersions(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Lists the versions of a service.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.Cloud.AppEngine.V1.ListVersionsResponse ListVersions(global::Google.Cloud.AppEngine.V1.ListVersionsRequest request, grpc::CallOptions options)
      {
        return CallInvoker.BlockingUnaryCall(__Method_ListVersions, null, options, request);
      }
      ///
      /// Lists the versions of a service.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.Cloud.AppEngine.V1.ListVersionsResponse> ListVersionsAsync(global::Google.Cloud.AppEngine.V1.ListVersionsRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return ListVersionsAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Lists the versions of a service.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.Cloud.AppEngine.V1.ListVersionsResponse> ListVersionsAsync(global::Google.Cloud.AppEngine.V1.ListVersionsRequest request, grpc::CallOptions options)
      {
        return CallInvoker.AsyncUnaryCall(__Method_ListVersions, null, options, request);
      }
      ///
      /// Gets the specified Version resource.
      /// By default, only a `BASIC_VIEW` will be returned.
      /// Specify the `FULL_VIEW` parameter to get the full resource.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.Cloud.AppEngine.V1.Version GetVersion(global::Google.Cloud.AppEngine.V1.GetVersionRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return GetVersion(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Gets the specified Version resource.
      /// By default, only a `BASIC_VIEW` will be returned.
      /// Specify the `FULL_VIEW` parameter to get the full resource.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.Cloud.AppEngine.V1.Version GetVersion(global::Google.Cloud.AppEngine.V1.GetVersionRequest request, grpc::CallOptions options)
      {
        return CallInvoker.BlockingUnaryCall(__Method_GetVersion, null, options, request);
      }
      ///
      /// Gets the specified Version resource.
      /// By default, only a `BASIC_VIEW` will be returned.
      /// Specify the `FULL_VIEW` parameter to get the full resource.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.Cloud.AppEngine.V1.Version> GetVersionAsync(global::Google.Cloud.AppEngine.V1.GetVersionRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return GetVersionAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Gets the specified Version resource.
      /// By default, only a `BASIC_VIEW` will be returned.
      /// Specify the `FULL_VIEW` parameter to get the full resource.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.Cloud.AppEngine.V1.Version> GetVersionAsync(global::Google.Cloud.AppEngine.V1.GetVersionRequest request, grpc::CallOptions options)
      {
        return CallInvoker.AsyncUnaryCall(__Method_GetVersion, null, options, request);
      }
      ///
      /// Deploys code and resource files to a new version.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.LongRunning.Operation CreateVersion(global::Google.Cloud.AppEngine.V1.CreateVersionRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return CreateVersion(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Deploys code and resource files to a new version.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.LongRunning.Operation CreateVersion(global::Google.Cloud.AppEngine.V1.CreateVersionRequest request, grpc::CallOptions options)
      {
        return CallInvoker.BlockingUnaryCall(__Method_CreateVersion, null, options, request);
      }
      ///
      /// Deploys code and resource files to a new version.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.LongRunning.Operation> CreateVersionAsync(global::Google.Cloud.AppEngine.V1.CreateVersionRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return CreateVersionAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Deploys code and resource files to a new version.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.LongRunning.Operation> CreateVersionAsync(global::Google.Cloud.AppEngine.V1.CreateVersionRequest request, grpc::CallOptions options)
      {
        return CallInvoker.AsyncUnaryCall(__Method_CreateVersion, null, options, request);
      }
      ///
      /// Updates the specified Version resource.
      /// You can specify the following fields depending on the App Engine
      /// environment and type of scaling that the version resource uses:
      ///
      /// **Standard environment**
      ///
      /// * [`instance_class`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#Version.FIELDS.instance_class)
      ///
      /// *automatic scaling* in the standard environment:
      ///
      /// * [`automatic_scaling.min_idle_instances`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#Version.FIELDS.automatic_scaling)
      /// * [`automatic_scaling.max_idle_instances`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#Version.FIELDS.automatic_scaling)
      /// * [`automaticScaling.standard_scheduler_settings.max_instances`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#StandardSchedulerSettings)
      /// * [`automaticScaling.standard_scheduler_settings.min_instances`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#StandardSchedulerSettings)
      /// * [`automaticScaling.standard_scheduler_settings.target_cpu_utilization`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#StandardSchedulerSettings)
      /// * [`automaticScaling.standard_scheduler_settings.target_throughput_utilization`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#StandardSchedulerSettings)
      ///
      /// *basic scaling* or *manual scaling* in the standard environment:
      ///
      /// * [`serving_status`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#Version.FIELDS.serving_status)
      /// * [`manual_scaling.instances`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#manualscaling)
      ///
      /// **Flexible environment**
      ///
      /// * [`serving_status`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#Version.FIELDS.serving_status)
      ///
      /// *automatic scaling* in the flexible environment:
      ///
      /// * [`automatic_scaling.min_total_instances`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#Version.FIELDS.automatic_scaling)
      /// * [`automatic_scaling.max_total_instances`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#Version.FIELDS.automatic_scaling)
      /// * [`automatic_scaling.cool_down_period_sec`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#Version.FIELDS.automatic_scaling)
      /// * [`automatic_scaling.cpu_utilization.target_utilization`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#Version.FIELDS.automatic_scaling)
      ///
      /// *manual scaling* in the flexible environment:
      ///
      /// * [`manual_scaling.instances`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#manualscaling)
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.LongRunning.Operation UpdateVersion(global::Google.Cloud.AppEngine.V1.UpdateVersionRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return UpdateVersion(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Updates the specified Version resource.
      /// You can specify the following fields depending on the App Engine
      /// environment and type of scaling that the version resource uses:
      ///
      /// **Standard environment**
      ///
      /// * [`instance_class`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#Version.FIELDS.instance_class)
      ///
      /// *automatic scaling* in the standard environment:
      ///
      /// * [`automatic_scaling.min_idle_instances`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#Version.FIELDS.automatic_scaling)
      /// * [`automatic_scaling.max_idle_instances`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#Version.FIELDS.automatic_scaling)
      /// * [`automaticScaling.standard_scheduler_settings.max_instances`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#StandardSchedulerSettings)
      /// * [`automaticScaling.standard_scheduler_settings.min_instances`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#StandardSchedulerSettings)
      /// * [`automaticScaling.standard_scheduler_settings.target_cpu_utilization`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#StandardSchedulerSettings)
      /// * [`automaticScaling.standard_scheduler_settings.target_throughput_utilization`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#StandardSchedulerSettings)
      ///
      /// *basic scaling* or *manual scaling* in the standard environment:
      ///
      /// * [`serving_status`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#Version.FIELDS.serving_status)
      /// * [`manual_scaling.instances`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#manualscaling)
      ///
      /// **Flexible environment**
      ///
      /// * [`serving_status`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#Version.FIELDS.serving_status)
      ///
      /// *automatic scaling* in the flexible environment:
      ///
      /// * [`automatic_scaling.min_total_instances`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#Version.FIELDS.automatic_scaling)
      /// * [`automatic_scaling.max_total_instances`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#Version.FIELDS.automatic_scaling)
      /// * [`automatic_scaling.cool_down_period_sec`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#Version.FIELDS.automatic_scaling)
      /// * [`automatic_scaling.cpu_utilization.target_utilization`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#Version.FIELDS.automatic_scaling)
      ///
      /// *manual scaling* in the flexible environment:
      ///
      /// * [`manual_scaling.instances`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#manualscaling)
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.LongRunning.Operation UpdateVersion(global::Google.Cloud.AppEngine.V1.UpdateVersionRequest request, grpc::CallOptions options)
      {
        return CallInvoker.BlockingUnaryCall(__Method_UpdateVersion, null, options, request);
      }
      ///
      /// Updates the specified Version resource.
      /// You can specify the following fields depending on the App Engine
      /// environment and type of scaling that the version resource uses:
      ///
      /// **Standard environment**
      ///
      /// * [`instance_class`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#Version.FIELDS.instance_class)
      ///
      /// *automatic scaling* in the standard environment:
      ///
      /// * [`automatic_scaling.min_idle_instances`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#Version.FIELDS.automatic_scaling)
      /// * [`automatic_scaling.max_idle_instances`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#Version.FIELDS.automatic_scaling)
      /// * [`automaticScaling.standard_scheduler_settings.max_instances`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#StandardSchedulerSettings)
      /// * [`automaticScaling.standard_scheduler_settings.min_instances`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#StandardSchedulerSettings)
      /// * [`automaticScaling.standard_scheduler_settings.target_cpu_utilization`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#StandardSchedulerSettings)
      /// * [`automaticScaling.standard_scheduler_settings.target_throughput_utilization`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#StandardSchedulerSettings)
      ///
      /// *basic scaling* or *manual scaling* in the standard environment:
      ///
      /// * [`serving_status`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#Version.FIELDS.serving_status)
      /// * [`manual_scaling.instances`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#manualscaling)
      ///
      /// **Flexible environment**
      ///
      /// * [`serving_status`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#Version.FIELDS.serving_status)
      ///
      /// *automatic scaling* in the flexible environment:
      ///
      /// * [`automatic_scaling.min_total_instances`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#Version.FIELDS.automatic_scaling)
      /// * [`automatic_scaling.max_total_instances`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#Version.FIELDS.automatic_scaling)
      /// * [`automatic_scaling.cool_down_period_sec`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#Version.FIELDS.automatic_scaling)
      /// * [`automatic_scaling.cpu_utilization.target_utilization`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#Version.FIELDS.automatic_scaling)
      ///
      /// *manual scaling* in the flexible environment:
      ///
      /// * [`manual_scaling.instances`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#manualscaling)
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.LongRunning.Operation> UpdateVersionAsync(global::Google.Cloud.AppEngine.V1.UpdateVersionRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return UpdateVersionAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Updates the specified Version resource.
      /// You can specify the following fields depending on the App Engine
      /// environment and type of scaling that the version resource uses:
      ///
      /// **Standard environment**
      ///
      /// * [`instance_class`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#Version.FIELDS.instance_class)
      ///
      /// *automatic scaling* in the standard environment:
      ///
      /// * [`automatic_scaling.min_idle_instances`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#Version.FIELDS.automatic_scaling)
      /// * [`automatic_scaling.max_idle_instances`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#Version.FIELDS.automatic_scaling)
      /// * [`automaticScaling.standard_scheduler_settings.max_instances`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#StandardSchedulerSettings)
      /// * [`automaticScaling.standard_scheduler_settings.min_instances`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#StandardSchedulerSettings)
      /// * [`automaticScaling.standard_scheduler_settings.target_cpu_utilization`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#StandardSchedulerSettings)
      /// * [`automaticScaling.standard_scheduler_settings.target_throughput_utilization`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#StandardSchedulerSettings)
      ///
      /// *basic scaling* or *manual scaling* in the standard environment:
      ///
      /// * [`serving_status`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#Version.FIELDS.serving_status)
      /// * [`manual_scaling.instances`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#manualscaling)
      ///
      /// **Flexible environment**
      ///
      /// * [`serving_status`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#Version.FIELDS.serving_status)
      ///
      /// *automatic scaling* in the flexible environment:
      ///
      /// * [`automatic_scaling.min_total_instances`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#Version.FIELDS.automatic_scaling)
      /// * [`automatic_scaling.max_total_instances`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#Version.FIELDS.automatic_scaling)
      /// * [`automatic_scaling.cool_down_period_sec`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#Version.FIELDS.automatic_scaling)
      /// * [`automatic_scaling.cpu_utilization.target_utilization`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#Version.FIELDS.automatic_scaling)
      ///
      /// *manual scaling* in the flexible environment:
      ///
      /// * [`manual_scaling.instances`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#manualscaling)
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.LongRunning.Operation> UpdateVersionAsync(global::Google.Cloud.AppEngine.V1.UpdateVersionRequest request, grpc::CallOptions options)
      {
        return CallInvoker.AsyncUnaryCall(__Method_UpdateVersion, null, options, request);
      }
      ///
      /// Deletes an existing Version resource.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.LongRunning.Operation DeleteVersion(global::Google.Cloud.AppEngine.V1.DeleteVersionRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return DeleteVersion(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Deletes an existing Version resource.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.LongRunning.Operation DeleteVersion(global::Google.Cloud.AppEngine.V1.DeleteVersionRequest request, grpc::CallOptions options)
      {
        return CallInvoker.BlockingUnaryCall(__Method_DeleteVersion, null, options, request);
      }
      ///
      /// Deletes an existing Version resource.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.LongRunning.Operation> DeleteVersionAsync(global::Google.Cloud.AppEngine.V1.DeleteVersionRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return DeleteVersionAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Deletes an existing Version resource.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.LongRunning.Operation> DeleteVersionAsync(global::Google.Cloud.AppEngine.V1.DeleteVersionRequest request, grpc::CallOptions options)
      {
        return CallInvoker.AsyncUnaryCall(__Method_DeleteVersion, null, options, request);
      }
      /// Creates a new instance of client from given <c>ClientBaseConfiguration</c>.
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      protected override VersionsClient NewInstance(ClientBaseConfiguration configuration)
      {
        return new VersionsClient(configuration);
      }
    }

    /// Creates service definition that can be registered with a server
    /// <param name="serviceImpl">An object implementing the server-side handling logic.</param>
    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    public static grpc::ServerServiceDefinition BindService(VersionsBase serviceImpl)
    {
      return grpc::ServerServiceDefinition.CreateBuilder()
          .AddMethod(__Method_ListVersions, serviceImpl.ListVersions)
          .AddMethod(__Method_GetVersion, serviceImpl.GetVersion)
          .AddMethod(__Method_CreateVersion, serviceImpl.CreateVersion)
          .AddMethod(__Method_UpdateVersion, serviceImpl.UpdateVersion)
          .AddMethod(__Method_DeleteVersion, serviceImpl.DeleteVersion).Build();
    }

    /// Register service method with a service binder with or without implementation. Useful when customizing the  service binding logic.
    /// Note: this method is part of an experimental API that can change or be removed without any prior notice.
    /// <param name="serviceBinder">Service methods will be bound by calling <c>AddMethod</c> on this object.</param>
    /// <param name="serviceImpl">An object implementing the server-side handling logic.</param>
    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    public static void BindService(grpc::ServiceBinderBase serviceBinder, VersionsBase serviceImpl)
    {
      serviceBinder.AddMethod(__Method_ListVersions, serviceImpl == null ? null : new grpc::UnaryServerMethod<global::Google.Cloud.AppEngine.V1.ListVersionsRequest, global::Google.Cloud.AppEngine.V1.ListVersionsResponse>(serviceImpl.ListVersions));
      serviceBinder.AddMethod(__Method_GetVersion, serviceImpl == null ? null : new grpc::UnaryServerMethod<global::Google.Cloud.AppEngine.V1.GetVersionRequest, global::Google.Cloud.AppEngine.V1.Version>(serviceImpl.GetVersion));
      serviceBinder.AddMethod(__Method_CreateVersion, serviceImpl == null ? null : new grpc::UnaryServerMethod<global::Google.Cloud.AppEngine.V1.CreateVersionRequest, global::Google.LongRunning.Operation>(serviceImpl.CreateVersion));
      serviceBinder.AddMethod(__Method_UpdateVersion, serviceImpl == null ? null : new grpc::UnaryServerMethod<global::Google.Cloud.AppEngine.V1.UpdateVersionRequest, global::Google.LongRunning.Operation>(serviceImpl.UpdateVersion));
      serviceBinder.AddMethod(__Method_DeleteVersion, serviceImpl == null ? null : new grpc::UnaryServerMethod<global::Google.Cloud.AppEngine.V1.DeleteVersionRequest, global::Google.LongRunning.Operation>(serviceImpl.DeleteVersion));
    }

  }
  ///
  /// Manages instances of a version.
  ///
  public static partial class Instances
  {
    static readonly string __ServiceName = "google.appengine.v1.Instances";

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static void __Helper_SerializeMessage(global::Google.Protobuf.IMessage message, grpc::SerializationContext context)
    {
      #if !GRPC_DISABLE_PROTOBUF_BUFFER_SERIALIZATION
      if (message is global::Google.Protobuf.IBufferMessage)
      {
        context.SetPayloadLength(message.CalculateSize());
        global::Google.Protobuf.MessageExtensions.WriteTo(message, context.GetBufferWriter());
        context.Complete();
        return;
      }
      #endif
      context.Complete(global::Google.Protobuf.MessageExtensions.ToByteArray(message));
    }

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static class __Helper_MessageCache<T>
    {
      public static readonly bool IsBufferMessage = global::System.Reflection.IntrospectionExtensions.GetTypeInfo(typeof(global::Google.Protobuf.IBufferMessage)).IsAssignableFrom(typeof(T));
    }

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static T __Helper_DeserializeMessage<T>(grpc::DeserializationContext context, global::Google.Protobuf.MessageParser<T> parser) where T : global::Google.Protobuf.IMessage<T>
    {
      #if !GRPC_DISABLE_PROTOBUF_BUFFER_SERIALIZATION
      if (__Helper_MessageCache<T>.IsBufferMessage)
      {
        return parser.ParseFrom(context.PayloadAsReadOnlySequence());
      }
      #endif
      return parser.ParseFrom(context.PayloadAsNewBuffer());
    }

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Marshaller<global::Google.Cloud.AppEngine.V1.ListInstancesRequest> __Marshaller_google_appengine_v1_ListInstancesRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.AppEngine.V1.ListInstancesRequest.Parser));
    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Marshaller<global::Google.Cloud.AppEngine.V1.ListInstancesResponse> __Marshaller_google_appengine_v1_ListInstancesResponse = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.AppEngine.V1.ListInstancesResponse.Parser));
    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Marshaller<global::Google.Cloud.AppEngine.V1.GetInstanceRequest> __Marshaller_google_appengine_v1_GetInstanceRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.AppEngine.V1.GetInstanceRequest.Parser));
    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Marshaller<global::Google.Cloud.AppEngine.V1.Instance> __Marshaller_google_appengine_v1_Instance = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.AppEngine.V1.Instance.Parser));
    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Marshaller<global::Google.Cloud.AppEngine.V1.DeleteInstanceRequest> __Marshaller_google_appengine_v1_DeleteInstanceRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.AppEngine.V1.DeleteInstanceRequest.Parser));
    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Marshaller<global::Google.LongRunning.Operation> __Marshaller_google_longrunning_Operation = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.LongRunning.Operation.Parser));
    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Marshaller<global::Google.Cloud.AppEngine.V1.DebugInstanceRequest> __Marshaller_google_appengine_v1_DebugInstanceRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.AppEngine.V1.DebugInstanceRequest.Parser));

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Method<global::Google.Cloud.AppEngine.V1.ListInstancesRequest, global::Google.Cloud.AppEngine.V1.ListInstancesResponse> __Method_ListInstances = new grpc::Method<global::Google.Cloud.AppEngine.V1.ListInstancesRequest, global::Google.Cloud.AppEngine.V1.ListInstancesResponse>(
        grpc::MethodType.Unary,
        __ServiceName,
        "ListInstances",
        __Marshaller_google_appengine_v1_ListInstancesRequest,
        __Marshaller_google_appengine_v1_ListInstancesResponse);

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Method<global::Google.Cloud.AppEngine.V1.GetInstanceRequest, global::Google.Cloud.AppEngine.V1.Instance> __Method_GetInstance = new grpc::Method<global::Google.Cloud.AppEngine.V1.GetInstanceRequest, global::Google.Cloud.AppEngine.V1.Instance>(
        grpc::MethodType.Unary,
        __ServiceName,
        "GetInstance",
        __Marshaller_google_appengine_v1_GetInstanceRequest,
        __Marshaller_google_appengine_v1_Instance);

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Method<global::Google.Cloud.AppEngine.V1.DeleteInstanceRequest, global::Google.LongRunning.Operation> __Method_DeleteInstance = new grpc::Method<global::Google.Cloud.AppEngine.V1.DeleteInstanceRequest, global::Google.LongRunning.Operation>(
        grpc::MethodType.Unary,
        __ServiceName,
        "DeleteInstance",
        __Marshaller_google_appengine_v1_DeleteInstanceRequest,
        __Marshaller_google_longrunning_Operation);

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Method<global::Google.Cloud.AppEngine.V1.DebugInstanceRequest, global::Google.LongRunning.Operation> __Method_DebugInstance = new grpc::Method<global::Google.Cloud.AppEngine.V1.DebugInstanceRequest, global::Google.LongRunning.Operation>(
        grpc::MethodType.Unary,
        __ServiceName,
        "DebugInstance",
        __Marshaller_google_appengine_v1_DebugInstanceRequest,
        __Marshaller_google_longrunning_Operation);

    /// Service descriptor
    public static global::Google.Protobuf.Reflection.ServiceDescriptor Descriptor
    {
      get { return global::Google.Cloud.AppEngine.V1.AppengineReflection.Descriptor.Services[3]; }
    }

    /// Base class for server-side implementations of Instances
    [grpc::BindServiceMethod(typeof(Instances), "BindService")]
    public abstract partial class InstancesBase
    {
      ///
      /// Lists the instances of a version.
      ///
      /// Tip: To aggregate details about instances over time, see the
      /// [Stackdriver Monitoring API](https://cloud.google.com/monitoring/api/ref_v3/rest/v3/projects.timeSeries/list).
      ///
      /// <param name="request">The request received from the client.</param>
      /// <param name="context">The context of the server-side call handler being invoked.</param>
      /// <returns>The response to send back to the client (wrapped by a task).</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::System.Threading.Tasks.Task<global::Google.Cloud.AppEngine.V1.ListInstancesResponse> ListInstances(global::Google.Cloud.AppEngine.V1.ListInstancesRequest request, grpc::ServerCallContext context)
      {
        throw new grpc::RpcException(new grpc::Status(grpc::StatusCode.Unimplemented, ""));
      }

      ///
      /// Gets instance information.
      ///
      /// <param name="request">The request received from the client.</param>
      /// <param name="context">The context of the server-side call handler being invoked.</param>
      /// <returns>The response to send back to the client (wrapped by a task).</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::System.Threading.Tasks.Task<global::Google.Cloud.AppEngine.V1.Instance> GetInstance(global::Google.Cloud.AppEngine.V1.GetInstanceRequest request, grpc::ServerCallContext context)
      {
        throw new grpc::RpcException(new grpc::Status(grpc::StatusCode.Unimplemented, ""));
      }

      ///
      /// Stops a running instance.
      ///
      /// The instance might be automatically recreated based on the scaling settings
      /// of the version. For more information, see "How Instances are Managed"
      /// ([standard environment](https://cloud.google.com/appengine/docs/standard/python/how-instances-are-managed) |
      /// [flexible environment](https://cloud.google.com/appengine/docs/flexible/python/how-instances-are-managed)).
      ///
      /// To ensure that instances are not re-created and avoid getting billed, you
      /// can stop all instances within the target version by changing the serving
      /// status of the version to `STOPPED` with the
      /// [`apps.services.versions.patch`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions/patch)
      /// method.
      ///
      /// <param name="request">The request received from the client.</param>
      /// <param name="context">The context of the server-side call handler being invoked.</param>
      /// <returns>The response to send back to the client (wrapped by a task).</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::System.Threading.Tasks.Task<global::Google.LongRunning.Operation> DeleteInstance(global::Google.Cloud.AppEngine.V1.DeleteInstanceRequest request, grpc::ServerCallContext context)
      {
        throw new grpc::RpcException(new grpc::Status(grpc::StatusCode.Unimplemented, ""));
      }

      ///
      /// Enables debugging on a VM instance. This allows you to use the SSH
      /// command to connect to the virtual machine where the instance lives.
      /// While in "debug mode", the instance continues to serve live traffic.
      /// You should delete the instance when you are done debugging and then
      /// allow the system to take over and determine if another instance
      /// should be started.
      ///
      /// Only applicable for instances in App Engine flexible environment.
      ///
      /// <param name="request">The request received from the client.</param>
      /// <param name="context">The context of the server-side call handler being invoked.</param>
      /// <returns>The response to send back to the client (wrapped by a task).</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::System.Threading.Tasks.Task<global::Google.LongRunning.Operation> DebugInstance(global::Google.Cloud.AppEngine.V1.DebugInstanceRequest request, grpc::ServerCallContext context)
      {
        throw new grpc::RpcException(new grpc::Status(grpc::StatusCode.Unimplemented, ""));
      }

    }

    /// Client for Instances
    public partial class InstancesClient : grpc::ClientBase<InstancesClient>
    {
      /// Creates a new client for Instances
      /// <param name="channel">The channel to use to make remote calls.</param>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public InstancesClient(grpc::ChannelBase channel) : base(channel)
      {
      }
      /// Creates a new client for Instances that uses a custom <c>CallInvoker</c>.
      /// <param name="callInvoker">The callInvoker to use to make remote calls.</param>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public InstancesClient(grpc::CallInvoker callInvoker) : base(callInvoker)
      {
      }
      /// Protected parameterless constructor to allow creation of test doubles.
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      protected InstancesClient() : base()
      {
      }
      /// Protected constructor to allow creation of configured clients.
      /// <param name="configuration">The client configuration.</param>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      protected InstancesClient(ClientBaseConfiguration configuration) : base(configuration)
      {
      }

      ///
      /// Lists the instances of a version.
      ///
      /// Tip: To aggregate details about instances over time, see the
      /// [Stackdriver Monitoring API](https://cloud.google.com/monitoring/api/ref_v3/rest/v3/projects.timeSeries/list).
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.Cloud.AppEngine.V1.ListInstancesResponse ListInstances(global::Google.Cloud.AppEngine.V1.ListInstancesRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return ListInstances(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Lists the instances of a version.
      ///
      /// Tip: To aggregate details about instances over time, see the
      /// [Stackdriver Monitoring API](https://cloud.google.com/monitoring/api/ref_v3/rest/v3/projects.timeSeries/list).
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.Cloud.AppEngine.V1.ListInstancesResponse ListInstances(global::Google.Cloud.AppEngine.V1.ListInstancesRequest request, grpc::CallOptions options)
      {
        return CallInvoker.BlockingUnaryCall(__Method_ListInstances, null, options, request);
      }
      ///
      /// Lists the instances of a version.
      ///
      /// Tip: To aggregate details about instances over time, see the
      /// [Stackdriver Monitoring API](https://cloud.google.com/monitoring/api/ref_v3/rest/v3/projects.timeSeries/list).
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.Cloud.AppEngine.V1.ListInstancesResponse> ListInstancesAsync(global::Google.Cloud.AppEngine.V1.ListInstancesRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return ListInstancesAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Lists the instances of a version.
      ///
      /// Tip: To aggregate details about instances over time, see the
      /// [Stackdriver Monitoring API](https://cloud.google.com/monitoring/api/ref_v3/rest/v3/projects.timeSeries/list).
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.Cloud.AppEngine.V1.ListInstancesResponse> ListInstancesAsync(global::Google.Cloud.AppEngine.V1.ListInstancesRequest request, grpc::CallOptions options)
      {
        return CallInvoker.AsyncUnaryCall(__Method_ListInstances, null, options, request);
      }
      ///
      /// Gets instance information.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.Cloud.AppEngine.V1.Instance GetInstance(global::Google.Cloud.AppEngine.V1.GetInstanceRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return GetInstance(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Gets instance information.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.Cloud.AppEngine.V1.Instance GetInstance(global::Google.Cloud.AppEngine.V1.GetInstanceRequest request, grpc::CallOptions options)
      {
        return CallInvoker.BlockingUnaryCall(__Method_GetInstance, null, options, request);
      }
      ///
      /// Gets instance information.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.Cloud.AppEngine.V1.Instance> GetInstanceAsync(global::Google.Cloud.AppEngine.V1.GetInstanceRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return GetInstanceAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Gets instance information.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.Cloud.AppEngine.V1.Instance> GetInstanceAsync(global::Google.Cloud.AppEngine.V1.GetInstanceRequest request, grpc::CallOptions options)
      {
        return CallInvoker.AsyncUnaryCall(__Method_GetInstance, null, options, request);
      }
      ///
      /// Stops a running instance.
      ///
      /// The instance might be automatically recreated based on the scaling settings
      /// of the version. For more information, see "How Instances are Managed"
      /// ([standard environment](https://cloud.google.com/appengine/docs/standard/python/how-instances-are-managed) |
      /// [flexible environment](https://cloud.google.com/appengine/docs/flexible/python/how-instances-are-managed)).
      ///
      /// To ensure that instances are not re-created and avoid getting billed, you
      /// can stop all instances within the target version by changing the serving
      /// status of the version to `STOPPED` with the
      /// [`apps.services.versions.patch`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions/patch)
      /// method.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.LongRunning.Operation DeleteInstance(global::Google.Cloud.AppEngine.V1.DeleteInstanceRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return DeleteInstance(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Stops a running instance.
      ///
      /// The instance might be automatically recreated based on the scaling settings
      /// of the version. For more information, see "How Instances are Managed"
      /// ([standard environment](https://cloud.google.com/appengine/docs/standard/python/how-instances-are-managed) |
      /// [flexible environment](https://cloud.google.com/appengine/docs/flexible/python/how-instances-are-managed)).
      ///
      /// To ensure that instances are not re-created and avoid getting billed, you
      /// can stop all instances within the target version by changing the serving
      /// status of the version to `STOPPED` with the
      /// [`apps.services.versions.patch`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions/patch)
      /// method.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.LongRunning.Operation DeleteInstance(global::Google.Cloud.AppEngine.V1.DeleteInstanceRequest request, grpc::CallOptions options)
      {
        return CallInvoker.BlockingUnaryCall(__Method_DeleteInstance, null, options, request);
      }
      ///
      /// Stops a running instance.
      ///
      /// The instance might be automatically recreated based on the scaling settings
      /// of the version. For more information, see "How Instances are Managed"
      /// ([standard environment](https://cloud.google.com/appengine/docs/standard/python/how-instances-are-managed) |
      /// [flexible environment](https://cloud.google.com/appengine/docs/flexible/python/how-instances-are-managed)).
      ///
      /// To ensure that instances are not re-created and avoid getting billed, you
      /// can stop all instances within the target version by changing the serving
      /// status of the version to `STOPPED` with the
      /// [`apps.services.versions.patch`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions/patch)
      /// method.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.LongRunning.Operation> DeleteInstanceAsync(global::Google.Cloud.AppEngine.V1.DeleteInstanceRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return DeleteInstanceAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Stops a running instance.
      ///
      /// The instance might be automatically recreated based on the scaling settings
      /// of the version. For more information, see "How Instances are Managed"
      /// ([standard environment](https://cloud.google.com/appengine/docs/standard/python/how-instances-are-managed) |
      /// [flexible environment](https://cloud.google.com/appengine/docs/flexible/python/how-instances-are-managed)).
      ///
      /// To ensure that instances are not re-created and avoid getting billed, you
      /// can stop all instances within the target version by changing the serving
      /// status of the version to `STOPPED` with the
      /// [`apps.services.versions.patch`](https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions/patch)
      /// method.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.LongRunning.Operation> DeleteInstanceAsync(global::Google.Cloud.AppEngine.V1.DeleteInstanceRequest request, grpc::CallOptions options)
      {
        return CallInvoker.AsyncUnaryCall(__Method_DeleteInstance, null, options, request);
      }
      ///
      /// Enables debugging on a VM instance. This allows you to use the SSH
      /// command to connect to the virtual machine where the instance lives.
      /// While in "debug mode", the instance continues to serve live traffic.
      /// You should delete the instance when you are done debugging and then
      /// allow the system to take over and determine if another instance
      /// should be started.
      ///
      /// Only applicable for instances in App Engine flexible environment.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.LongRunning.Operation DebugInstance(global::Google.Cloud.AppEngine.V1.DebugInstanceRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return DebugInstance(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Enables debugging on a VM instance. This allows you to use the SSH
      /// command to connect to the virtual machine where the instance lives.
      /// While in "debug mode", the instance continues to serve live traffic.
      /// You should delete the instance when you are done debugging and then
      /// allow the system to take over and determine if another instance
      /// should be started.
      ///
      /// Only applicable for instances in App Engine flexible environment.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.LongRunning.Operation DebugInstance(global::Google.Cloud.AppEngine.V1.DebugInstanceRequest request, grpc::CallOptions options)
      {
        return CallInvoker.BlockingUnaryCall(__Method_DebugInstance, null, options, request);
      }
      ///
      /// Enables debugging on a VM instance. This allows you to use the SSH
      /// command to connect to the virtual machine where the instance lives.
      /// While in "debug mode", the instance continues to serve live traffic.
      /// You should delete the instance when you are done debugging and then
      /// allow the system to take over and determine if another instance
      /// should be started.
      ///
      /// Only applicable for instances in App Engine flexible environment.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.LongRunning.Operation> DebugInstanceAsync(global::Google.Cloud.AppEngine.V1.DebugInstanceRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return DebugInstanceAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Enables debugging on a VM instance. This allows you to use the SSH
      /// command to connect to the virtual machine where the instance lives.
      /// While in "debug mode", the instance continues to serve live traffic.
      /// You should delete the instance when you are done debugging and then
      /// allow the system to take over and determine if another instance
      /// should be started.
      ///
      /// Only applicable for instances in App Engine flexible environment.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.LongRunning.Operation> DebugInstanceAsync(global::Google.Cloud.AppEngine.V1.DebugInstanceRequest request, grpc::CallOptions options)
      {
        return CallInvoker.AsyncUnaryCall(__Method_DebugInstance, null, options, request);
      }
      /// Creates a new instance of client from given <c>ClientBaseConfiguration</c>.
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      protected override InstancesClient NewInstance(ClientBaseConfiguration configuration)
      {
        return new InstancesClient(configuration);
      }
    }

    /// Creates service definition that can be registered with a server
    /// <param name="serviceImpl">An object implementing the server-side handling logic.</param>
    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    public static grpc::ServerServiceDefinition BindService(InstancesBase serviceImpl)
    {
      return grpc::ServerServiceDefinition.CreateBuilder()
          .AddMethod(__Method_ListInstances, serviceImpl.ListInstances)
          .AddMethod(__Method_GetInstance, serviceImpl.GetInstance)
          .AddMethod(__Method_DeleteInstance, serviceImpl.DeleteInstance)
          .AddMethod(__Method_DebugInstance, serviceImpl.DebugInstance).Build();
    }

    /// Register service method with a service binder with or without implementation. Useful when customizing the  service binding logic.
    /// Note: this method is part of an experimental API that can change or be removed without any prior notice.
    /// <param name="serviceBinder">Service methods will be bound by calling <c>AddMethod</c> on this object.</param>
    /// <param name="serviceImpl">An object implementing the server-side handling logic.</param>
    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    public static void BindService(grpc::ServiceBinderBase serviceBinder, InstancesBase serviceImpl)
    {
      serviceBinder.AddMethod(__Method_ListInstances, serviceImpl == null ? null : new grpc::UnaryServerMethod<global::Google.Cloud.AppEngine.V1.ListInstancesRequest, global::Google.Cloud.AppEngine.V1.ListInstancesResponse>(serviceImpl.ListInstances));
      serviceBinder.AddMethod(__Method_GetInstance, serviceImpl == null ? null : new grpc::UnaryServerMethod<global::Google.Cloud.AppEngine.V1.GetInstanceRequest, global::Google.Cloud.AppEngine.V1.Instance>(serviceImpl.GetInstance));
      serviceBinder.AddMethod(__Method_DeleteInstance, serviceImpl == null ? null : new grpc::UnaryServerMethod<global::Google.Cloud.AppEngine.V1.DeleteInstanceRequest, global::Google.LongRunning.Operation>(serviceImpl.DeleteInstance));
      serviceBinder.AddMethod(__Method_DebugInstance, serviceImpl == null ? null : new grpc::UnaryServerMethod<global::Google.Cloud.AppEngine.V1.DebugInstanceRequest, global::Google.LongRunning.Operation>(serviceImpl.DebugInstance));
    }

  }
  ///
  /// Firewall resources are used to define a collection of access control rules
  /// for an Application. Each rule is defined with a position which specifies
  /// the rule's order in the sequence of rules, an IP range to be matched against
  /// requests, and an action to take upon matching requests.
  ///
  /// Every request is evaluated against the Firewall rules in priority order.
  /// Processesing stops at the first rule which matches the request's IP address.
  /// A final rule always specifies an action that applies to all remaining
  /// IP addresses. The default final rule for a newly-created application will be
  /// set to "allow" if not otherwise specified by the user.
  ///
  public static partial class Firewall
  {
    static readonly string __ServiceName = "google.appengine.v1.Firewall";

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static void __Helper_SerializeMessage(global::Google.Protobuf.IMessage message, grpc::SerializationContext context)
    {
      #if !GRPC_DISABLE_PROTOBUF_BUFFER_SERIALIZATION
      if (message is global::Google.Protobuf.IBufferMessage)
      {
        context.SetPayloadLength(message.CalculateSize());
        global::Google.Protobuf.MessageExtensions.WriteTo(message, context.GetBufferWriter());
        context.Complete();
        return;
      }
      #endif
      context.Complete(global::Google.Protobuf.MessageExtensions.ToByteArray(message));
    }

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static class __Helper_MessageCache<T>
    {
      public static readonly bool IsBufferMessage = global::System.Reflection.IntrospectionExtensions.GetTypeInfo(typeof(global::Google.Protobuf.IBufferMessage)).IsAssignableFrom(typeof(T));
    }

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static T __Helper_DeserializeMessage<T>(grpc::DeserializationContext context, global::Google.Protobuf.MessageParser<T> parser) where T : global::Google.Protobuf.IMessage<T>
    {
      #if !GRPC_DISABLE_PROTOBUF_BUFFER_SERIALIZATION
      if (__Helper_MessageCache<T>.IsBufferMessage)
      {
        return parser.ParseFrom(context.PayloadAsReadOnlySequence());
      }
      #endif
      return parser.ParseFrom(context.PayloadAsNewBuffer());
    }

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Marshaller<global::Google.Cloud.AppEngine.V1.ListIngressRulesRequest> __Marshaller_google_appengine_v1_ListIngressRulesRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.AppEngine.V1.ListIngressRulesRequest.Parser));
    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Marshaller<global::Google.Cloud.AppEngine.V1.ListIngressRulesResponse> __Marshaller_google_appengine_v1_ListIngressRulesResponse = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.AppEngine.V1.ListIngressRulesResponse.Parser));
    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Marshaller<global::Google.Cloud.AppEngine.V1.BatchUpdateIngressRulesRequest> __Marshaller_google_appengine_v1_BatchUpdateIngressRulesRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.AppEngine.V1.BatchUpdateIngressRulesRequest.Parser));
    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Marshaller<global::Google.Cloud.AppEngine.V1.BatchUpdateIngressRulesResponse> __Marshaller_google_appengine_v1_BatchUpdateIngressRulesResponse = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.AppEngine.V1.BatchUpdateIngressRulesResponse.Parser));
    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Marshaller<global::Google.Cloud.AppEngine.V1.CreateIngressRuleRequest> __Marshaller_google_appengine_v1_CreateIngressRuleRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.AppEngine.V1.CreateIngressRuleRequest.Parser));
    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Marshaller<global::Google.Cloud.AppEngine.V1.FirewallRule> __Marshaller_google_appengine_v1_FirewallRule = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.AppEngine.V1.FirewallRule.Parser));
    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Marshaller<global::Google.Cloud.AppEngine.V1.GetIngressRuleRequest> __Marshaller_google_appengine_v1_GetIngressRuleRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.AppEngine.V1.GetIngressRuleRequest.Parser));
    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Marshaller<global::Google.Cloud.AppEngine.V1.UpdateIngressRuleRequest> __Marshaller_google_appengine_v1_UpdateIngressRuleRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.AppEngine.V1.UpdateIngressRuleRequest.Parser));
    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Marshaller<global::Google.Cloud.AppEngine.V1.DeleteIngressRuleRequest> __Marshaller_google_appengine_v1_DeleteIngressRuleRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.AppEngine.V1.DeleteIngressRuleRequest.Parser));
    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Marshaller<global::Google.Protobuf.WellKnownTypes.Empty> __Marshaller_google_protobuf_Empty = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Protobuf.WellKnownTypes.Empty.Parser));

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Method<global::Google.Cloud.AppEngine.V1.ListIngressRulesRequest, global::Google.Cloud.AppEngine.V1.ListIngressRulesResponse> __Method_ListIngressRules = new grpc::Method<global::Google.Cloud.AppEngine.V1.ListIngressRulesRequest, global::Google.Cloud.AppEngine.V1.ListIngressRulesResponse>(
        grpc::MethodType.Unary,
        __ServiceName,
        "ListIngressRules",
        __Marshaller_google_appengine_v1_ListIngressRulesRequest,
        __Marshaller_google_appengine_v1_ListIngressRulesResponse);

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Method<global::Google.Cloud.AppEngine.V1.BatchUpdateIngressRulesRequest, global::Google.Cloud.AppEngine.V1.BatchUpdateIngressRulesResponse> __Method_BatchUpdateIngressRules = new grpc::Method<global::Google.Cloud.AppEngine.V1.BatchUpdateIngressRulesRequest, global::Google.Cloud.AppEngine.V1.BatchUpdateIngressRulesResponse>(
        grpc::MethodType.Unary,
        __ServiceName,
        "BatchUpdateIngressRules",
        __Marshaller_google_appengine_v1_BatchUpdateIngressRulesRequest,
        __Marshaller_google_appengine_v1_BatchUpdateIngressRulesResponse);

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Method<global::Google.Cloud.AppEngine.V1.CreateIngressRuleRequest, global::Google.Cloud.AppEngine.V1.FirewallRule> __Method_CreateIngressRule = new grpc::Method<global::Google.Cloud.AppEngine.V1.CreateIngressRuleRequest, global::Google.Cloud.AppEngine.V1.FirewallRule>(
        grpc::MethodType.Unary,
        __ServiceName,
        "CreateIngressRule",
        __Marshaller_google_appengine_v1_CreateIngressRuleRequest,
        __Marshaller_google_appengine_v1_FirewallRule);

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Method<global::Google.Cloud.AppEngine.V1.GetIngressRuleRequest, global::Google.Cloud.AppEngine.V1.FirewallRule> __Method_GetIngressRule = new grpc::Method<global::Google.Cloud.AppEngine.V1.GetIngressRuleRequest, global::Google.Cloud.AppEngine.V1.FirewallRule>(
        grpc::MethodType.Unary,
        __ServiceName,
        "GetIngressRule",
        __Marshaller_google_appengine_v1_GetIngressRuleRequest,
        __Marshaller_google_appengine_v1_FirewallRule);

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Method<global::Google.Cloud.AppEngine.V1.UpdateIngressRuleRequest, global::Google.Cloud.AppEngine.V1.FirewallRule> __Method_UpdateIngressRule = new grpc::Method<global::Google.Cloud.AppEngine.V1.UpdateIngressRuleRequest, global::Google.Cloud.AppEngine.V1.FirewallRule>(
        grpc::MethodType.Unary,
        __ServiceName,
        "UpdateIngressRule",
        __Marshaller_google_appengine_v1_UpdateIngressRuleRequest,
        __Marshaller_google_appengine_v1_FirewallRule);

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Method<global::Google.Cloud.AppEngine.V1.DeleteIngressRuleRequest, global::Google.Protobuf.WellKnownTypes.Empty> __Method_DeleteIngressRule = new grpc::Method<global::Google.Cloud.AppEngine.V1.DeleteIngressRuleRequest, global::Google.Protobuf.WellKnownTypes.Empty>(
        grpc::MethodType.Unary,
        __ServiceName,
        "DeleteIngressRule",
        __Marshaller_google_appengine_v1_DeleteIngressRuleRequest,
        __Marshaller_google_protobuf_Empty);

    /// Service descriptor
    public static global::Google.Protobuf.Reflection.ServiceDescriptor Descriptor
    {
      get { return global::Google.Cloud.AppEngine.V1.AppengineReflection.Descriptor.Services[4]; }
    }

    /// Base class for server-side implementations of Firewall
    [grpc::BindServiceMethod(typeof(Firewall), "BindService")]
    public abstract partial class FirewallBase
    {
      ///
      /// Lists the firewall rules of an application.
      ///
      /// <param name="request">The request received from the client.</param>
      /// <param name="context">The context of the server-side call handler being invoked.</param>
      /// <returns>The response to send back to the client (wrapped by a task).</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::System.Threading.Tasks.Task<global::Google.Cloud.AppEngine.V1.ListIngressRulesResponse> ListIngressRules(global::Google.Cloud.AppEngine.V1.ListIngressRulesRequest request, grpc::ServerCallContext context)
      {
        throw new grpc::RpcException(new grpc::Status(grpc::StatusCode.Unimplemented, ""));
      }

      ///
      /// Replaces the entire firewall ruleset in one bulk operation. This overrides
      /// and replaces the rules of an existing firewall with the new rules.
      ///
      /// If the final rule does not match traffic with the '*' wildcard IP range,
      /// then an "allow all" rule is explicitly added to the end of the list.
      ///
      /// <param name="request">The request received from the client.</param>
      /// <param name="context">The context of the server-side call handler being invoked.</param>
      /// <returns>The response to send back to the client (wrapped by a task).</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::System.Threading.Tasks.Task<global::Google.Cloud.AppEngine.V1.BatchUpdateIngressRulesResponse> BatchUpdateIngressRules(global::Google.Cloud.AppEngine.V1.BatchUpdateIngressRulesRequest request, grpc::ServerCallContext context)
      {
        throw new grpc::RpcException(new grpc::Status(grpc::StatusCode.Unimplemented, ""));
      }

      ///
      /// Creates a firewall rule for the application.
      ///
      /// <param name="request">The request received from the client.</param>
      /// <param name="context">The context of the server-side call handler being invoked.</param>
      /// <returns>The response to send back to the client (wrapped by a task).</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::System.Threading.Tasks.Task<global::Google.Cloud.AppEngine.V1.FirewallRule> CreateIngressRule(global::Google.Cloud.AppEngine.V1.CreateIngressRuleRequest request, grpc::ServerCallContext context)
      {
        throw new grpc::RpcException(new grpc::Status(grpc::StatusCode.Unimplemented, ""));
      }

      ///
      /// Gets the specified firewall rule.
      ///
      /// <param name="request">The request received from the client.</param>
      /// <param name="context">The context of the server-side call handler being invoked.</param>
      /// <returns>The response to send back to the client (wrapped by a task).</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::System.Threading.Tasks.Task<global::Google.Cloud.AppEngine.V1.FirewallRule> GetIngressRule(global::Google.Cloud.AppEngine.V1.GetIngressRuleRequest request, grpc::ServerCallContext context)
      {
        throw new grpc::RpcException(new grpc::Status(grpc::StatusCode.Unimplemented, ""));
      }

      ///
      /// Updates the specified firewall rule.
      ///
      /// <param name="request">The request received from the client.</param>
      /// <param name="context">The context of the server-side call handler being invoked.</param>
      /// <returns>The response to send back to the client (wrapped by a task).</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::System.Threading.Tasks.Task<global::Google.Cloud.AppEngine.V1.FirewallRule> UpdateIngressRule(global::Google.Cloud.AppEngine.V1.UpdateIngressRuleRequest request, grpc::ServerCallContext context)
      {
        throw new grpc::RpcException(new grpc::Status(grpc::StatusCode.Unimplemented, ""));
      }

      ///
      /// Deletes the specified firewall rule.
      ///
      /// <param name="request">The request received from the client.</param>
      /// <param name="context">The context of the server-side call handler being invoked.</param>
      /// <returns>The response to send back to the client (wrapped by a task).</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::System.Threading.Tasks.Task<global::Google.Protobuf.WellKnownTypes.Empty> DeleteIngressRule(global::Google.Cloud.AppEngine.V1.DeleteIngressRuleRequest request, grpc::ServerCallContext context)
      {
        throw new grpc::RpcException(new grpc::Status(grpc::StatusCode.Unimplemented, ""));
      }

    }

    /// Client for Firewall
    public partial class FirewallClient : grpc::ClientBase<FirewallClient>
    {
      /// Creates a new client for Firewall
      /// <param name="channel">The channel to use to make remote calls.</param>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public FirewallClient(grpc::ChannelBase channel) : base(channel)
      {
      }
      /// Creates a new client for Firewall that uses a custom <c>CallInvoker</c>.
      /// <param name="callInvoker">The callInvoker to use to make remote calls.</param>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public FirewallClient(grpc::CallInvoker callInvoker) : base(callInvoker)
      {
      }
      /// Protected parameterless constructor to allow creation of test doubles.
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      protected FirewallClient() : base()
      {
      }
      /// Protected constructor to allow creation of configured clients.
      /// <param name="configuration">The client configuration.</param>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      protected FirewallClient(ClientBaseConfiguration configuration) : base(configuration)
      {
      }

      ///
      /// Lists the firewall rules of an application.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.Cloud.AppEngine.V1.ListIngressRulesResponse ListIngressRules(global::Google.Cloud.AppEngine.V1.ListIngressRulesRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return ListIngressRules(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Lists the firewall rules of an application.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.Cloud.AppEngine.V1.ListIngressRulesResponse ListIngressRules(global::Google.Cloud.AppEngine.V1.ListIngressRulesRequest request, grpc::CallOptions options)
      {
        return CallInvoker.BlockingUnaryCall(__Method_ListIngressRules, null, options, request);
      }
      ///
      /// Lists the firewall rules of an application.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.Cloud.AppEngine.V1.ListIngressRulesResponse> ListIngressRulesAsync(global::Google.Cloud.AppEngine.V1.ListIngressRulesRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return ListIngressRulesAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Lists the firewall rules of an application.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.Cloud.AppEngine.V1.ListIngressRulesResponse> ListIngressRulesAsync(global::Google.Cloud.AppEngine.V1.ListIngressRulesRequest request, grpc::CallOptions options)
      {
        return CallInvoker.AsyncUnaryCall(__Method_ListIngressRules, null, options, request);
      }
      ///
      /// Replaces the entire firewall ruleset in one bulk operation. This overrides
      /// and replaces the rules of an existing firewall with the new rules.
      ///
      /// If the final rule does not match traffic with the '*' wildcard IP range,
      /// then an "allow all" rule is explicitly added to the end of the list.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.Cloud.AppEngine.V1.BatchUpdateIngressRulesResponse BatchUpdateIngressRules(global::Google.Cloud.AppEngine.V1.BatchUpdateIngressRulesRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return BatchUpdateIngressRules(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Replaces the entire firewall ruleset in one bulk operation. This overrides
      /// and replaces the rules of an existing firewall with the new rules.
      ///
      /// If the final rule does not match traffic with the '*' wildcard IP range,
      /// then an "allow all" rule is explicitly added to the end of the list.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.Cloud.AppEngine.V1.BatchUpdateIngressRulesResponse BatchUpdateIngressRules(global::Google.Cloud.AppEngine.V1.BatchUpdateIngressRulesRequest request, grpc::CallOptions options)
      {
        return CallInvoker.BlockingUnaryCall(__Method_BatchUpdateIngressRules, null, options, request);
      }
      ///
      /// Replaces the entire firewall ruleset in one bulk operation. This overrides
      /// and replaces the rules of an existing firewall with the new rules.
      ///
      /// If the final rule does not match traffic with the '*' wildcard IP range,
      /// then an "allow all" rule is explicitly added to the end of the list.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.Cloud.AppEngine.V1.BatchUpdateIngressRulesResponse> BatchUpdateIngressRulesAsync(global::Google.Cloud.AppEngine.V1.BatchUpdateIngressRulesRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return BatchUpdateIngressRulesAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Replaces the entire firewall ruleset in one bulk operation. This overrides
      /// and replaces the rules of an existing firewall with the new rules.
      ///
      /// If the final rule does not match traffic with the '*' wildcard IP range,
      /// then an "allow all" rule is explicitly added to the end of the list.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.Cloud.AppEngine.V1.BatchUpdateIngressRulesResponse> BatchUpdateIngressRulesAsync(global::Google.Cloud.AppEngine.V1.BatchUpdateIngressRulesRequest request, grpc::CallOptions options)
      {
        return CallInvoker.AsyncUnaryCall(__Method_BatchUpdateIngressRules, null, options, request);
      }
      ///
      /// Creates a firewall rule for the application.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.Cloud.AppEngine.V1.FirewallRule CreateIngressRule(global::Google.Cloud.AppEngine.V1.CreateIngressRuleRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return CreateIngressRule(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Creates a firewall rule for the application.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.Cloud.AppEngine.V1.FirewallRule CreateIngressRule(global::Google.Cloud.AppEngine.V1.CreateIngressRuleRequest request, grpc::CallOptions options)
      {
        return CallInvoker.BlockingUnaryCall(__Method_CreateIngressRule, null, options, request);
      }
      ///
      /// Creates a firewall rule for the application.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.Cloud.AppEngine.V1.FirewallRule> CreateIngressRuleAsync(global::Google.Cloud.AppEngine.V1.CreateIngressRuleRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return CreateIngressRuleAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Creates a firewall rule for the application.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.Cloud.AppEngine.V1.FirewallRule> CreateIngressRuleAsync(global::Google.Cloud.AppEngine.V1.CreateIngressRuleRequest request, grpc::CallOptions options)
      {
        return CallInvoker.AsyncUnaryCall(__Method_CreateIngressRule, null, options, request);
      }
      ///
      /// Gets the specified firewall rule.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.Cloud.AppEngine.V1.FirewallRule GetIngressRule(global::Google.Cloud.AppEngine.V1.GetIngressRuleRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return GetIngressRule(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Gets the specified firewall rule.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.Cloud.AppEngine.V1.FirewallRule GetIngressRule(global::Google.Cloud.AppEngine.V1.GetIngressRuleRequest request, grpc::CallOptions options)
      {
        return CallInvoker.BlockingUnaryCall(__Method_GetIngressRule, null, options, request);
      }
      ///
      /// Gets the specified firewall rule.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.Cloud.AppEngine.V1.FirewallRule> GetIngressRuleAsync(global::Google.Cloud.AppEngine.V1.GetIngressRuleRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return GetIngressRuleAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Gets the specified firewall rule.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.Cloud.AppEngine.V1.FirewallRule> GetIngressRuleAsync(global::Google.Cloud.AppEngine.V1.GetIngressRuleRequest request, grpc::CallOptions options)
      {
        return CallInvoker.AsyncUnaryCall(__Method_GetIngressRule, null, options, request);
      }
      ///
      /// Updates the specified firewall rule.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.Cloud.AppEngine.V1.FirewallRule UpdateIngressRule(global::Google.Cloud.AppEngine.V1.UpdateIngressRuleRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return UpdateIngressRule(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Updates the specified firewall rule.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.Cloud.AppEngine.V1.FirewallRule UpdateIngressRule(global::Google.Cloud.AppEngine.V1.UpdateIngressRuleRequest request, grpc::CallOptions options)
      {
        return CallInvoker.BlockingUnaryCall(__Method_UpdateIngressRule, null, options, request);
      }
      ///
      /// Updates the specified firewall rule.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.Cloud.AppEngine.V1.FirewallRule> UpdateIngressRuleAsync(global::Google.Cloud.AppEngine.V1.UpdateIngressRuleRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return UpdateIngressRuleAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Updates the specified firewall rule.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.Cloud.AppEngine.V1.FirewallRule> UpdateIngressRuleAsync(global::Google.Cloud.AppEngine.V1.UpdateIngressRuleRequest request, grpc::CallOptions options)
      {
        return CallInvoker.AsyncUnaryCall(__Method_UpdateIngressRule, null, options, request);
      }
      ///
      /// Deletes the specified firewall rule.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.Protobuf.WellKnownTypes.Empty DeleteIngressRule(global::Google.Cloud.AppEngine.V1.DeleteIngressRuleRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return DeleteIngressRule(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Deletes the specified firewall rule.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.Protobuf.WellKnownTypes.Empty DeleteIngressRule(global::Google.Cloud.AppEngine.V1.DeleteIngressRuleRequest request, grpc::CallOptions options)
      {
        return CallInvoker.BlockingUnaryCall(__Method_DeleteIngressRule, null, options, request);
      }
      ///
      /// Deletes the specified firewall rule.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.Protobuf.WellKnownTypes.Empty> DeleteIngressRuleAsync(global::Google.Cloud.AppEngine.V1.DeleteIngressRuleRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return DeleteIngressRuleAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Deletes the specified firewall rule.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.Protobuf.WellKnownTypes.Empty> DeleteIngressRuleAsync(global::Google.Cloud.AppEngine.V1.DeleteIngressRuleRequest request, grpc::CallOptions options)
      {
        return CallInvoker.AsyncUnaryCall(__Method_DeleteIngressRule, null, options, request);
      }
      /// Creates a new instance of client from given <c>ClientBaseConfiguration</c>.
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      protected override FirewallClient NewInstance(ClientBaseConfiguration configuration)
      {
        return new FirewallClient(configuration);
      }
    }

    /// Creates service definition that can be registered with a server
    /// <param name="serviceImpl">An object implementing the server-side handling logic.</param>
    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    public static grpc::ServerServiceDefinition BindService(FirewallBase serviceImpl)
    {
      return grpc::ServerServiceDefinition.CreateBuilder()
          .AddMethod(__Method_ListIngressRules, serviceImpl.ListIngressRules)
          .AddMethod(__Method_BatchUpdateIngressRules, serviceImpl.BatchUpdateIngressRules)
          .AddMethod(__Method_CreateIngressRule, serviceImpl.CreateIngressRule)
          .AddMethod(__Method_GetIngressRule, serviceImpl.GetIngressRule)
          .AddMethod(__Method_UpdateIngressRule, serviceImpl.UpdateIngressRule)
          .AddMethod(__Method_DeleteIngressRule, serviceImpl.DeleteIngressRule).Build();
    }

    /// Register service method with a service binder with or without implementation. Useful when customizing the  service binding logic.
    /// Note: this method is part of an experimental API that can change or be removed without any prior notice.
    /// <param name="serviceBinder">Service methods will be bound by calling <c>AddMethod</c> on this object.</param>
    /// <param name="serviceImpl">An object implementing the server-side handling logic.</param>
    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    public static void BindService(grpc::ServiceBinderBase serviceBinder, FirewallBase serviceImpl)
    {
      serviceBinder.AddMethod(__Method_ListIngressRules, serviceImpl == null ? null : new grpc::UnaryServerMethod<global::Google.Cloud.AppEngine.V1.ListIngressRulesRequest, global::Google.Cloud.AppEngine.V1.ListIngressRulesResponse>(serviceImpl.ListIngressRules));
      serviceBinder.AddMethod(__Method_BatchUpdateIngressRules, serviceImpl == null ? null : new grpc::UnaryServerMethod<global::Google.Cloud.AppEngine.V1.BatchUpdateIngressRulesRequest, global::Google.Cloud.AppEngine.V1.BatchUpdateIngressRulesResponse>(serviceImpl.BatchUpdateIngressRules));
      serviceBinder.AddMethod(__Method_CreateIngressRule, serviceImpl == null ? null : new grpc::UnaryServerMethod<global::Google.Cloud.AppEngine.V1.CreateIngressRuleRequest, global::Google.Cloud.AppEngine.V1.FirewallRule>(serviceImpl.CreateIngressRule));
      serviceBinder.AddMethod(__Method_GetIngressRule, serviceImpl == null ? null : new grpc::UnaryServerMethod<global::Google.Cloud.AppEngine.V1.GetIngressRuleRequest, global::Google.Cloud.AppEngine.V1.FirewallRule>(serviceImpl.GetIngressRule));
      serviceBinder.AddMethod(__Method_UpdateIngressRule, serviceImpl == null ? null : new grpc::UnaryServerMethod<global::Google.Cloud.AppEngine.V1.UpdateIngressRuleRequest, global::Google.Cloud.AppEngine.V1.FirewallRule>(serviceImpl.UpdateIngressRule));
      serviceBinder.AddMethod(__Method_DeleteIngressRule, serviceImpl == null ? null : new grpc::UnaryServerMethod<global::Google.Cloud.AppEngine.V1.DeleteIngressRuleRequest, global::Google.Protobuf.WellKnownTypes.Empty>(serviceImpl.DeleteIngressRule));
    }

  }
  ///
  /// Manages domains a user is authorized to administer. To authorize use of a
  /// domain, verify ownership via
  /// [Webmaster Central](https://www.google.com/webmasters/verification/home).
  ///
  public static partial class AuthorizedDomains
  {
    static readonly string __ServiceName = "google.appengine.v1.AuthorizedDomains";

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static void __Helper_SerializeMessage(global::Google.Protobuf.IMessage message, grpc::SerializationContext context)
    {
      #if !GRPC_DISABLE_PROTOBUF_BUFFER_SERIALIZATION
      if (message is global::Google.Protobuf.IBufferMessage)
      {
        context.SetPayloadLength(message.CalculateSize());
        global::Google.Protobuf.MessageExtensions.WriteTo(message, context.GetBufferWriter());
        context.Complete();
        return;
      }
      #endif
      context.Complete(global::Google.Protobuf.MessageExtensions.ToByteArray(message));
    }

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static class __Helper_MessageCache<T>
    {
      public static readonly bool IsBufferMessage = global::System.Reflection.IntrospectionExtensions.GetTypeInfo(typeof(global::Google.Protobuf.IBufferMessage)).IsAssignableFrom(typeof(T));
    }

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static T __Helper_DeserializeMessage<T>(grpc::DeserializationContext context, global::Google.Protobuf.MessageParser<T> parser) where T : global::Google.Protobuf.IMessage<T>
    {
      #if !GRPC_DISABLE_PROTOBUF_BUFFER_SERIALIZATION
      if (__Helper_MessageCache<T>.IsBufferMessage)
      {
        return parser.ParseFrom(context.PayloadAsReadOnlySequence());
      }
      #endif
      return parser.ParseFrom(context.PayloadAsNewBuffer());
    }

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Marshaller<global::Google.Cloud.AppEngine.V1.ListAuthorizedDomainsRequest> __Marshaller_google_appengine_v1_ListAuthorizedDomainsRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.AppEngine.V1.ListAuthorizedDomainsRequest.Parser));
    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Marshaller<global::Google.Cloud.AppEngine.V1.ListAuthorizedDomainsResponse> __Marshaller_google_appengine_v1_ListAuthorizedDomainsResponse = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.AppEngine.V1.ListAuthorizedDomainsResponse.Parser));

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Method<global::Google.Cloud.AppEngine.V1.ListAuthorizedDomainsRequest, global::Google.Cloud.AppEngine.V1.ListAuthorizedDomainsResponse> __Method_ListAuthorizedDomains = new grpc::Method<global::Google.Cloud.AppEngine.V1.ListAuthorizedDomainsRequest, global::Google.Cloud.AppEngine.V1.ListAuthorizedDomainsResponse>(
        grpc::MethodType.Unary,
        __ServiceName,
        "ListAuthorizedDomains",
        __Marshaller_google_appengine_v1_ListAuthorizedDomainsRequest,
        __Marshaller_google_appengine_v1_ListAuthorizedDomainsResponse);

    /// Service descriptor
    public static global::Google.Protobuf.Reflection.ServiceDescriptor Descriptor
    {
      get { return global::Google.Cloud.AppEngine.V1.AppengineReflection.Descriptor.Services[5]; }
    }

    /// Base class for server-side implementations of AuthorizedDomains
    [grpc::BindServiceMethod(typeof(AuthorizedDomains), "BindService")]
    public abstract partial class AuthorizedDomainsBase
    {
      ///
      /// Lists all domains the user is authorized to administer.
      ///
      /// <param name="request">The request received from the client.</param>
      /// <param name="context">The context of the server-side call handler being invoked.</param>
      /// <returns>The response to send back to the client (wrapped by a task).</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::System.Threading.Tasks.Task<global::Google.Cloud.AppEngine.V1.ListAuthorizedDomainsResponse> ListAuthorizedDomains(global::Google.Cloud.AppEngine.V1.ListAuthorizedDomainsRequest request, grpc::ServerCallContext context)
      {
        throw new grpc::RpcException(new grpc::Status(grpc::StatusCode.Unimplemented, ""));
      }

    }

    /// Client for AuthorizedDomains
    public partial class AuthorizedDomainsClient : grpc::ClientBase<AuthorizedDomainsClient>
    {
      /// Creates a new client for AuthorizedDomains
      /// <param name="channel">The channel to use to make remote calls.</param>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public AuthorizedDomainsClient(grpc::ChannelBase channel) : base(channel)
      {
      }
      /// Creates a new client for AuthorizedDomains that uses a custom <c>CallInvoker</c>.
      /// <param name="callInvoker">The callInvoker to use to make remote calls.</param>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public AuthorizedDomainsClient(grpc::CallInvoker callInvoker) : base(callInvoker)
      {
      }
      /// Protected parameterless constructor to allow creation of test doubles.
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      protected AuthorizedDomainsClient() : base()
      {
      }
      /// Protected constructor to allow creation of configured clients.
      /// <param name="configuration">The client configuration.</param>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      protected AuthorizedDomainsClient(ClientBaseConfiguration configuration) : base(configuration)
      {
      }

      ///
      /// Lists all domains the user is authorized to administer.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.Cloud.AppEngine.V1.ListAuthorizedDomainsResponse ListAuthorizedDomains(global::Google.Cloud.AppEngine.V1.ListAuthorizedDomainsRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return ListAuthorizedDomains(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Lists all domains the user is authorized to administer.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.Cloud.AppEngine.V1.ListAuthorizedDomainsResponse ListAuthorizedDomains(global::Google.Cloud.AppEngine.V1.ListAuthorizedDomainsRequest request, grpc::CallOptions options)
      {
        return CallInvoker.BlockingUnaryCall(__Method_ListAuthorizedDomains, null, options, request);
      }
      ///
      /// Lists all domains the user is authorized to administer.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.Cloud.AppEngine.V1.ListAuthorizedDomainsResponse> ListAuthorizedDomainsAsync(global::Google.Cloud.AppEngine.V1.ListAuthorizedDomainsRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return ListAuthorizedDomainsAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Lists all domains the user is authorized to administer.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.Cloud.AppEngine.V1.ListAuthorizedDomainsResponse> ListAuthorizedDomainsAsync(global::Google.Cloud.AppEngine.V1.ListAuthorizedDomainsRequest request, grpc::CallOptions options)
      {
        return CallInvoker.AsyncUnaryCall(__Method_ListAuthorizedDomains, null, options, request);
      }
      /// Creates a new instance of client from given <c>ClientBaseConfiguration</c>.
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      protected override AuthorizedDomainsClient NewInstance(ClientBaseConfiguration configuration)
      {
        return new AuthorizedDomainsClient(configuration);
      }
    }

    /// Creates service definition that can be registered with a server
    /// <param name="serviceImpl">An object implementing the server-side handling logic.</param>
    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    public static grpc::ServerServiceDefinition BindService(AuthorizedDomainsBase serviceImpl)
    {
      return grpc::ServerServiceDefinition.CreateBuilder()
          .AddMethod(__Method_ListAuthorizedDomains, serviceImpl.ListAuthorizedDomains).Build();
    }

    /// Register service method with a service binder with or without implementation. Useful when customizing the  service binding logic.
    /// Note: this method is part of an experimental API that can change or be removed without any prior notice.
    /// <param name="serviceBinder">Service methods will be bound by calling <c>AddMethod</c> on this object.</param>
    /// <param name="serviceImpl">An object implementing the server-side handling logic.</param>
    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    public static void BindService(grpc::ServiceBinderBase serviceBinder, AuthorizedDomainsBase serviceImpl)
    {
      serviceBinder.AddMethod(__Method_ListAuthorizedDomains, serviceImpl == null ? null : new grpc::UnaryServerMethod<global::Google.Cloud.AppEngine.V1.ListAuthorizedDomainsRequest, global::Google.Cloud.AppEngine.V1.ListAuthorizedDomainsResponse>(serviceImpl.ListAuthorizedDomains));
    }

  }
  ///
  /// Manages SSL certificates a user is authorized to administer. A user can
  /// administer any SSL certificates applicable to their authorized domains.
  ///
  public static partial class AuthorizedCertificates
  {
    static readonly string __ServiceName = "google.appengine.v1.AuthorizedCertificates";

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static void __Helper_SerializeMessage(global::Google.Protobuf.IMessage message, grpc::SerializationContext context)
    {
      #if !GRPC_DISABLE_PROTOBUF_BUFFER_SERIALIZATION
      if (message is global::Google.Protobuf.IBufferMessage)
      {
        context.SetPayloadLength(message.CalculateSize());
        global::Google.Protobuf.MessageExtensions.WriteTo(message, context.GetBufferWriter());
        context.Complete();
        return;
      }
      #endif
      context.Complete(global::Google.Protobuf.MessageExtensions.ToByteArray(message));
    }

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static class __Helper_MessageCache<T>
    {
      public static readonly bool IsBufferMessage = global::System.Reflection.IntrospectionExtensions.GetTypeInfo(typeof(global::Google.Protobuf.IBufferMessage)).IsAssignableFrom(typeof(T));
    }

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static T __Helper_DeserializeMessage<T>(grpc::DeserializationContext context, global::Google.Protobuf.MessageParser<T> parser) where T : global::Google.Protobuf.IMessage<T>
    {
      #if !GRPC_DISABLE_PROTOBUF_BUFFER_SERIALIZATION
      if (__Helper_MessageCache<T>.IsBufferMessage)
      {
        return parser.ParseFrom(context.PayloadAsReadOnlySequence());
      }
      #endif
      return parser.ParseFrom(context.PayloadAsNewBuffer());
    }

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Marshaller<global::Google.Cloud.AppEngine.V1.ListAuthorizedCertificatesRequest> __Marshaller_google_appengine_v1_ListAuthorizedCertificatesRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.AppEngine.V1.ListAuthorizedCertificatesRequest.Parser));
    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Marshaller<global::Google.Cloud.AppEngine.V1.ListAuthorizedCertificatesResponse> __Marshaller_google_appengine_v1_ListAuthorizedCertificatesResponse = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.AppEngine.V1.ListAuthorizedCertificatesResponse.Parser));
    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Marshaller<global::Google.Cloud.AppEngine.V1.GetAuthorizedCertificateRequest> __Marshaller_google_appengine_v1_GetAuthorizedCertificateRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.AppEngine.V1.GetAuthorizedCertificateRequest.Parser));
    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Marshaller<global::Google.Cloud.AppEngine.V1.AuthorizedCertificate> __Marshaller_google_appengine_v1_AuthorizedCertificate = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.AppEngine.V1.AuthorizedCertificate.Parser));
    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Marshaller<global::Google.Cloud.AppEngine.V1.CreateAuthorizedCertificateRequest> __Marshaller_google_appengine_v1_CreateAuthorizedCertificateRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.AppEngine.V1.CreateAuthorizedCertificateRequest.Parser));
    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Marshaller<global::Google.Cloud.AppEngine.V1.UpdateAuthorizedCertificateRequest> __Marshaller_google_appengine_v1_UpdateAuthorizedCertificateRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.AppEngine.V1.UpdateAuthorizedCertificateRequest.Parser));
    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Marshaller<global::Google.Cloud.AppEngine.V1.DeleteAuthorizedCertificateRequest> __Marshaller_google_appengine_v1_DeleteAuthorizedCertificateRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.AppEngine.V1.DeleteAuthorizedCertificateRequest.Parser));
    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Marshaller<global::Google.Protobuf.WellKnownTypes.Empty> __Marshaller_google_protobuf_Empty = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Protobuf.WellKnownTypes.Empty.Parser));

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Method<global::Google.Cloud.AppEngine.V1.ListAuthorizedCertificatesRequest, global::Google.Cloud.AppEngine.V1.ListAuthorizedCertificatesResponse> __Method_ListAuthorizedCertificates = new grpc::Method<global::Google.Cloud.AppEngine.V1.ListAuthorizedCertificatesRequest, global::Google.Cloud.AppEngine.V1.ListAuthorizedCertificatesResponse>(
        grpc::MethodType.Unary,
        __ServiceName,
        "ListAuthorizedCertificates",
        __Marshaller_google_appengine_v1_ListAuthorizedCertificatesRequest,
        __Marshaller_google_appengine_v1_ListAuthorizedCertificatesResponse);

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Method<global::Google.Cloud.AppEngine.V1.GetAuthorizedCertificateRequest, global::Google.Cloud.AppEngine.V1.AuthorizedCertificate> __Method_GetAuthorizedCertificate = new grpc::Method<global::Google.Cloud.AppEngine.V1.GetAuthorizedCertificateRequest, global::Google.Cloud.AppEngine.V1.AuthorizedCertificate>(
        grpc::MethodType.Unary,
        __ServiceName,
        "GetAuthorizedCertificate",
        __Marshaller_google_appengine_v1_GetAuthorizedCertificateRequest,
        __Marshaller_google_appengine_v1_AuthorizedCertificate);

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Method<global::Google.Cloud.AppEngine.V1.CreateAuthorizedCertificateRequest, global::Google.Cloud.AppEngine.V1.AuthorizedCertificate> __Method_CreateAuthorizedCertificate = new grpc::Method<global::Google.Cloud.AppEngine.V1.CreateAuthorizedCertificateRequest, global::Google.Cloud.AppEngine.V1.AuthorizedCertificate>(
        grpc::MethodType.Unary,
        __ServiceName,
        "CreateAuthorizedCertificate",
        __Marshaller_google_appengine_v1_CreateAuthorizedCertificateRequest,
        __Marshaller_google_appengine_v1_AuthorizedCertificate);

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Method<global::Google.Cloud.AppEngine.V1.UpdateAuthorizedCertificateRequest, global::Google.Cloud.AppEngine.V1.AuthorizedCertificate> __Method_UpdateAuthorizedCertificate = new grpc::Method<global::Google.Cloud.AppEngine.V1.UpdateAuthorizedCertificateRequest, global::Google.Cloud.AppEngine.V1.AuthorizedCertificate>(
        grpc::MethodType.Unary,
        __ServiceName,
        "UpdateAuthorizedCertificate",
        __Marshaller_google_appengine_v1_UpdateAuthorizedCertificateRequest,
        __Marshaller_google_appengine_v1_AuthorizedCertificate);

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Method<global::Google.Cloud.AppEngine.V1.DeleteAuthorizedCertificateRequest, global::Google.Protobuf.WellKnownTypes.Empty> __Method_DeleteAuthorizedCertificate = new grpc::Method<global::Google.Cloud.AppEngine.V1.DeleteAuthorizedCertificateRequest, global::Google.Protobuf.WellKnownTypes.Empty>(
        grpc::MethodType.Unary,
        __ServiceName,
        "DeleteAuthorizedCertificate",
        __Marshaller_google_appengine_v1_DeleteAuthorizedCertificateRequest,
        __Marshaller_google_protobuf_Empty);

    /// Service descriptor
    public static global::Google.Protobuf.Reflection.ServiceDescriptor Descriptor
    {
      get { return global::Google.Cloud.AppEngine.V1.AppengineReflection.Descriptor.Services[6]; }
    }

    /// Base class for server-side implementations of AuthorizedCertificates
    [grpc::BindServiceMethod(typeof(AuthorizedCertificates), "BindService")]
    public abstract partial class AuthorizedCertificatesBase
    {
      ///
      /// Lists all SSL certificates the user is authorized to administer.
      ///
      /// <param name="request">The request received from the client.</param>
      /// <param name="context">The context of the server-side call handler being invoked.</param>
      /// <returns>The response to send back to the client (wrapped by a task).</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::System.Threading.Tasks.Task<global::Google.Cloud.AppEngine.V1.ListAuthorizedCertificatesResponse> ListAuthorizedCertificates(global::Google.Cloud.AppEngine.V1.ListAuthorizedCertificatesRequest request, grpc::ServerCallContext context)
      {
        throw new grpc::RpcException(new grpc::Status(grpc::StatusCode.Unimplemented, ""));
      }

      ///
      /// Gets the specified SSL certificate.
      ///
      /// <param name="request">The request received from the client.</param>
      /// <param name="context">The context of the server-side call handler being invoked.</param>
      /// <returns>The response to send back to the client (wrapped by a task).</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::System.Threading.Tasks.Task<global::Google.Cloud.AppEngine.V1.AuthorizedCertificate> GetAuthorizedCertificate(global::Google.Cloud.AppEngine.V1.GetAuthorizedCertificateRequest request, grpc::ServerCallContext context)
      {
        throw new grpc::RpcException(new grpc::Status(grpc::StatusCode.Unimplemented, ""));
      }

      ///
      /// Uploads the specified SSL certificate.
      ///
      /// <param name="request">The request received from the client.</param>
      /// <param name="context">The context of the server-side call handler being invoked.</param>
      /// <returns>The response to send back to the client (wrapped by a task).</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::System.Threading.Tasks.Task<global::Google.Cloud.AppEngine.V1.AuthorizedCertificate> CreateAuthorizedCertificate(global::Google.Cloud.AppEngine.V1.CreateAuthorizedCertificateRequest request, grpc::ServerCallContext context)
      {
        throw new grpc::RpcException(new grpc::Status(grpc::StatusCode.Unimplemented, ""));
      }

      ///
      /// Updates the specified SSL certificate. To renew a certificate and maintain
      /// its existing domain mappings, update `certificate_data` with a new
      /// certificate. The new certificate must be applicable to the same domains as
      /// the original certificate. The certificate `display_name` may also be
      /// updated.
      ///
      /// <param name="request">The request received from the client.</param>
      /// <param name="context">The context of the server-side call handler being invoked.</param>
      /// <returns>The response to send back to the client (wrapped by a task).</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::System.Threading.Tasks.Task<global::Google.Cloud.AppEngine.V1.AuthorizedCertificate> UpdateAuthorizedCertificate(global::Google.Cloud.AppEngine.V1.UpdateAuthorizedCertificateRequest request, grpc::ServerCallContext context)
      {
        throw new grpc::RpcException(new grpc::Status(grpc::StatusCode.Unimplemented, ""));
      }

      ///
      /// Deletes the specified SSL certificate.
      ///
      /// <param name="request">The request received from the client.</param>
      /// <param name="context">The context of the server-side call handler being invoked.</param>
      /// <returns>The response to send back to the client (wrapped by a task).</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::System.Threading.Tasks.Task<global::Google.Protobuf.WellKnownTypes.Empty> DeleteAuthorizedCertificate(global::Google.Cloud.AppEngine.V1.DeleteAuthorizedCertificateRequest request, grpc::ServerCallContext context)
      {
        throw new grpc::RpcException(new grpc::Status(grpc::StatusCode.Unimplemented, ""));
      }

    }

    /// Client for AuthorizedCertificates
    public partial class AuthorizedCertificatesClient : grpc::ClientBase<AuthorizedCertificatesClient>
    {
      /// Creates a new client for AuthorizedCertificates
      /// <param name="channel">The channel to use to make remote calls.</param>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public AuthorizedCertificatesClient(grpc::ChannelBase channel) : base(channel)
      {
      }
      /// Creates a new client for AuthorizedCertificates that uses a custom <c>CallInvoker</c>.
      /// <param name="callInvoker">The callInvoker to use to make remote calls.</param>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public AuthorizedCertificatesClient(grpc::CallInvoker callInvoker) : base(callInvoker)
      {
      }
      /// Protected parameterless constructor to allow creation of test doubles.
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      protected AuthorizedCertificatesClient() : base()
      {
      }
      /// Protected constructor to allow creation of configured clients.
      /// <param name="configuration">The client configuration.</param>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      protected AuthorizedCertificatesClient(ClientBaseConfiguration configuration) : base(configuration)
      {
      }

      ///
      /// Lists all SSL certificates the user is authorized to administer.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.Cloud.AppEngine.V1.ListAuthorizedCertificatesResponse ListAuthorizedCertificates(global::Google.Cloud.AppEngine.V1.ListAuthorizedCertificatesRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return ListAuthorizedCertificates(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Lists all SSL certificates the user is authorized to administer.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.Cloud.AppEngine.V1.ListAuthorizedCertificatesResponse ListAuthorizedCertificates(global::Google.Cloud.AppEngine.V1.ListAuthorizedCertificatesRequest request, grpc::CallOptions options)
      {
        return CallInvoker.BlockingUnaryCall(__Method_ListAuthorizedCertificates, null, options, request);
      }
      ///
      /// Lists all SSL certificates the user is authorized to administer.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.Cloud.AppEngine.V1.ListAuthorizedCertificatesResponse> ListAuthorizedCertificatesAsync(global::Google.Cloud.AppEngine.V1.ListAuthorizedCertificatesRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return ListAuthorizedCertificatesAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Lists all SSL certificates the user is authorized to administer.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.Cloud.AppEngine.V1.ListAuthorizedCertificatesResponse> ListAuthorizedCertificatesAsync(global::Google.Cloud.AppEngine.V1.ListAuthorizedCertificatesRequest request, grpc::CallOptions options)
      {
        return CallInvoker.AsyncUnaryCall(__Method_ListAuthorizedCertificates, null, options, request);
      }
      ///
      /// Gets the specified SSL certificate.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.Cloud.AppEngine.V1.AuthorizedCertificate GetAuthorizedCertificate(global::Google.Cloud.AppEngine.V1.GetAuthorizedCertificateRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return GetAuthorizedCertificate(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Gets the specified SSL certificate.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.Cloud.AppEngine.V1.AuthorizedCertificate GetAuthorizedCertificate(global::Google.Cloud.AppEngine.V1.GetAuthorizedCertificateRequest request, grpc::CallOptions options)
      {
        return CallInvoker.BlockingUnaryCall(__Method_GetAuthorizedCertificate, null, options, request);
      }
      ///
      /// Gets the specified SSL certificate.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.Cloud.AppEngine.V1.AuthorizedCertificate> GetAuthorizedCertificateAsync(global::Google.Cloud.AppEngine.V1.GetAuthorizedCertificateRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return GetAuthorizedCertificateAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Gets the specified SSL certificate.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.Cloud.AppEngine.V1.AuthorizedCertificate> GetAuthorizedCertificateAsync(global::Google.Cloud.AppEngine.V1.GetAuthorizedCertificateRequest request, grpc::CallOptions options)
      {
        return CallInvoker.AsyncUnaryCall(__Method_GetAuthorizedCertificate, null, options, request);
      }
      ///
      /// Uploads the specified SSL certificate.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.Cloud.AppEngine.V1.AuthorizedCertificate CreateAuthorizedCertificate(global::Google.Cloud.AppEngine.V1.CreateAuthorizedCertificateRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return CreateAuthorizedCertificate(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Uploads the specified SSL certificate.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.Cloud.AppEngine.V1.AuthorizedCertificate CreateAuthorizedCertificate(global::Google.Cloud.AppEngine.V1.CreateAuthorizedCertificateRequest request, grpc::CallOptions options)
      {
        return CallInvoker.BlockingUnaryCall(__Method_CreateAuthorizedCertificate, null, options, request);
      }
      ///
      /// Uploads the specified SSL certificate.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.Cloud.AppEngine.V1.AuthorizedCertificate> CreateAuthorizedCertificateAsync(global::Google.Cloud.AppEngine.V1.CreateAuthorizedCertificateRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return CreateAuthorizedCertificateAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Uploads the specified SSL certificate.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.Cloud.AppEngine.V1.AuthorizedCertificate> CreateAuthorizedCertificateAsync(global::Google.Cloud.AppEngine.V1.CreateAuthorizedCertificateRequest request, grpc::CallOptions options)
      {
        return CallInvoker.AsyncUnaryCall(__Method_CreateAuthorizedCertificate, null, options, request);
      }
      ///
      /// Updates the specified SSL certificate. To renew a certificate and maintain
      /// its existing domain mappings, update `certificate_data` with a new
      /// certificate. The new certificate must be applicable to the same domains as
      /// the original certificate. The certificate `display_name` may also be
      /// updated.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.Cloud.AppEngine.V1.AuthorizedCertificate UpdateAuthorizedCertificate(global::Google.Cloud.AppEngine.V1.UpdateAuthorizedCertificateRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return UpdateAuthorizedCertificate(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Updates the specified SSL certificate. To renew a certificate and maintain
      /// its existing domain mappings, update `certificate_data` with a new
      /// certificate. The new certificate must be applicable to the same domains as
      /// the original certificate. The certificate `display_name` may also be
      /// updated.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.Cloud.AppEngine.V1.AuthorizedCertificate UpdateAuthorizedCertificate(global::Google.Cloud.AppEngine.V1.UpdateAuthorizedCertificateRequest request, grpc::CallOptions options)
      {
        return CallInvoker.BlockingUnaryCall(__Method_UpdateAuthorizedCertificate, null, options, request);
      }
      ///
      /// Updates the specified SSL certificate. To renew a certificate and maintain
      /// its existing domain mappings, update `certificate_data` with a new
      /// certificate. The new certificate must be applicable to the same domains as
      /// the original certificate. The certificate `display_name` may also be
      /// updated.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.Cloud.AppEngine.V1.AuthorizedCertificate> UpdateAuthorizedCertificateAsync(global::Google.Cloud.AppEngine.V1.UpdateAuthorizedCertificateRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return UpdateAuthorizedCertificateAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Updates the specified SSL certificate. To renew a certificate and maintain
      /// its existing domain mappings, update `certificate_data` with a new
      /// certificate. The new certificate must be applicable to the same domains as
      /// the original certificate. The certificate `display_name` may also be
      /// updated.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.Cloud.AppEngine.V1.AuthorizedCertificate> UpdateAuthorizedCertificateAsync(global::Google.Cloud.AppEngine.V1.UpdateAuthorizedCertificateRequest request, grpc::CallOptions options)
      {
        return CallInvoker.AsyncUnaryCall(__Method_UpdateAuthorizedCertificate, null, options, request);
      }
      ///
      /// Deletes the specified SSL certificate.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.Protobuf.WellKnownTypes.Empty DeleteAuthorizedCertificate(global::Google.Cloud.AppEngine.V1.DeleteAuthorizedCertificateRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return DeleteAuthorizedCertificate(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Deletes the specified SSL certificate.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.Protobuf.WellKnownTypes.Empty DeleteAuthorizedCertificate(global::Google.Cloud.AppEngine.V1.DeleteAuthorizedCertificateRequest request, grpc::CallOptions options)
      {
        return CallInvoker.BlockingUnaryCall(__Method_DeleteAuthorizedCertificate, null, options, request);
      }
      ///
      /// Deletes the specified SSL certificate.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.Protobuf.WellKnownTypes.Empty> DeleteAuthorizedCertificateAsync(global::Google.Cloud.AppEngine.V1.DeleteAuthorizedCertificateRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return DeleteAuthorizedCertificateAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Deletes the specified SSL certificate.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.Protobuf.WellKnownTypes.Empty> DeleteAuthorizedCertificateAsync(global::Google.Cloud.AppEngine.V1.DeleteAuthorizedCertificateRequest request, grpc::CallOptions options)
      {
        return CallInvoker.AsyncUnaryCall(__Method_DeleteAuthorizedCertificate, null, options, request);
      }
      /// Creates a new instance of client from given <c>ClientBaseConfiguration</c>.
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      protected override AuthorizedCertificatesClient NewInstance(ClientBaseConfiguration configuration)
      {
        return new AuthorizedCertificatesClient(configuration);
      }
    }

    /// Creates service definition that can be registered with a server
    /// <param name="serviceImpl">An object implementing the server-side handling logic.</param>
    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    public static grpc::ServerServiceDefinition BindService(AuthorizedCertificatesBase serviceImpl)
    {
      return grpc::ServerServiceDefinition.CreateBuilder()
          .AddMethod(__Method_ListAuthorizedCertificates, serviceImpl.ListAuthorizedCertificates)
          .AddMethod(__Method_GetAuthorizedCertificate, serviceImpl.GetAuthorizedCertificate)
          .AddMethod(__Method_CreateAuthorizedCertificate, serviceImpl.CreateAuthorizedCertificate)
          .AddMethod(__Method_UpdateAuthorizedCertificate, serviceImpl.UpdateAuthorizedCertificate)
          .AddMethod(__Method_DeleteAuthorizedCertificate, serviceImpl.DeleteAuthorizedCertificate).Build();
    }

    /// Register service method with a service binder with or without implementation. Useful when customizing the  service binding logic.
    /// Note: this method is part of an experimental API that can change or be removed without any prior notice.
    /// <param name="serviceBinder">Service methods will be bound by calling <c>AddMethod</c> on this object.</param>
    /// <param name="serviceImpl">An object implementing the server-side handling logic.</param>
    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    public static void BindService(grpc::ServiceBinderBase serviceBinder, AuthorizedCertificatesBase serviceImpl)
    {
      serviceBinder.AddMethod(__Method_ListAuthorizedCertificates, serviceImpl == null ? null : new grpc::UnaryServerMethod<global::Google.Cloud.AppEngine.V1.ListAuthorizedCertificatesRequest, global::Google.Cloud.AppEngine.V1.ListAuthorizedCertificatesResponse>(serviceImpl.ListAuthorizedCertificates));
      serviceBinder.AddMethod(__Method_GetAuthorizedCertificate, serviceImpl == null ? null : new grpc::UnaryServerMethod<global::Google.Cloud.AppEngine.V1.GetAuthorizedCertificateRequest, global::Google.Cloud.AppEngine.V1.AuthorizedCertificate>(serviceImpl.GetAuthorizedCertificate));
      serviceBinder.AddMethod(__Method_CreateAuthorizedCertificate, serviceImpl == null ? null : new grpc::UnaryServerMethod<global::Google.Cloud.AppEngine.V1.CreateAuthorizedCertificateRequest, global::Google.Cloud.AppEngine.V1.AuthorizedCertificate>(serviceImpl.CreateAuthorizedCertificate));
      serviceBinder.AddMethod(__Method_UpdateAuthorizedCertificate, serviceImpl == null ? null : new grpc::UnaryServerMethod<global::Google.Cloud.AppEngine.V1.UpdateAuthorizedCertificateRequest, global::Google.Cloud.AppEngine.V1.AuthorizedCertificate>(serviceImpl.UpdateAuthorizedCertificate));
      serviceBinder.AddMethod(__Method_DeleteAuthorizedCertificate, serviceImpl == null ? null : new grpc::UnaryServerMethod<global::Google.Cloud.AppEngine.V1.DeleteAuthorizedCertificateRequest, global::Google.Protobuf.WellKnownTypes.Empty>(serviceImpl.DeleteAuthorizedCertificate));
    }

  }
  ///
  /// Manages domains serving an application.
  ///
  public static partial class DomainMappings
  {
    static readonly string __ServiceName = "google.appengine.v1.DomainMappings";

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static void __Helper_SerializeMessage(global::Google.Protobuf.IMessage message, grpc::SerializationContext context)
    {
      #if !GRPC_DISABLE_PROTOBUF_BUFFER_SERIALIZATION
      if (message is global::Google.Protobuf.IBufferMessage)
      {
        context.SetPayloadLength(message.CalculateSize());
        global::Google.Protobuf.MessageExtensions.WriteTo(message, context.GetBufferWriter());
        context.Complete();
        return;
      }
      #endif
      context.Complete(global::Google.Protobuf.MessageExtensions.ToByteArray(message));
    }

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static class __Helper_MessageCache<T>
    {
      public static readonly bool IsBufferMessage = global::System.Reflection.IntrospectionExtensions.GetTypeInfo(typeof(global::Google.Protobuf.IBufferMessage)).IsAssignableFrom(typeof(T));
    }

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static T __Helper_DeserializeMessage<T>(grpc::DeserializationContext context, global::Google.Protobuf.MessageParser<T> parser) where T : global::Google.Protobuf.IMessage<T>
    {
      #if !GRPC_DISABLE_PROTOBUF_BUFFER_SERIALIZATION
      if (__Helper_MessageCache<T>.IsBufferMessage)
      {
        return parser.ParseFrom(context.PayloadAsReadOnlySequence());
      }
      #endif
      return parser.ParseFrom(context.PayloadAsNewBuffer());
    }

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Marshaller<global::Google.Cloud.AppEngine.V1.ListDomainMappingsRequest> __Marshaller_google_appengine_v1_ListDomainMappingsRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.AppEngine.V1.ListDomainMappingsRequest.Parser));
    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Marshaller<global::Google.Cloud.AppEngine.V1.ListDomainMappingsResponse> __Marshaller_google_appengine_v1_ListDomainMappingsResponse = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.AppEngine.V1.ListDomainMappingsResponse.Parser));
    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Marshaller<global::Google.Cloud.AppEngine.V1.GetDomainMappingRequest> __Marshaller_google_appengine_v1_GetDomainMappingRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.AppEngine.V1.GetDomainMappingRequest.Parser));
    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Marshaller<global::Google.Cloud.AppEngine.V1.DomainMapping> __Marshaller_google_appengine_v1_DomainMapping = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.AppEngine.V1.DomainMapping.Parser));
    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Marshaller<global::Google.Cloud.AppEngine.V1.CreateDomainMappingRequest> __Marshaller_google_appengine_v1_CreateDomainMappingRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.AppEngine.V1.CreateDomainMappingRequest.Parser));
    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Marshaller<global::Google.LongRunning.Operation> __Marshaller_google_longrunning_Operation = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.LongRunning.Operation.Parser));
    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Marshaller<global::Google.Cloud.AppEngine.V1.UpdateDomainMappingRequest> __Marshaller_google_appengine_v1_UpdateDomainMappingRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.AppEngine.V1.UpdateDomainMappingRequest.Parser));
    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Marshaller<global::Google.Cloud.AppEngine.V1.DeleteDomainMappingRequest> __Marshaller_google_appengine_v1_DeleteDomainMappingRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.AppEngine.V1.DeleteDomainMappingRequest.Parser));

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Method<global::Google.Cloud.AppEngine.V1.ListDomainMappingsRequest, global::Google.Cloud.AppEngine.V1.ListDomainMappingsResponse> __Method_ListDomainMappings = new grpc::Method<global::Google.Cloud.AppEngine.V1.ListDomainMappingsRequest, global::Google.Cloud.AppEngine.V1.ListDomainMappingsResponse>(
        grpc::MethodType.Unary,
        __ServiceName,
        "ListDomainMappings",
        __Marshaller_google_appengine_v1_ListDomainMappingsRequest,
        __Marshaller_google_appengine_v1_ListDomainMappingsResponse);

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Method<global::Google.Cloud.AppEngine.V1.GetDomainMappingRequest, global::Google.Cloud.AppEngine.V1.DomainMapping> __Method_GetDomainMapping = new grpc::Method<global::Google.Cloud.AppEngine.V1.GetDomainMappingRequest, global::Google.Cloud.AppEngine.V1.DomainMapping>(
        grpc::MethodType.Unary,
        __ServiceName,
        "GetDomainMapping",
        __Marshaller_google_appengine_v1_GetDomainMappingRequest,
        __Marshaller_google_appengine_v1_DomainMapping);

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Method<global::Google.Cloud.AppEngine.V1.CreateDomainMappingRequest, global::Google.LongRunning.Operation> __Method_CreateDomainMapping = new grpc::Method<global::Google.Cloud.AppEngine.V1.CreateDomainMappingRequest, global::Google.LongRunning.Operation>(
        grpc::MethodType.Unary,
        __ServiceName,
        "CreateDomainMapping",
        __Marshaller_google_appengine_v1_CreateDomainMappingRequest,
        __Marshaller_google_longrunning_Operation);

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Method<global::Google.Cloud.AppEngine.V1.UpdateDomainMappingRequest, global::Google.LongRunning.Operation> __Method_UpdateDomainMapping = new grpc::Method<global::Google.Cloud.AppEngine.V1.UpdateDomainMappingRequest, global::Google.LongRunning.Operation>(
        grpc::MethodType.Unary,
        __ServiceName,
        "UpdateDomainMapping",
        __Marshaller_google_appengine_v1_UpdateDomainMappingRequest,
        __Marshaller_google_longrunning_Operation);

    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    static readonly grpc::Method<global::Google.Cloud.AppEngine.V1.DeleteDomainMappingRequest, global::Google.LongRunning.Operation> __Method_DeleteDomainMapping = new grpc::Method<global::Google.Cloud.AppEngine.V1.DeleteDomainMappingRequest, global::Google.LongRunning.Operation>(
        grpc::MethodType.Unary,
        __ServiceName,
        "DeleteDomainMapping",
        __Marshaller_google_appengine_v1_DeleteDomainMappingRequest,
        __Marshaller_google_longrunning_Operation);

    /// Service descriptor
    public static global::Google.Protobuf.Reflection.ServiceDescriptor Descriptor
    {
      get { return global::Google.Cloud.AppEngine.V1.AppengineReflection.Descriptor.Services[7]; }
    }

    /// Base class for server-side implementations of DomainMappings
    [grpc::BindServiceMethod(typeof(DomainMappings), "BindService")]
    public abstract partial class DomainMappingsBase
    {
      ///
      /// Lists the domain mappings on an application.
      ///
      /// <param name="request">The request received from the client.</param>
      /// <param name="context">The context of the server-side call handler being invoked.</param>
      /// <returns>The response to send back to the client (wrapped by a task).</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::System.Threading.Tasks.Task<global::Google.Cloud.AppEngine.V1.ListDomainMappingsResponse> ListDomainMappings(global::Google.Cloud.AppEngine.V1.ListDomainMappingsRequest request, grpc::ServerCallContext context)
      {
        throw new grpc::RpcException(new grpc::Status(grpc::StatusCode.Unimplemented, ""));
      }

      ///
      /// Gets the specified domain mapping.
      ///
      /// <param name="request">The request received from the client.</param>
      /// <param name="context">The context of the server-side call handler being invoked.</param>
      /// <returns>The response to send back to the client (wrapped by a task).</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::System.Threading.Tasks.Task<global::Google.Cloud.AppEngine.V1.DomainMapping> GetDomainMapping(global::Google.Cloud.AppEngine.V1.GetDomainMappingRequest request, grpc::ServerCallContext context)
      {
        throw new grpc::RpcException(new grpc::Status(grpc::StatusCode.Unimplemented, ""));
      }

      ///
      /// Maps a domain to an application. A user must be authorized to administer a
      /// domain in order to map it to an application. For a list of available
      /// authorized domains, see [`AuthorizedDomains.ListAuthorizedDomains`]().
      ///
      /// <param name="request">The request received from the client.</param>
      /// <param name="context">The context of the server-side call handler being invoked.</param>
      /// <returns>The response to send back to the client (wrapped by a task).</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::System.Threading.Tasks.Task<global::Google.LongRunning.Operation> CreateDomainMapping(global::Google.Cloud.AppEngine.V1.CreateDomainMappingRequest request, grpc::ServerCallContext context)
      {
        throw new grpc::RpcException(new grpc::Status(grpc::StatusCode.Unimplemented, ""));
      }

      ///
      /// Updates the specified domain mapping. To map an SSL certificate to a
      /// domain mapping, update `certificate_id` to point to an `AuthorizedCertificate`
      /// resource. A user must be authorized to administer the associated domain
      /// in order to update a `DomainMapping` resource.
      ///
      /// <param name="request">The request received from the client.</param>
      /// <param name="context">The context of the server-side call handler being invoked.</param>
      /// <returns>The response to send back to the client (wrapped by a task).</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::System.Threading.Tasks.Task<global::Google.LongRunning.Operation> UpdateDomainMapping(global::Google.Cloud.AppEngine.V1.UpdateDomainMappingRequest request, grpc::ServerCallContext context)
      {
        throw new grpc::RpcException(new grpc::Status(grpc::StatusCode.Unimplemented, ""));
      }

      ///
      /// Deletes the specified domain mapping. A user must be authorized to
      /// administer the associated domain in order to delete a `DomainMapping`
      /// resource.
      ///
      /// <param name="request">The request received from the client.</param>
      /// <param name="context">The context of the server-side call handler being invoked.</param>
      /// <returns>The response to send back to the client (wrapped by a task).</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::System.Threading.Tasks.Task<global::Google.LongRunning.Operation> DeleteDomainMapping(global::Google.Cloud.AppEngine.V1.DeleteDomainMappingRequest request, grpc::ServerCallContext context)
      {
        throw new grpc::RpcException(new grpc::Status(grpc::StatusCode.Unimplemented, ""));
      }

    }

    /// Client for DomainMappings
    public partial class DomainMappingsClient : grpc::ClientBase<DomainMappingsClient>
    {
      /// Creates a new client for DomainMappings
      /// <param name="channel">The channel to use to make remote calls.</param>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public DomainMappingsClient(grpc::ChannelBase channel) : base(channel)
      {
      }
      /// Creates a new client for DomainMappings that uses a custom <c>CallInvoker</c>.
      /// <param name="callInvoker">The callInvoker to use to make remote calls.</param>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public DomainMappingsClient(grpc::CallInvoker callInvoker) : base(callInvoker)
      {
      }
      /// Protected parameterless constructor to allow creation of test doubles.
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      protected DomainMappingsClient() : base()
      {
      }
      /// Protected constructor to allow creation of configured clients.
      /// <param name="configuration">The client configuration.</param>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      protected DomainMappingsClient(ClientBaseConfiguration configuration) : base(configuration)
      {
      }

      ///
      /// Lists the domain mappings on an application.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.Cloud.AppEngine.V1.ListDomainMappingsResponse ListDomainMappings(global::Google.Cloud.AppEngine.V1.ListDomainMappingsRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return ListDomainMappings(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Lists the domain mappings on an application.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.Cloud.AppEngine.V1.ListDomainMappingsResponse ListDomainMappings(global::Google.Cloud.AppEngine.V1.ListDomainMappingsRequest request, grpc::CallOptions options)
      {
        return CallInvoker.BlockingUnaryCall(__Method_ListDomainMappings, null, options, request);
      }
      ///
      /// Lists the domain mappings on an application.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.Cloud.AppEngine.V1.ListDomainMappingsResponse> ListDomainMappingsAsync(global::Google.Cloud.AppEngine.V1.ListDomainMappingsRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return ListDomainMappingsAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Lists the domain mappings on an application.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.Cloud.AppEngine.V1.ListDomainMappingsResponse> ListDomainMappingsAsync(global::Google.Cloud.AppEngine.V1.ListDomainMappingsRequest request, grpc::CallOptions options)
      {
        return CallInvoker.AsyncUnaryCall(__Method_ListDomainMappings, null, options, request);
      }
      ///
      /// Gets the specified domain mapping.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.Cloud.AppEngine.V1.DomainMapping GetDomainMapping(global::Google.Cloud.AppEngine.V1.GetDomainMappingRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return GetDomainMapping(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Gets the specified domain mapping.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.Cloud.AppEngine.V1.DomainMapping GetDomainMapping(global::Google.Cloud.AppEngine.V1.GetDomainMappingRequest request, grpc::CallOptions options)
      {
        return CallInvoker.BlockingUnaryCall(__Method_GetDomainMapping, null, options, request);
      }
      ///
      /// Gets the specified domain mapping.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.Cloud.AppEngine.V1.DomainMapping> GetDomainMappingAsync(global::Google.Cloud.AppEngine.V1.GetDomainMappingRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return GetDomainMappingAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Gets the specified domain mapping.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.Cloud.AppEngine.V1.DomainMapping> GetDomainMappingAsync(global::Google.Cloud.AppEngine.V1.GetDomainMappingRequest request, grpc::CallOptions options)
      {
        return CallInvoker.AsyncUnaryCall(__Method_GetDomainMapping, null, options, request);
      }
      ///
      /// Maps a domain to an application. A user must be authorized to administer a
      /// domain in order to map it to an application. For a list of available
      /// authorized domains, see [`AuthorizedDomains.ListAuthorizedDomains`]().
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.LongRunning.Operation CreateDomainMapping(global::Google.Cloud.AppEngine.V1.CreateDomainMappingRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return CreateDomainMapping(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Maps a domain to an application. A user must be authorized to administer a
      /// domain in order to map it to an application. For a list of available
      /// authorized domains, see [`AuthorizedDomains.ListAuthorizedDomains`]().
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.LongRunning.Operation CreateDomainMapping(global::Google.Cloud.AppEngine.V1.CreateDomainMappingRequest request, grpc::CallOptions options)
      {
        return CallInvoker.BlockingUnaryCall(__Method_CreateDomainMapping, null, options, request);
      }
      ///
      /// Maps a domain to an application. A user must be authorized to administer a
      /// domain in order to map it to an application. For a list of available
      /// authorized domains, see [`AuthorizedDomains.ListAuthorizedDomains`]().
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.LongRunning.Operation> CreateDomainMappingAsync(global::Google.Cloud.AppEngine.V1.CreateDomainMappingRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return CreateDomainMappingAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Maps a domain to an application. A user must be authorized to administer a
      /// domain in order to map it to an application. For a list of available
      /// authorized domains, see [`AuthorizedDomains.ListAuthorizedDomains`]().
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.LongRunning.Operation> CreateDomainMappingAsync(global::Google.Cloud.AppEngine.V1.CreateDomainMappingRequest request, grpc::CallOptions options)
      {
        return CallInvoker.AsyncUnaryCall(__Method_CreateDomainMapping, null, options, request);
      }
      ///
      /// Updates the specified domain mapping. To map an SSL certificate to a
      /// domain mapping, update `certificate_id` to point to an `AuthorizedCertificate`
      /// resource. A user must be authorized to administer the associated domain
      /// in order to update a `DomainMapping` resource.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.LongRunning.Operation UpdateDomainMapping(global::Google.Cloud.AppEngine.V1.UpdateDomainMappingRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return UpdateDomainMapping(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Updates the specified domain mapping. To map an SSL certificate to a
      /// domain mapping, update `certificate_id` to point to an `AuthorizedCertificate`
      /// resource. A user must be authorized to administer the associated domain
      /// in order to update a `DomainMapping` resource.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.LongRunning.Operation UpdateDomainMapping(global::Google.Cloud.AppEngine.V1.UpdateDomainMappingRequest request, grpc::CallOptions options)
      {
        return CallInvoker.BlockingUnaryCall(__Method_UpdateDomainMapping, null, options, request);
      }
      ///
      /// Updates the specified domain mapping. To map an SSL certificate to a
      /// domain mapping, update `certificate_id` to point to an `AuthorizedCertificate`
      /// resource. A user must be authorized to administer the associated domain
      /// in order to update a `DomainMapping` resource.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.LongRunning.Operation> UpdateDomainMappingAsync(global::Google.Cloud.AppEngine.V1.UpdateDomainMappingRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return UpdateDomainMappingAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Updates the specified domain mapping. To map an SSL certificate to a
      /// domain mapping, update `certificate_id` to point to an `AuthorizedCertificate`
      /// resource. A user must be authorized to administer the associated domain
      /// in order to update a `DomainMapping` resource.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.LongRunning.Operation> UpdateDomainMappingAsync(global::Google.Cloud.AppEngine.V1.UpdateDomainMappingRequest request, grpc::CallOptions options)
      {
        return CallInvoker.AsyncUnaryCall(__Method_UpdateDomainMapping, null, options, request);
      }
      ///
      /// Deletes the specified domain mapping. A user must be authorized to
      /// administer the associated domain in order to delete a `DomainMapping`
      /// resource.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.LongRunning.Operation DeleteDomainMapping(global::Google.Cloud.AppEngine.V1.DeleteDomainMappingRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return DeleteDomainMapping(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Deletes the specified domain mapping. A user must be authorized to
      /// administer the associated domain in order to delete a `DomainMapping`
      /// resource.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The response received from the server.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual global::Google.LongRunning.Operation DeleteDomainMapping(global::Google.Cloud.AppEngine.V1.DeleteDomainMappingRequest request, grpc::CallOptions options)
      {
        return CallInvoker.BlockingUnaryCall(__Method_DeleteDomainMapping, null, options, request);
      }
      ///
      /// Deletes the specified domain mapping. A user must be authorized to
      /// administer the associated domain in order to delete a `DomainMapping`
      /// resource.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
      /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
      /// <param name="cancellationToken">An optional token for canceling the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.LongRunning.Operation> DeleteDomainMappingAsync(global::Google.Cloud.AppEngine.V1.DeleteDomainMappingRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
      {
        return DeleteDomainMappingAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken));
      }
      ///
      /// Deletes the specified domain mapping. A user must be authorized to
      /// administer the associated domain in order to delete a `DomainMapping`
      /// resource.
      ///
      /// <param name="request">The request to send to the server.</param>
      /// <param name="options">The options for the call.</param>
      /// <returns>The call object.</returns>
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      public virtual grpc::AsyncUnaryCall<global::Google.LongRunning.Operation> DeleteDomainMappingAsync(global::Google.Cloud.AppEngine.V1.DeleteDomainMappingRequest request, grpc::CallOptions options)
      {
        return CallInvoker.AsyncUnaryCall(__Method_DeleteDomainMapping, null, options, request);
      }
      /// Creates a new instance of client from given <c>ClientBaseConfiguration</c>.
      [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
      protected override DomainMappingsClient NewInstance(ClientBaseConfiguration configuration)
      {
        return new DomainMappingsClient(configuration);
      }
    }

    /// Creates service definition that can be registered with a server
    /// <param name="serviceImpl">An object implementing the server-side handling logic.</param>
    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    public static grpc::ServerServiceDefinition BindService(DomainMappingsBase serviceImpl)
    {
      return grpc::ServerServiceDefinition.CreateBuilder()
          .AddMethod(__Method_ListDomainMappings, serviceImpl.ListDomainMappings)
          .AddMethod(__Method_GetDomainMapping, serviceImpl.GetDomainMapping)
          .AddMethod(__Method_CreateDomainMapping, serviceImpl.CreateDomainMapping)
          .AddMethod(__Method_UpdateDomainMapping, serviceImpl.UpdateDomainMapping)
          .AddMethod(__Method_DeleteDomainMapping, serviceImpl.DeleteDomainMapping).Build();
    }

    /// Register service method with a service binder with or without implementation. Useful when customizing the  service binding logic.
    /// Note: this method is part of an experimental API that can change or be removed without any prior notice.
    /// <param name="serviceBinder">Service methods will be bound by calling <c>AddMethod</c> on this object.</param>
    /// <param name="serviceImpl">An object implementing the server-side handling logic.</param>
    [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
    public static void BindService(grpc::ServiceBinderBase serviceBinder, DomainMappingsBase serviceImpl)
    {
      serviceBinder.AddMethod(__Method_ListDomainMappings, serviceImpl == null ? null : new grpc::UnaryServerMethod<global::Google.Cloud.AppEngine.V1.ListDomainMappingsRequest, global::Google.Cloud.AppEngine.V1.ListDomainMappingsResponse>(serviceImpl.ListDomainMappings));
      serviceBinder.AddMethod(__Method_GetDomainMapping, serviceImpl == null ? null : new grpc::UnaryServerMethod<global::Google.Cloud.AppEngine.V1.GetDomainMappingRequest, global::Google.Cloud.AppEngine.V1.DomainMapping>(serviceImpl.GetDomainMapping));
      serviceBinder.AddMethod(__Method_CreateDomainMapping, serviceImpl == null ? null : new grpc::UnaryServerMethod<global::Google.Cloud.AppEngine.V1.CreateDomainMappingRequest, global::Google.LongRunning.Operation>(serviceImpl.CreateDomainMapping));
      serviceBinder.AddMethod(__Method_UpdateDomainMapping, serviceImpl == null ? null : new grpc::UnaryServerMethod<global::Google.Cloud.AppEngine.V1.UpdateDomainMappingRequest, global::Google.LongRunning.Operation>(serviceImpl.UpdateDomainMapping));
      serviceBinder.AddMethod(__Method_DeleteDomainMapping, serviceImpl == null ? null : new grpc::UnaryServerMethod<global::Google.Cloud.AppEngine.V1.DeleteDomainMappingRequest, global::Google.LongRunning.Operation>(serviceImpl.DeleteDomainMapping));
    }

  }
}
#endregion