// Generated by the gRPC C++ plugin.
// If you make any local change, they will be lost.
// source: hillab_beam_profiler.proto
#ifndef GRPC_hillab_5fbeam_5fprofiler_2eproto__INCLUDED
#define GRPC_hillab_5fbeam_5fprofiler_2eproto__INCLUDED

#include "hillab_beam_profiler.pb.h"

#include <functional>
#include <grpcpp/generic/async_generic_service.h>
#include <grpcpp/support/async_stream.h>
#include <grpcpp/support/async_unary_call.h>
#include <grpcpp/support/client_callback.h>
#include <grpcpp/client_context.h>
#include <grpcpp/completion_queue.h>
#include <grpcpp/support/message_allocator.h>
#include <grpcpp/support/method_handler.h>
#include <grpcpp/impl/proto_utils.h>
#include <grpcpp/impl/rpc_method.h>
#include <grpcpp/support/server_callback.h>
#include <grpcpp/impl/server_callback_handlers.h>
#include <grpcpp/server_context.h>
#include <grpcpp/impl/service_type.h>
#include <grpcpp/support/status.h>
#include <grpcpp/support/stub_options.h>
#include <grpcpp/support/sync_stream.h>

namespace hillab {
namespace v4 {

// BeamProfiler service that allows retrieving and setting beam profile data.
class BeamProfiler final {
 public:
  static constexpr char const* service_full_name() {
    return "hillab.v4.BeamProfiler";
  }
  class StubInterface {
   public:
    virtual ~StubInterface() {}
    // Retrieves the value named given key.
    // Returns: 
    // - Status "OK" for successful.
    // - Status "FAILED_PRECONDITION" for failure since various reasons. See message for more detail.
    // - Status "NOT_FOUND" for failure since given key is undefined.
    // - Status "INTERNAL" for failure since system error. 
    virtual ::grpc::Status Get(::grpc::ClientContext* context, const ::hillab::v4::GetRequest& request, ::hillab::v4::GetResponse* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::GetResponse>> AsyncGet(::grpc::ClientContext* context, const ::hillab::v4::GetRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::GetResponse>>(AsyncGetRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::GetResponse>> PrepareAsyncGet(::grpc::ClientContext* context, const ::hillab::v4::GetRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::GetResponse>>(PrepareAsyncGetRaw(context, request, cq));
    }
    // Modifies the value named given key.
    // Returns: 
    // - Status "OK" for successful.
    // - Status "FAILED_PRECONDITION" for failure since various reasons. See message for more detail.
    // - Status "INVALID_ARGUMENT" for failure since various reasons. See message for more detail.
    // - Status "NOT_FOUND" for failure since given key is undefined.
    // - Status "INTERNAL" for failure since system error.
    virtual ::grpc::Status Set(::grpc::ClientContext* context, const ::hillab::v4::SetRequest& request, ::google::protobuf::Empty* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>> AsyncSet(::grpc::ClientContext* context, const ::hillab::v4::SetRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>>(AsyncSetRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>> PrepareAsyncSet(::grpc::ClientContext* context, const ::hillab::v4::SetRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>>(PrepareAsyncSetRaw(context, request, cq));
    }
    // Initializes the accumulated profiled data of all fields.
    // Returns:
    // - Status "OK" for successful.
    virtual ::grpc::Status ResetData(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::google::protobuf::Empty* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>> AsyncResetData(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>>(AsyncResetDataRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>> PrepareAsyncResetData(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>>(PrepareAsyncResetDataRaw(context, request, cq));
    }
    // Retrieves the stream object for obtaining the beam profile.
    // Returns: 
    // - Status "OK" for successful.
    std::unique_ptr< ::grpc::ClientReaderInterface< ::hillab::v4::BeamProfileStream>> MonitorBeamProfile(::grpc::ClientContext* context, const ::google::protobuf::Empty& request) {
      return std::unique_ptr< ::grpc::ClientReaderInterface< ::hillab::v4::BeamProfileStream>>(MonitorBeamProfileRaw(context, request));
    }
    std::unique_ptr< ::grpc::ClientAsyncReaderInterface< ::hillab::v4::BeamProfileStream>> AsyncMonitorBeamProfile(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq, void* tag) {
      return std::unique_ptr< ::grpc::ClientAsyncReaderInterface< ::hillab::v4::BeamProfileStream>>(AsyncMonitorBeamProfileRaw(context, request, cq, tag));
    }
    std::unique_ptr< ::grpc::ClientAsyncReaderInterface< ::hillab::v4::BeamProfileStream>> PrepareAsyncMonitorBeamProfile(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncReaderInterface< ::hillab::v4::BeamProfileStream>>(PrepareAsyncMonitorBeamProfileRaw(context, request, cq));
    }
    class async_interface {
     public:
      virtual ~async_interface() {}
      // Retrieves the value named given key.
      // Returns: 
      // - Status "OK" for successful.
      // - Status "FAILED_PRECONDITION" for failure since various reasons. See message for more detail.
      // - Status "NOT_FOUND" for failure since given key is undefined.
      // - Status "INTERNAL" for failure since system error. 
      virtual void Get(::grpc::ClientContext* context, const ::hillab::v4::GetRequest* request, ::hillab::v4::GetResponse* response, std::function<void(::grpc::Status)>) = 0;
      virtual void Get(::grpc::ClientContext* context, const ::hillab::v4::GetRequest* request, ::hillab::v4::GetResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0;
      // Modifies the value named given key.
      // Returns: 
      // - Status "OK" for successful.
      // - Status "FAILED_PRECONDITION" for failure since various reasons. See message for more detail.
      // - Status "INVALID_ARGUMENT" for failure since various reasons. See message for more detail.
      // - Status "NOT_FOUND" for failure since given key is undefined.
      // - Status "INTERNAL" for failure since system error.
      virtual void Set(::grpc::ClientContext* context, const ::hillab::v4::SetRequest* request, ::google::protobuf::Empty* response, std::function<void(::grpc::Status)>) = 0;
      virtual void Set(::grpc::ClientContext* context, const ::hillab::v4::SetRequest* request, ::google::protobuf::Empty* response, ::grpc::ClientUnaryReactor* reactor) = 0;
      // Initializes the accumulated profiled data of all fields.
      // Returns:
      // - Status "OK" for successful.
      virtual void ResetData(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::google::protobuf::Empty* response, std::function<void(::grpc::Status)>) = 0;
      virtual void ResetData(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::google::protobuf::Empty* response, ::grpc::ClientUnaryReactor* reactor) = 0;
      // Retrieves the stream object for obtaining the beam profile.
      // Returns: 
      // - Status "OK" for successful.
      virtual void MonitorBeamProfile(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::grpc::ClientReadReactor< ::hillab::v4::BeamProfileStream>* reactor) = 0;
    };
    typedef class async_interface experimental_async_interface;
    virtual class async_interface* async() { return nullptr; }
    class async_interface* experimental_async() { return async(); }
   private:
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::GetResponse>* AsyncGetRaw(::grpc::ClientContext* context, const ::hillab::v4::GetRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::GetResponse>* PrepareAsyncGetRaw(::grpc::ClientContext* context, const ::hillab::v4::GetRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>* AsyncSetRaw(::grpc::ClientContext* context, const ::hillab::v4::SetRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>* PrepareAsyncSetRaw(::grpc::ClientContext* context, const ::hillab::v4::SetRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>* AsyncResetDataRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>* PrepareAsyncResetDataRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientReaderInterface< ::hillab::v4::BeamProfileStream>* MonitorBeamProfileRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request) = 0;
    virtual ::grpc::ClientAsyncReaderInterface< ::hillab::v4::BeamProfileStream>* AsyncMonitorBeamProfileRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq, void* tag) = 0;
    virtual ::grpc::ClientAsyncReaderInterface< ::hillab::v4::BeamProfileStream>* PrepareAsyncMonitorBeamProfileRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) = 0;
  };
  class Stub final : public StubInterface {
   public:
    Stub(const std::shared_ptr< ::grpc::ChannelInterface>& channel, const ::grpc::StubOptions& options = ::grpc::StubOptions());
    ::grpc::Status Get(::grpc::ClientContext* context, const ::hillab::v4::GetRequest& request, ::hillab::v4::GetResponse* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hillab::v4::GetResponse>> AsyncGet(::grpc::ClientContext* context, const ::hillab::v4::GetRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hillab::v4::GetResponse>>(AsyncGetRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hillab::v4::GetResponse>> PrepareAsyncGet(::grpc::ClientContext* context, const ::hillab::v4::GetRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hillab::v4::GetResponse>>(PrepareAsyncGetRaw(context, request, cq));
    }
    ::grpc::Status Set(::grpc::ClientContext* context, const ::hillab::v4::SetRequest& request, ::google::protobuf::Empty* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>> AsyncSet(::grpc::ClientContext* context, const ::hillab::v4::SetRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>>(AsyncSetRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>> PrepareAsyncSet(::grpc::ClientContext* context, const ::hillab::v4::SetRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>>(PrepareAsyncSetRaw(context, request, cq));
    }
    ::grpc::Status ResetData(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::google::protobuf::Empty* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>> AsyncResetData(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>>(AsyncResetDataRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>> PrepareAsyncResetData(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>>(PrepareAsyncResetDataRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientReader< ::hillab::v4::BeamProfileStream>> MonitorBeamProfile(::grpc::ClientContext* context, const ::google::protobuf::Empty& request) {
      return std::unique_ptr< ::grpc::ClientReader< ::hillab::v4::BeamProfileStream>>(MonitorBeamProfileRaw(context, request));
    }
    std::unique_ptr< ::grpc::ClientAsyncReader< ::hillab::v4::BeamProfileStream>> AsyncMonitorBeamProfile(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq, void* tag) {
      return std::unique_ptr< ::grpc::ClientAsyncReader< ::hillab::v4::BeamProfileStream>>(AsyncMonitorBeamProfileRaw(context, request, cq, tag));
    }
    std::unique_ptr< ::grpc::ClientAsyncReader< ::hillab::v4::BeamProfileStream>> PrepareAsyncMonitorBeamProfile(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncReader< ::hillab::v4::BeamProfileStream>>(PrepareAsyncMonitorBeamProfileRaw(context, request, cq));
    }
    class async final :
      public StubInterface::async_interface {
     public:
      void Get(::grpc::ClientContext* context, const ::hillab::v4::GetRequest* request, ::hillab::v4::GetResponse* response, std::function<void(::grpc::Status)>) override;
      void Get(::grpc::ClientContext* context, const ::hillab::v4::GetRequest* request, ::hillab::v4::GetResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
      void Set(::grpc::ClientContext* context, const ::hillab::v4::SetRequest* request, ::google::protobuf::Empty* response, std::function<void(::grpc::Status)>) override;
      void Set(::grpc::ClientContext* context, const ::hillab::v4::SetRequest* request, ::google::protobuf::Empty* response, ::grpc::ClientUnaryReactor* reactor) override;
      void ResetData(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::google::protobuf::Empty* response, std::function<void(::grpc::Status)>) override;
      void ResetData(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::google::protobuf::Empty* response, ::grpc::ClientUnaryReactor* reactor) override;
      void MonitorBeamProfile(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::grpc::ClientReadReactor< ::hillab::v4::BeamProfileStream>* reactor) override;
     private:
      friend class Stub;
      explicit async(Stub* stub): stub_(stub) { }
      Stub* stub() { return stub_; }
      Stub* stub_;
    };
    class async* async() override { return &async_stub_; }

   private:
    std::shared_ptr< ::grpc::ChannelInterface> channel_;
    class async async_stub_{this};
    ::grpc::ClientAsyncResponseReader< ::hillab::v4::GetResponse>* AsyncGetRaw(::grpc::ClientContext* context, const ::hillab::v4::GetRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::hillab::v4::GetResponse>* PrepareAsyncGetRaw(::grpc::ClientContext* context, const ::hillab::v4::GetRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>* AsyncSetRaw(::grpc::ClientContext* context, const ::hillab::v4::SetRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>* PrepareAsyncSetRaw(::grpc::ClientContext* context, const ::hillab::v4::SetRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>* AsyncResetDataRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>* PrepareAsyncResetDataRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientReader< ::hillab::v4::BeamProfileStream>* MonitorBeamProfileRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request) override;
    ::grpc::ClientAsyncReader< ::hillab::v4::BeamProfileStream>* AsyncMonitorBeamProfileRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq, void* tag) override;
    ::grpc::ClientAsyncReader< ::hillab::v4::BeamProfileStream>* PrepareAsyncMonitorBeamProfileRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) override;
    const ::grpc::internal::RpcMethod rpcmethod_Get_;
    const ::grpc::internal::RpcMethod rpcmethod_Set_;
    const ::grpc::internal::RpcMethod rpcmethod_ResetData_;
    const ::grpc::internal::RpcMethod rpcmethod_MonitorBeamProfile_;
  };
  static std::unique_ptr<Stub> NewStub(const std::shared_ptr< ::grpc::ChannelInterface>& channel, const ::grpc::StubOptions& options = ::grpc::StubOptions());

  class Service : public ::grpc::Service {
   public:
    Service();
    virtual ~Service();
    // Retrieves the value named given key.
    // Returns: 
    // - Status "OK" for successful.
    // - Status "FAILED_PRECONDITION" for failure since various reasons. See message for more detail.
    // - Status "NOT_FOUND" for failure since given key is undefined.
    // - Status "INTERNAL" for failure since system error. 
    virtual ::grpc::Status Get(::grpc::ServerContext* context, const ::hillab::v4::GetRequest* request, ::hillab::v4::GetResponse* response);
    // Modifies the value named given key.
    // Returns: 
    // - Status "OK" for successful.
    // - Status "FAILED_PRECONDITION" for failure since various reasons. See message for more detail.
    // - Status "INVALID_ARGUMENT" for failure since various reasons. See message for more detail.
    // - Status "NOT_FOUND" for failure since given key is undefined.
    // - Status "INTERNAL" for failure since system error.
    virtual ::grpc::Status Set(::grpc::ServerContext* context, const ::hillab::v4::SetRequest* request, ::google::protobuf::Empty* response);
    // Initializes the accumulated profiled data of all fields.
    // Returns:
    // - Status "OK" for successful.
    virtual ::grpc::Status ResetData(::grpc::ServerContext* context, const ::google::protobuf::Empty* request, ::google::protobuf::Empty* response);
    // Retrieves the stream object for obtaining the beam profile.
    // Returns: 
    // - Status "OK" for successful.
    virtual ::grpc::Status MonitorBeamProfile(::grpc::ServerContext* context, const ::google::protobuf::Empty* request, ::grpc::ServerWriter< ::hillab::v4::BeamProfileStream>* writer);
  };
  template <class BaseClass>
  class WithAsyncMethod_Get : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_Get() {
      ::grpc::Service::MarkMethodAsync(0);
    }
    ~WithAsyncMethod_Get() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status Get(::grpc::ServerContext* /*context*/, const ::hillab::v4::GetRequest* /*request*/, ::hillab::v4::GetResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGet(::grpc::ServerContext* context, ::hillab::v4::GetRequest* request, ::grpc::ServerAsyncResponseWriter< ::hillab::v4::GetResponse>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(0, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithAsyncMethod_Set : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_Set() {
      ::grpc::Service::MarkMethodAsync(1);
    }
    ~WithAsyncMethod_Set() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status Set(::grpc::ServerContext* /*context*/, const ::hillab::v4::SetRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestSet(::grpc::ServerContext* context, ::hillab::v4::SetRequest* request, ::grpc::ServerAsyncResponseWriter< ::google::protobuf::Empty>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(1, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithAsyncMethod_ResetData : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_ResetData() {
      ::grpc::Service::MarkMethodAsync(2);
    }
    ~WithAsyncMethod_ResetData() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status ResetData(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestResetData(::grpc::ServerContext* context, ::google::protobuf::Empty* request, ::grpc::ServerAsyncResponseWriter< ::google::protobuf::Empty>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(2, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithAsyncMethod_MonitorBeamProfile : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_MonitorBeamProfile() {
      ::grpc::Service::MarkMethodAsync(3);
    }
    ~WithAsyncMethod_MonitorBeamProfile() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status MonitorBeamProfile(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::grpc::ServerWriter< ::hillab::v4::BeamProfileStream>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestMonitorBeamProfile(::grpc::ServerContext* context, ::google::protobuf::Empty* request, ::grpc::ServerAsyncWriter< ::hillab::v4::BeamProfileStream>* writer, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncServerStreaming(3, context, request, writer, new_call_cq, notification_cq, tag);
    }
  };
  typedef WithAsyncMethod_Get<WithAsyncMethod_Set<WithAsyncMethod_ResetData<WithAsyncMethod_MonitorBeamProfile<Service > > > > AsyncService;
  template <class BaseClass>
  class WithCallbackMethod_Get : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_Get() {
      ::grpc::Service::MarkMethodCallback(0,
          new ::grpc::internal::CallbackUnaryHandler< ::hillab::v4::GetRequest, ::hillab::v4::GetResponse>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::hillab::v4::GetRequest* request, ::hillab::v4::GetResponse* response) { return this->Get(context, request, response); }));}
    void SetMessageAllocatorFor_Get(
        ::grpc::MessageAllocator< ::hillab::v4::GetRequest, ::hillab::v4::GetResponse>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(0);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::hillab::v4::GetRequest, ::hillab::v4::GetResponse>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_Get() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status Get(::grpc::ServerContext* /*context*/, const ::hillab::v4::GetRequest* /*request*/, ::hillab::v4::GetResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* Get(
      ::grpc::CallbackServerContext* /*context*/, const ::hillab::v4::GetRequest* /*request*/, ::hillab::v4::GetResponse* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_Set : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_Set() {
      ::grpc::Service::MarkMethodCallback(1,
          new ::grpc::internal::CallbackUnaryHandler< ::hillab::v4::SetRequest, ::google::protobuf::Empty>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::hillab::v4::SetRequest* request, ::google::protobuf::Empty* response) { return this->Set(context, request, response); }));}
    void SetMessageAllocatorFor_Set(
        ::grpc::MessageAllocator< ::hillab::v4::SetRequest, ::google::protobuf::Empty>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(1);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::hillab::v4::SetRequest, ::google::protobuf::Empty>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_Set() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status Set(::grpc::ServerContext* /*context*/, const ::hillab::v4::SetRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* Set(
      ::grpc::CallbackServerContext* /*context*/, const ::hillab::v4::SetRequest* /*request*/, ::google::protobuf::Empty* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_ResetData : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_ResetData() {
      ::grpc::Service::MarkMethodCallback(2,
          new ::grpc::internal::CallbackUnaryHandler< ::google::protobuf::Empty, ::google::protobuf::Empty>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::google::protobuf::Empty* request, ::google::protobuf::Empty* response) { return this->ResetData(context, request, response); }));}
    void SetMessageAllocatorFor_ResetData(
        ::grpc::MessageAllocator< ::google::protobuf::Empty, ::google::protobuf::Empty>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(2);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::google::protobuf::Empty, ::google::protobuf::Empty>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_ResetData() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status ResetData(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* ResetData(
      ::grpc::CallbackServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::google::protobuf::Empty* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_MonitorBeamProfile : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_MonitorBeamProfile() {
      ::grpc::Service::MarkMethodCallback(3,
          new ::grpc::internal::CallbackServerStreamingHandler< ::google::protobuf::Empty, ::hillab::v4::BeamProfileStream>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::google::protobuf::Empty* request) { return this->MonitorBeamProfile(context, request); }));
    }
    ~WithCallbackMethod_MonitorBeamProfile() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status MonitorBeamProfile(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::grpc::ServerWriter< ::hillab::v4::BeamProfileStream>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerWriteReactor< ::hillab::v4::BeamProfileStream>* MonitorBeamProfile(
      ::grpc::CallbackServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/)  { return nullptr; }
  };
  typedef WithCallbackMethod_Get<WithCallbackMethod_Set<WithCallbackMethod_ResetData<WithCallbackMethod_MonitorBeamProfile<Service > > > > CallbackService;
  typedef CallbackService ExperimentalCallbackService;
  template <class BaseClass>
  class WithGenericMethod_Get : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_Get() {
      ::grpc::Service::MarkMethodGeneric(0);
    }
    ~WithGenericMethod_Get() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status Get(::grpc::ServerContext* /*context*/, const ::hillab::v4::GetRequest* /*request*/, ::hillab::v4::GetResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_Set : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_Set() {
      ::grpc::Service::MarkMethodGeneric(1);
    }
    ~WithGenericMethod_Set() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status Set(::grpc::ServerContext* /*context*/, const ::hillab::v4::SetRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_ResetData : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_ResetData() {
      ::grpc::Service::MarkMethodGeneric(2);
    }
    ~WithGenericMethod_ResetData() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status ResetData(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_MonitorBeamProfile : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_MonitorBeamProfile() {
      ::grpc::Service::MarkMethodGeneric(3);
    }
    ~WithGenericMethod_MonitorBeamProfile() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status MonitorBeamProfile(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::grpc::ServerWriter< ::hillab::v4::BeamProfileStream>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithRawMethod_Get : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_Get() {
      ::grpc::Service::MarkMethodRaw(0);
    }
    ~WithRawMethod_Get() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status Get(::grpc::ServerContext* /*context*/, const ::hillab::v4::GetRequest* /*request*/, ::hillab::v4::GetResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGet(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(0, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithRawMethod_Set : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_Set() {
      ::grpc::Service::MarkMethodRaw(1);
    }
    ~WithRawMethod_Set() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status Set(::grpc::ServerContext* /*context*/, const ::hillab::v4::SetRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestSet(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(1, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithRawMethod_ResetData : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_ResetData() {
      ::grpc::Service::MarkMethodRaw(2);
    }
    ~WithRawMethod_ResetData() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status ResetData(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestResetData(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(2, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithRawMethod_MonitorBeamProfile : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_MonitorBeamProfile() {
      ::grpc::Service::MarkMethodRaw(3);
    }
    ~WithRawMethod_MonitorBeamProfile() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status MonitorBeamProfile(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::grpc::ServerWriter< ::hillab::v4::BeamProfileStream>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestMonitorBeamProfile(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncWriter< ::grpc::ByteBuffer>* writer, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncServerStreaming(3, context, request, writer, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_Get : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_Get() {
      ::grpc::Service::MarkMethodRawCallback(0,
          new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->Get(context, request, response); }));
    }
    ~WithRawCallbackMethod_Get() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status Get(::grpc::ServerContext* /*context*/, const ::hillab::v4::GetRequest* /*request*/, ::hillab::v4::GetResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* Get(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_Set : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_Set() {
      ::grpc::Service::MarkMethodRawCallback(1,
          new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->Set(context, request, response); }));
    }
    ~WithRawCallbackMethod_Set() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status Set(::grpc::ServerContext* /*context*/, const ::hillab::v4::SetRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* Set(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_ResetData : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_ResetData() {
      ::grpc::Service::MarkMethodRawCallback(2,
          new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->ResetData(context, request, response); }));
    }
    ~WithRawCallbackMethod_ResetData() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status ResetData(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* ResetData(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_MonitorBeamProfile : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_MonitorBeamProfile() {
      ::grpc::Service::MarkMethodRawCallback(3,
          new ::grpc::internal::CallbackServerStreamingHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
            [this](
                   ::grpc::CallbackServerContext* context, const::grpc::ByteBuffer* request) { return this->MonitorBeamProfile(context, request); }));
    }
    ~WithRawCallbackMethod_MonitorBeamProfile() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status MonitorBeamProfile(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::grpc::ServerWriter< ::hillab::v4::BeamProfileStream>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerWriteReactor< ::grpc::ByteBuffer>* MonitorBeamProfile(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_Get : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_Get() {
      ::grpc::Service::MarkMethodStreamed(0,
        new ::grpc::internal::StreamedUnaryHandler<
          ::hillab::v4::GetRequest, ::hillab::v4::GetResponse>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::hillab::v4::GetRequest, ::hillab::v4::GetResponse>* streamer) {
                       return this->StreamedGet(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_Get() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status Get(::grpc::ServerContext* /*context*/, const ::hillab::v4::GetRequest* /*request*/, ::hillab::v4::GetResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedGet(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::hillab::v4::GetRequest,::hillab::v4::GetResponse>* server_unary_streamer) = 0;
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_Set : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_Set() {
      ::grpc::Service::MarkMethodStreamed(1,
        new ::grpc::internal::StreamedUnaryHandler<
          ::hillab::v4::SetRequest, ::google::protobuf::Empty>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::hillab::v4::SetRequest, ::google::protobuf::Empty>* streamer) {
                       return this->StreamedSet(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_Set() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status Set(::grpc::ServerContext* /*context*/, const ::hillab::v4::SetRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedSet(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::hillab::v4::SetRequest,::google::protobuf::Empty>* server_unary_streamer) = 0;
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_ResetData : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_ResetData() {
      ::grpc::Service::MarkMethodStreamed(2,
        new ::grpc::internal::StreamedUnaryHandler<
          ::google::protobuf::Empty, ::google::protobuf::Empty>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::google::protobuf::Empty, ::google::protobuf::Empty>* streamer) {
                       return this->StreamedResetData(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_ResetData() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status ResetData(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedResetData(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::google::protobuf::Empty,::google::protobuf::Empty>* server_unary_streamer) = 0;
  };
  typedef WithStreamedUnaryMethod_Get<WithStreamedUnaryMethod_Set<WithStreamedUnaryMethod_ResetData<Service > > > StreamedUnaryService;
  template <class BaseClass>
  class WithSplitStreamingMethod_MonitorBeamProfile : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithSplitStreamingMethod_MonitorBeamProfile() {
      ::grpc::Service::MarkMethodStreamed(3,
        new ::grpc::internal::SplitServerStreamingHandler<
          ::google::protobuf::Empty, ::hillab::v4::BeamProfileStream>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerSplitStreamer<
                     ::google::protobuf::Empty, ::hillab::v4::BeamProfileStream>* streamer) {
                       return this->StreamedMonitorBeamProfile(context,
                         streamer);
                  }));
    }
    ~WithSplitStreamingMethod_MonitorBeamProfile() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status MonitorBeamProfile(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::grpc::ServerWriter< ::hillab::v4::BeamProfileStream>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with split streamed
    virtual ::grpc::Status StreamedMonitorBeamProfile(::grpc::ServerContext* context, ::grpc::ServerSplitStreamer< ::google::protobuf::Empty,::hillab::v4::BeamProfileStream>* server_split_streamer) = 0;
  };
  typedef WithSplitStreamingMethod_MonitorBeamProfile<Service > SplitStreamedService;
  typedef WithStreamedUnaryMethod_Get<WithStreamedUnaryMethod_Set<WithStreamedUnaryMethod_ResetData<WithSplitStreamingMethod_MonitorBeamProfile<Service > > > > StreamedService;
};

class System final {
 public:
  static constexpr char const* service_full_name() {
    return "hillab.v4.System";
  }
  class StubInterface {
   public:
    virtual ~StubInterface() {}
    virtual ::grpc::Status GetAppInfo(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::hillab::v4::AppInfoResponse* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::AppInfoResponse>> AsyncGetAppInfo(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::AppInfoResponse>>(AsyncGetAppInfoRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::AppInfoResponse>> PrepareAsyncGetAppInfo(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::AppInfoResponse>>(PrepareAsyncGetAppInfoRaw(context, request, cq));
    }
    // Retrieves registered setting list.
    // Returns: 
    // - Status "OK" and response indicating the setting name list.
    virtual ::grpc::Status GetSettingList(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::hillab::v4::SettingListResponse* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::SettingListResponse>> AsyncGetSettingList(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::SettingListResponse>>(AsyncGetSettingListRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::SettingListResponse>> PrepareAsyncGetSettingList(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::SettingListResponse>>(PrepareAsyncGetSettingListRaw(context, request, cq));
    }
    // Retrieves the loaded setting.
    // Returns: 
    // - Status "OK" and response indicating the loaded setting name.
    virtual ::grpc::Status GetCurrentSetting(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::hillab::v4::SettingResponse* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::SettingResponse>> AsyncGetCurrentSetting(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::SettingResponse>>(AsyncGetCurrentSettingRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::SettingResponse>> PrepareAsyncGetCurrentSetting(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::SettingResponse>>(PrepareAsyncGetCurrentSettingRaw(context, request, cq));
    }
    // Loads setting. All system properties are applied as loaded settings, but information of gRPC host and Image Stream hosts is not loaded.
    // Returns: 
    // - Status "OK" for successful.
    // - Status "FAILED_PRECONDITION" for failure since the setting name is not exist in registered setting list.
    virtual ::grpc::Status LoadSetting(::grpc::ClientContext* context, const ::hillab::v4::SettingRequest& request, ::google::protobuf::Empty* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>> AsyncLoadSetting(::grpc::ClientContext* context, const ::hillab::v4::SettingRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>>(AsyncLoadSettingRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>> PrepareAsyncLoadSetting(::grpc::ClientContext* context, const ::hillab::v4::SettingRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>>(PrepareAsyncLoadSettingRaw(context, request, cq));
    }
    // Saves setting. All system properties are saved in the current setting, including information of gRPC hosts and Image Stream hosts.
    // Returns: 
    // - Status "OK" for successful saving the setting.
    virtual ::grpc::Status SaveSetting(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::google::protobuf::Empty* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>> AsyncSaveSetting(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>>(AsyncSaveSettingRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>> PrepareAsyncSaveSetting(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>>(PrepareAsyncSaveSettingRaw(context, request, cq));
    }
    // Adds available setting. All system properties will be saved with new setting.
    // This works like "Save as".
    // If the setting already exist, the existing setting will be overwritten.
    // Returns: 
    // - Status "OK" for successful.
    virtual ::grpc::Status AddSetting(::grpc::ClientContext* context, const ::hillab::v4::SettingRequest& request, ::google::protobuf::Empty* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>> AsyncAddSetting(::grpc::ClientContext* context, const ::hillab::v4::SettingRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>>(AsyncAddSettingRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>> PrepareAsyncAddSetting(::grpc::ClientContext* context, const ::hillab::v4::SettingRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>>(PrepareAsyncAddSettingRaw(context, request, cq));
    }
    // Removes setting from the registered setting list.
    // Returns: 
    // - Status "OK" for successful.
    // - Status "FAILED_PRECONDITION" for failure since target setting is loaded or not exist in registered setting list.
    virtual ::grpc::Status RemoveSetting(::grpc::ClientContext* context, const ::hillab::v4::SettingRequest& request, ::google::protobuf::Empty* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>> AsyncRemoveSetting(::grpc::ClientContext* context, const ::hillab::v4::SettingRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>>(AsyncRemoveSettingRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>> PrepareAsyncRemoveSetting(::grpc::ClientContext* context, const ::hillab::v4::SettingRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>>(PrepareAsyncRemoveSettingRaw(context, request, cq));
    }
    // Retrieves the available device list.
    // Returns: 
    // - Status "OK" and response indicating the available device list.
    virtual ::grpc::Status GetDeviceList(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::hillab::v4::DeviceInfoList* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::DeviceInfoList>> AsyncGetDeviceList(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::DeviceInfoList>>(AsyncGetDeviceListRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::DeviceInfoList>> PrepareAsyncGetDeviceList(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::DeviceInfoList>>(PrepareAsyncGetDeviceListRaw(context, request, cq));
    }
    // Connects last connected device. 
    // Returns: 
    // - Status "OK" for successful.
    // - Status "FAILED_PRECONDITION" for failure.
    virtual ::grpc::Status ConnectLastDevice(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::google::protobuf::Empty* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>> AsyncConnectLastDevice(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>>(AsyncConnectLastDeviceRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>> PrepareAsyncConnectLastDevice(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>>(PrepareAsyncConnectLastDeviceRaw(context, request, cq));
    }
    // Connects device which of serial number is given. 
    // Returns: 
    // - Status "OK" for successful.
    // - Status "FAILED_PRECONDITION" for failure.
    virtual ::grpc::Status ConnectDevice(::grpc::ClientContext* context, const ::hillab::v4::ConnectDeviceRequest& request, ::google::protobuf::Empty* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>> AsyncConnectDevice(::grpc::ClientContext* context, const ::hillab::v4::ConnectDeviceRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>>(AsyncConnectDeviceRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>> PrepareAsyncConnectDevice(::grpc::ClientContext* context, const ::hillab::v4::ConnectDeviceRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>>(PrepareAsyncConnectDeviceRaw(context, request, cq));
    }
    // Disconnects the device.
    // Returns: 
    // - Status "OK" for successful.
    virtual ::grpc::Status DisconnectDevice(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::google::protobuf::Empty* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>> AsyncDisconnectDevice(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>>(AsyncDisconnectDeviceRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>> PrepareAsyncDisconnectDevice(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>>(PrepareAsyncDisconnectDeviceRaw(context, request, cq));
    }
    // Retrieves image stream server information for raw image.
    // Returns: 
    // - Status "OK" and response indicating the image stream information.
    virtual ::grpc::Status GetRawImageStreamServerInfo(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::hillab::v4::ImageStreamServerResponse* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::ImageStreamServerResponse>> AsyncGetRawImageStreamServerInfo(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::ImageStreamServerResponse>>(AsyncGetRawImageStreamServerInfoRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::ImageStreamServerResponse>> PrepareAsyncGetRawImageStreamServerInfo(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::ImageStreamServerResponse>>(PrepareAsyncGetRawImageStreamServerInfoRaw(context, request, cq));
    }
    // Retrieves image stream server information for profiled image.
    // Returns: 
    // - Status "OK" and response indicating the image stream information.
    virtual ::grpc::Status GetProfiledImageStreamServerInfo(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::hillab::v4::ImageStreamServerResponse* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::ImageStreamServerResponse>> AsyncGetProfiledImageStreamServerInfo(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::ImageStreamServerResponse>>(AsyncGetProfiledImageStreamServerInfoRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::ImageStreamServerResponse>> PrepareAsyncGetProfiledImageStreamServerInfo(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::ImageStreamServerResponse>>(PrepareAsyncGetProfiledImageStreamServerInfoRaw(context, request, cq));
    }
    // Starts/stops image stream server for raw image and/or modifies options. 
    // The server's URL (IP and Port) cannot be changed with gRPC.
    // Note that the camera must be streaming to start the stream server.
    // Returns: 
    // - Status "OK" for successful.
    // - Status "INVALID ARGUMENT" for failure since some values are out of range.
    // - Status "FAILED_PRECONDITION" for indicating that the stream cannot be started, or failure for changing some value since the server is running.
    virtual ::grpc::Status SetRawImageStreamServer(::grpc::ClientContext* context, const ::hillab::v4::ImageStreamServerRequest& request, ::google::protobuf::Empty* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>> AsyncSetRawImageStreamServer(::grpc::ClientContext* context, const ::hillab::v4::ImageStreamServerRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>>(AsyncSetRawImageStreamServerRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>> PrepareAsyncSetRawImageStreamServer(::grpc::ClientContext* context, const ::hillab::v4::ImageStreamServerRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>>(PrepareAsyncSetRawImageStreamServerRaw(context, request, cq));
    }
    // Starts/stops image stream server for raw image and/or modifies options. 
    // The server's URL (IP and Port) cannot be changed with gRPC.
    // Note that the camera must be streaming to start the stream server.
    // Returns: 
    // - Status "OK" for successful.
    // - Status "INVALID ARGUMENT" for failure since some values are out of range.
    // - Status "FAILED_PRECONDITION" for indicating that the stream cannot be started, or failure for changing some value since the server is running.
    virtual ::grpc::Status SetProfiledImageStreamServer(::grpc::ClientContext* context, const ::hillab::v4::ImageStreamServerRequest& request, ::google::protobuf::Empty* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>> AsyncSetProfiledImageStreamServer(::grpc::ClientContext* context, const ::hillab::v4::ImageStreamServerRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>>(AsyncSetProfiledImageStreamServerRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>> PrepareAsyncSetProfiledImageStreamServer(::grpc::ClientContext* context, const ::hillab::v4::ImageStreamServerRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>>(PrepareAsyncSetProfiledImageStreamServerRaw(context, request, cq));
    }
    // Retrieves the stream object for obtaining the system log message.
    // Returns: 
    // - Status "OK" for successful.
    std::unique_ptr< ::grpc::ClientReaderInterface< ::hillab::v4::SystemLogStream>> MonitorSystemLog(::grpc::ClientContext* context, const ::google::protobuf::Empty& request) {
      return std::unique_ptr< ::grpc::ClientReaderInterface< ::hillab::v4::SystemLogStream>>(MonitorSystemLogRaw(context, request));
    }
    std::unique_ptr< ::grpc::ClientAsyncReaderInterface< ::hillab::v4::SystemLogStream>> AsyncMonitorSystemLog(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq, void* tag) {
      return std::unique_ptr< ::grpc::ClientAsyncReaderInterface< ::hillab::v4::SystemLogStream>>(AsyncMonitorSystemLogRaw(context, request, cq, tag));
    }
    std::unique_ptr< ::grpc::ClientAsyncReaderInterface< ::hillab::v4::SystemLogStream>> PrepareAsyncMonitorSystemLog(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncReaderInterface< ::hillab::v4::SystemLogStream>>(PrepareAsyncMonitorSystemLogRaw(context, request, cq));
    }
    class async_interface {
     public:
      virtual ~async_interface() {}
      virtual void GetAppInfo(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::AppInfoResponse* response, std::function<void(::grpc::Status)>) = 0;
      virtual void GetAppInfo(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::AppInfoResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0;
      // Retrieves registered setting list.
      // Returns: 
      // - Status "OK" and response indicating the setting name list.
      virtual void GetSettingList(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::SettingListResponse* response, std::function<void(::grpc::Status)>) = 0;
      virtual void GetSettingList(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::SettingListResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0;
      // Retrieves the loaded setting.
      // Returns: 
      // - Status "OK" and response indicating the loaded setting name.
      virtual void GetCurrentSetting(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::SettingResponse* response, std::function<void(::grpc::Status)>) = 0;
      virtual void GetCurrentSetting(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::SettingResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0;
      // Loads setting. All system properties are applied as loaded settings, but information of gRPC host and Image Stream hosts is not loaded.
      // Returns: 
      // - Status "OK" for successful.
      // - Status "FAILED_PRECONDITION" for failure since the setting name is not exist in registered setting list.
      virtual void LoadSetting(::grpc::ClientContext* context, const ::hillab::v4::SettingRequest* request, ::google::protobuf::Empty* response, std::function<void(::grpc::Status)>) = 0;
      virtual void LoadSetting(::grpc::ClientContext* context, const ::hillab::v4::SettingRequest* request, ::google::protobuf::Empty* response, ::grpc::ClientUnaryReactor* reactor) = 0;
      // Saves setting. All system properties are saved in the current setting, including information of gRPC hosts and Image Stream hosts.
      // Returns: 
      // - Status "OK" for successful saving the setting.
      virtual void SaveSetting(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::google::protobuf::Empty* response, std::function<void(::grpc::Status)>) = 0;
      virtual void SaveSetting(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::google::protobuf::Empty* response, ::grpc::ClientUnaryReactor* reactor) = 0;
      // Adds available setting. All system properties will be saved with new setting.
      // This works like "Save as".
      // If the setting already exist, the existing setting will be overwritten.
      // Returns: 
      // - Status "OK" for successful.
      virtual void AddSetting(::grpc::ClientContext* context, const ::hillab::v4::SettingRequest* request, ::google::protobuf::Empty* response, std::function<void(::grpc::Status)>) = 0;
      virtual void AddSetting(::grpc::ClientContext* context, const ::hillab::v4::SettingRequest* request, ::google::protobuf::Empty* response, ::grpc::ClientUnaryReactor* reactor) = 0;
      // Removes setting from the registered setting list.
      // Returns: 
      // - Status "OK" for successful.
      // - Status "FAILED_PRECONDITION" for failure since target setting is loaded or not exist in registered setting list.
      virtual void RemoveSetting(::grpc::ClientContext* context, const ::hillab::v4::SettingRequest* request, ::google::protobuf::Empty* response, std::function<void(::grpc::Status)>) = 0;
      virtual void RemoveSetting(::grpc::ClientContext* context, const ::hillab::v4::SettingRequest* request, ::google::protobuf::Empty* response, ::grpc::ClientUnaryReactor* reactor) = 0;
      // Retrieves the available device list.
      // Returns: 
      // - Status "OK" and response indicating the available device list.
      virtual void GetDeviceList(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::DeviceInfoList* response, std::function<void(::grpc::Status)>) = 0;
      virtual void GetDeviceList(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::DeviceInfoList* response, ::grpc::ClientUnaryReactor* reactor) = 0;
      // Connects last connected device. 
      // Returns: 
      // - Status "OK" for successful.
      // - Status "FAILED_PRECONDITION" for failure.
      virtual void ConnectLastDevice(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::google::protobuf::Empty* response, std::function<void(::grpc::Status)>) = 0;
      virtual void ConnectLastDevice(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::google::protobuf::Empty* response, ::grpc::ClientUnaryReactor* reactor) = 0;
      // Connects device which of serial number is given. 
      // Returns: 
      // - Status "OK" for successful.
      // - Status "FAILED_PRECONDITION" for failure.
      virtual void ConnectDevice(::grpc::ClientContext* context, const ::hillab::v4::ConnectDeviceRequest* request, ::google::protobuf::Empty* response, std::function<void(::grpc::Status)>) = 0;
      virtual void ConnectDevice(::grpc::ClientContext* context, const ::hillab::v4::ConnectDeviceRequest* request, ::google::protobuf::Empty* response, ::grpc::ClientUnaryReactor* reactor) = 0;
      // Disconnects the device.
      // Returns: 
      // - Status "OK" for successful.
      virtual void DisconnectDevice(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::google::protobuf::Empty* response, std::function<void(::grpc::Status)>) = 0;
      virtual void DisconnectDevice(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::google::protobuf::Empty* response, ::grpc::ClientUnaryReactor* reactor) = 0;
      // Retrieves image stream server information for raw image.
      // Returns: 
      // - Status "OK" and response indicating the image stream information.
      virtual void GetRawImageStreamServerInfo(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::ImageStreamServerResponse* response, std::function<void(::grpc::Status)>) = 0;
      virtual void GetRawImageStreamServerInfo(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::ImageStreamServerResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0;
      // Retrieves image stream server information for profiled image.
      // Returns: 
      // - Status "OK" and response indicating the image stream information.
      virtual void GetProfiledImageStreamServerInfo(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::ImageStreamServerResponse* response, std::function<void(::grpc::Status)>) = 0;
      virtual void GetProfiledImageStreamServerInfo(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::ImageStreamServerResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0;
      // Starts/stops image stream server for raw image and/or modifies options. 
      // The server's URL (IP and Port) cannot be changed with gRPC.
      // Note that the camera must be streaming to start the stream server.
      // Returns: 
      // - Status "OK" for successful.
      // - Status "INVALID ARGUMENT" for failure since some values are out of range.
      // - Status "FAILED_PRECONDITION" for indicating that the stream cannot be started, or failure for changing some value since the server is running.
      virtual void SetRawImageStreamServer(::grpc::ClientContext* context, const ::hillab::v4::ImageStreamServerRequest* request, ::google::protobuf::Empty* response, std::function<void(::grpc::Status)>) = 0;
      virtual void SetRawImageStreamServer(::grpc::ClientContext* context, const ::hillab::v4::ImageStreamServerRequest* request, ::google::protobuf::Empty* response, ::grpc::ClientUnaryReactor* reactor) = 0;
      // Starts/stops image stream server for raw image and/or modifies options. 
      // The server's URL (IP and Port) cannot be changed with gRPC.
      // Note that the camera must be streaming to start the stream server.
      // Returns: 
      // - Status "OK" for successful.
      // - Status "INVALID ARGUMENT" for failure since some values are out of range.
      // - Status "FAILED_PRECONDITION" for indicating that the stream cannot be started, or failure for changing some value since the server is running.
      virtual void SetProfiledImageStreamServer(::grpc::ClientContext* context, const ::hillab::v4::ImageStreamServerRequest* request, ::google::protobuf::Empty* response, std::function<void(::grpc::Status)>) = 0;
      virtual void SetProfiledImageStreamServer(::grpc::ClientContext* context, const ::hillab::v4::ImageStreamServerRequest* request, ::google::protobuf::Empty* response, ::grpc::ClientUnaryReactor* reactor) = 0;
      // Retrieves the stream object for obtaining the system log message.
      // Returns: 
      // - Status "OK" for successful.
      virtual void MonitorSystemLog(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::grpc::ClientReadReactor< ::hillab::v4::SystemLogStream>* reactor) = 0;
    };
    typedef class async_interface experimental_async_interface;
    virtual class async_interface* async() { return nullptr; }
    class async_interface* experimental_async() { return async(); }
   private:
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::AppInfoResponse>* AsyncGetAppInfoRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::AppInfoResponse>* PrepareAsyncGetAppInfoRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::SettingListResponse>* AsyncGetSettingListRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::SettingListResponse>* PrepareAsyncGetSettingListRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::SettingResponse>* AsyncGetCurrentSettingRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::SettingResponse>* PrepareAsyncGetCurrentSettingRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>* AsyncLoadSettingRaw(::grpc::ClientContext* context, const ::hillab::v4::SettingRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>* PrepareAsyncLoadSettingRaw(::grpc::ClientContext* context, const ::hillab::v4::SettingRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>* AsyncSaveSettingRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>* PrepareAsyncSaveSettingRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>* AsyncAddSettingRaw(::grpc::ClientContext* context, const ::hillab::v4::SettingRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>* PrepareAsyncAddSettingRaw(::grpc::ClientContext* context, const ::hillab::v4::SettingRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>* AsyncRemoveSettingRaw(::grpc::ClientContext* context, const ::hillab::v4::SettingRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>* PrepareAsyncRemoveSettingRaw(::grpc::ClientContext* context, const ::hillab::v4::SettingRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::DeviceInfoList>* AsyncGetDeviceListRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::DeviceInfoList>* PrepareAsyncGetDeviceListRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>* AsyncConnectLastDeviceRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>* PrepareAsyncConnectLastDeviceRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>* AsyncConnectDeviceRaw(::grpc::ClientContext* context, const ::hillab::v4::ConnectDeviceRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>* PrepareAsyncConnectDeviceRaw(::grpc::ClientContext* context, const ::hillab::v4::ConnectDeviceRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>* AsyncDisconnectDeviceRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>* PrepareAsyncDisconnectDeviceRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::ImageStreamServerResponse>* AsyncGetRawImageStreamServerInfoRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::ImageStreamServerResponse>* PrepareAsyncGetRawImageStreamServerInfoRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::ImageStreamServerResponse>* AsyncGetProfiledImageStreamServerInfoRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::ImageStreamServerResponse>* PrepareAsyncGetProfiledImageStreamServerInfoRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>* AsyncSetRawImageStreamServerRaw(::grpc::ClientContext* context, const ::hillab::v4::ImageStreamServerRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>* PrepareAsyncSetRawImageStreamServerRaw(::grpc::ClientContext* context, const ::hillab::v4::ImageStreamServerRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>* AsyncSetProfiledImageStreamServerRaw(::grpc::ClientContext* context, const ::hillab::v4::ImageStreamServerRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>* PrepareAsyncSetProfiledImageStreamServerRaw(::grpc::ClientContext* context, const ::hillab::v4::ImageStreamServerRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientReaderInterface< ::hillab::v4::SystemLogStream>* MonitorSystemLogRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request) = 0;
    virtual ::grpc::ClientAsyncReaderInterface< ::hillab::v4::SystemLogStream>* AsyncMonitorSystemLogRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq, void* tag) = 0;
    virtual ::grpc::ClientAsyncReaderInterface< ::hillab::v4::SystemLogStream>* PrepareAsyncMonitorSystemLogRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) = 0;
  };
  class Stub final : public StubInterface {
   public:
    Stub(const std::shared_ptr< ::grpc::ChannelInterface>& channel, const ::grpc::StubOptions& options = ::grpc::StubOptions());
    ::grpc::Status GetAppInfo(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::hillab::v4::AppInfoResponse* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hillab::v4::AppInfoResponse>> AsyncGetAppInfo(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hillab::v4::AppInfoResponse>>(AsyncGetAppInfoRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hillab::v4::AppInfoResponse>> PrepareAsyncGetAppInfo(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hillab::v4::AppInfoResponse>>(PrepareAsyncGetAppInfoRaw(context, request, cq));
    }
    ::grpc::Status GetSettingList(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::hillab::v4::SettingListResponse* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hillab::v4::SettingListResponse>> AsyncGetSettingList(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hillab::v4::SettingListResponse>>(AsyncGetSettingListRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hillab::v4::SettingListResponse>> PrepareAsyncGetSettingList(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hillab::v4::SettingListResponse>>(PrepareAsyncGetSettingListRaw(context, request, cq));
    }
    ::grpc::Status GetCurrentSetting(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::hillab::v4::SettingResponse* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hillab::v4::SettingResponse>> AsyncGetCurrentSetting(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hillab::v4::SettingResponse>>(AsyncGetCurrentSettingRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hillab::v4::SettingResponse>> PrepareAsyncGetCurrentSetting(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hillab::v4::SettingResponse>>(PrepareAsyncGetCurrentSettingRaw(context, request, cq));
    }
    ::grpc::Status LoadSetting(::grpc::ClientContext* context, const ::hillab::v4::SettingRequest& request, ::google::protobuf::Empty* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>> AsyncLoadSetting(::grpc::ClientContext* context, const ::hillab::v4::SettingRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>>(AsyncLoadSettingRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>> PrepareAsyncLoadSetting(::grpc::ClientContext* context, const ::hillab::v4::SettingRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>>(PrepareAsyncLoadSettingRaw(context, request, cq));
    }
    ::grpc::Status SaveSetting(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::google::protobuf::Empty* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>> AsyncSaveSetting(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>>(AsyncSaveSettingRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>> PrepareAsyncSaveSetting(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>>(PrepareAsyncSaveSettingRaw(context, request, cq));
    }
    ::grpc::Status AddSetting(::grpc::ClientContext* context, const ::hillab::v4::SettingRequest& request, ::google::protobuf::Empty* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>> AsyncAddSetting(::grpc::ClientContext* context, const ::hillab::v4::SettingRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>>(AsyncAddSettingRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>> PrepareAsyncAddSetting(::grpc::ClientContext* context, const ::hillab::v4::SettingRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>>(PrepareAsyncAddSettingRaw(context, request, cq));
    }
    ::grpc::Status RemoveSetting(::grpc::ClientContext* context, const ::hillab::v4::SettingRequest& request, ::google::protobuf::Empty* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>> AsyncRemoveSetting(::grpc::ClientContext* context, const ::hillab::v4::SettingRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>>(AsyncRemoveSettingRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>> PrepareAsyncRemoveSetting(::grpc::ClientContext* context, const ::hillab::v4::SettingRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>>(PrepareAsyncRemoveSettingRaw(context, request, cq));
    }
    ::grpc::Status GetDeviceList(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::hillab::v4::DeviceInfoList* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hillab::v4::DeviceInfoList>> AsyncGetDeviceList(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hillab::v4::DeviceInfoList>>(AsyncGetDeviceListRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hillab::v4::DeviceInfoList>> PrepareAsyncGetDeviceList(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hillab::v4::DeviceInfoList>>(PrepareAsyncGetDeviceListRaw(context, request, cq));
    }
    ::grpc::Status ConnectLastDevice(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::google::protobuf::Empty* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>> AsyncConnectLastDevice(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>>(AsyncConnectLastDeviceRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>> PrepareAsyncConnectLastDevice(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>>(PrepareAsyncConnectLastDeviceRaw(context, request, cq));
    }
    ::grpc::Status ConnectDevice(::grpc::ClientContext* context, const ::hillab::v4::ConnectDeviceRequest& request, ::google::protobuf::Empty* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>> AsyncConnectDevice(::grpc::ClientContext* context, const ::hillab::v4::ConnectDeviceRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>>(AsyncConnectDeviceRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>> PrepareAsyncConnectDevice(::grpc::ClientContext* context, const ::hillab::v4::ConnectDeviceRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>>(PrepareAsyncConnectDeviceRaw(context, request, cq));
    }
    ::grpc::Status DisconnectDevice(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::google::protobuf::Empty* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>> AsyncDisconnectDevice(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>>(AsyncDisconnectDeviceRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>> PrepareAsyncDisconnectDevice(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>>(PrepareAsyncDisconnectDeviceRaw(context, request, cq));
    }
    ::grpc::Status GetRawImageStreamServerInfo(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::hillab::v4::ImageStreamServerResponse* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hillab::v4::ImageStreamServerResponse>> AsyncGetRawImageStreamServerInfo(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hillab::v4::ImageStreamServerResponse>>(AsyncGetRawImageStreamServerInfoRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hillab::v4::ImageStreamServerResponse>> PrepareAsyncGetRawImageStreamServerInfo(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hillab::v4::ImageStreamServerResponse>>(PrepareAsyncGetRawImageStreamServerInfoRaw(context, request, cq));
    }
    ::grpc::Status GetProfiledImageStreamServerInfo(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::hillab::v4::ImageStreamServerResponse* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hillab::v4::ImageStreamServerResponse>> AsyncGetProfiledImageStreamServerInfo(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hillab::v4::ImageStreamServerResponse>>(AsyncGetProfiledImageStreamServerInfoRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hillab::v4::ImageStreamServerResponse>> PrepareAsyncGetProfiledImageStreamServerInfo(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hillab::v4::ImageStreamServerResponse>>(PrepareAsyncGetProfiledImageStreamServerInfoRaw(context, request, cq));
    }
    ::grpc::Status SetRawImageStreamServer(::grpc::ClientContext* context, const ::hillab::v4::ImageStreamServerRequest& request, ::google::protobuf::Empty* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>> AsyncSetRawImageStreamServer(::grpc::ClientContext* context, const ::hillab::v4::ImageStreamServerRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>>(AsyncSetRawImageStreamServerRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>> PrepareAsyncSetRawImageStreamServer(::grpc::ClientContext* context, const ::hillab::v4::ImageStreamServerRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>>(PrepareAsyncSetRawImageStreamServerRaw(context, request, cq));
    }
    ::grpc::Status SetProfiledImageStreamServer(::grpc::ClientContext* context, const ::hillab::v4::ImageStreamServerRequest& request, ::google::protobuf::Empty* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>> AsyncSetProfiledImageStreamServer(::grpc::ClientContext* context, const ::hillab::v4::ImageStreamServerRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>>(AsyncSetProfiledImageStreamServerRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>> PrepareAsyncSetProfiledImageStreamServer(::grpc::ClientContext* context, const ::hillab::v4::ImageStreamServerRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>>(PrepareAsyncSetProfiledImageStreamServerRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientReader< ::hillab::v4::SystemLogStream>> MonitorSystemLog(::grpc::ClientContext* context, const ::google::protobuf::Empty& request) {
      return std::unique_ptr< ::grpc::ClientReader< ::hillab::v4::SystemLogStream>>(MonitorSystemLogRaw(context, request));
    }
    std::unique_ptr< ::grpc::ClientAsyncReader< ::hillab::v4::SystemLogStream>> AsyncMonitorSystemLog(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq, void* tag) {
      return std::unique_ptr< ::grpc::ClientAsyncReader< ::hillab::v4::SystemLogStream>>(AsyncMonitorSystemLogRaw(context, request, cq, tag));
    }
    std::unique_ptr< ::grpc::ClientAsyncReader< ::hillab::v4::SystemLogStream>> PrepareAsyncMonitorSystemLog(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncReader< ::hillab::v4::SystemLogStream>>(PrepareAsyncMonitorSystemLogRaw(context, request, cq));
    }
    class async final :
      public StubInterface::async_interface {
     public:
      void GetAppInfo(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::AppInfoResponse* response, std::function<void(::grpc::Status)>) override;
      void GetAppInfo(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::AppInfoResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
      void GetSettingList(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::SettingListResponse* response, std::function<void(::grpc::Status)>) override;
      void GetSettingList(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::SettingListResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
      void GetCurrentSetting(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::SettingResponse* response, std::function<void(::grpc::Status)>) override;
      void GetCurrentSetting(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::SettingResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
      void LoadSetting(::grpc::ClientContext* context, const ::hillab::v4::SettingRequest* request, ::google::protobuf::Empty* response, std::function<void(::grpc::Status)>) override;
      void LoadSetting(::grpc::ClientContext* context, const ::hillab::v4::SettingRequest* request, ::google::protobuf::Empty* response, ::grpc::ClientUnaryReactor* reactor) override;
      void SaveSetting(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::google::protobuf::Empty* response, std::function<void(::grpc::Status)>) override;
      void SaveSetting(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::google::protobuf::Empty* response, ::grpc::ClientUnaryReactor* reactor) override;
      void AddSetting(::grpc::ClientContext* context, const ::hillab::v4::SettingRequest* request, ::google::protobuf::Empty* response, std::function<void(::grpc::Status)>) override;
      void AddSetting(::grpc::ClientContext* context, const ::hillab::v4::SettingRequest* request, ::google::protobuf::Empty* response, ::grpc::ClientUnaryReactor* reactor) override;
      void RemoveSetting(::grpc::ClientContext* context, const ::hillab::v4::SettingRequest* request, ::google::protobuf::Empty* response, std::function<void(::grpc::Status)>) override;
      void RemoveSetting(::grpc::ClientContext* context, const ::hillab::v4::SettingRequest* request, ::google::protobuf::Empty* response, ::grpc::ClientUnaryReactor* reactor) override;
      void GetDeviceList(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::DeviceInfoList* response, std::function<void(::grpc::Status)>) override;
      void GetDeviceList(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::DeviceInfoList* response, ::grpc::ClientUnaryReactor* reactor) override;
      void ConnectLastDevice(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::google::protobuf::Empty* response, std::function<void(::grpc::Status)>) override;
      void ConnectLastDevice(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::google::protobuf::Empty* response, ::grpc::ClientUnaryReactor* reactor) override;
      void ConnectDevice(::grpc::ClientContext* context, const ::hillab::v4::ConnectDeviceRequest* request, ::google::protobuf::Empty* response, std::function<void(::grpc::Status)>) override;
      void ConnectDevice(::grpc::ClientContext* context, const ::hillab::v4::ConnectDeviceRequest* request, ::google::protobuf::Empty* response, ::grpc::ClientUnaryReactor* reactor) override;
      void DisconnectDevice(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::google::protobuf::Empty* response, std::function<void(::grpc::Status)>) override;
      void DisconnectDevice(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::google::protobuf::Empty* response, ::grpc::ClientUnaryReactor* reactor) override;
      void GetRawImageStreamServerInfo(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::ImageStreamServerResponse* response, std::function<void(::grpc::Status)>) override;
      void GetRawImageStreamServerInfo(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::ImageStreamServerResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
      void GetProfiledImageStreamServerInfo(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::ImageStreamServerResponse* response, std::function<void(::grpc::Status)>) override;
      void GetProfiledImageStreamServerInfo(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::ImageStreamServerResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
      void SetRawImageStreamServer(::grpc::ClientContext* context, const ::hillab::v4::ImageStreamServerRequest* request, ::google::protobuf::Empty* response, std::function<void(::grpc::Status)>) override;
      void SetRawImageStreamServer(::grpc::ClientContext* context, const ::hillab::v4::ImageStreamServerRequest* request, ::google::protobuf::Empty* response, ::grpc::ClientUnaryReactor* reactor) override;
      void SetProfiledImageStreamServer(::grpc::ClientContext* context, const ::hillab::v4::ImageStreamServerRequest* request, ::google::protobuf::Empty* response, std::function<void(::grpc::Status)>) override;
      void SetProfiledImageStreamServer(::grpc::ClientContext* context, const ::hillab::v4::ImageStreamServerRequest* request, ::google::protobuf::Empty* response, ::grpc::ClientUnaryReactor* reactor) override;
      void MonitorSystemLog(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::grpc::ClientReadReactor< ::hillab::v4::SystemLogStream>* reactor) override;
     private:
      friend class Stub;
      explicit async(Stub* stub): stub_(stub) { }
      Stub* stub() { return stub_; }
      Stub* stub_;
    };
    class async* async() override { return &async_stub_; }

   private:
    std::shared_ptr< ::grpc::ChannelInterface> channel_;
    class async async_stub_{this};
    ::grpc::ClientAsyncResponseReader< ::hillab::v4::AppInfoResponse>* AsyncGetAppInfoRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::hillab::v4::AppInfoResponse>* PrepareAsyncGetAppInfoRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::hillab::v4::SettingListResponse>* AsyncGetSettingListRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::hillab::v4::SettingListResponse>* PrepareAsyncGetSettingListRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::hillab::v4::SettingResponse>* AsyncGetCurrentSettingRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::hillab::v4::SettingResponse>* PrepareAsyncGetCurrentSettingRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>* AsyncLoadSettingRaw(::grpc::ClientContext* context, const ::hillab::v4::SettingRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>* PrepareAsyncLoadSettingRaw(::grpc::ClientContext* context, const ::hillab::v4::SettingRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>* AsyncSaveSettingRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>* PrepareAsyncSaveSettingRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>* AsyncAddSettingRaw(::grpc::ClientContext* context, const ::hillab::v4::SettingRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>* PrepareAsyncAddSettingRaw(::grpc::ClientContext* context, const ::hillab::v4::SettingRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>* AsyncRemoveSettingRaw(::grpc::ClientContext* context, const ::hillab::v4::SettingRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>* PrepareAsyncRemoveSettingRaw(::grpc::ClientContext* context, const ::hillab::v4::SettingRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::hillab::v4::DeviceInfoList>* AsyncGetDeviceListRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::hillab::v4::DeviceInfoList>* PrepareAsyncGetDeviceListRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>* AsyncConnectLastDeviceRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>* PrepareAsyncConnectLastDeviceRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>* AsyncConnectDeviceRaw(::grpc::ClientContext* context, const ::hillab::v4::ConnectDeviceRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>* PrepareAsyncConnectDeviceRaw(::grpc::ClientContext* context, const ::hillab::v4::ConnectDeviceRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>* AsyncDisconnectDeviceRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>* PrepareAsyncDisconnectDeviceRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::hillab::v4::ImageStreamServerResponse>* AsyncGetRawImageStreamServerInfoRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::hillab::v4::ImageStreamServerResponse>* PrepareAsyncGetRawImageStreamServerInfoRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::hillab::v4::ImageStreamServerResponse>* AsyncGetProfiledImageStreamServerInfoRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::hillab::v4::ImageStreamServerResponse>* PrepareAsyncGetProfiledImageStreamServerInfoRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>* AsyncSetRawImageStreamServerRaw(::grpc::ClientContext* context, const ::hillab::v4::ImageStreamServerRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>* PrepareAsyncSetRawImageStreamServerRaw(::grpc::ClientContext* context, const ::hillab::v4::ImageStreamServerRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>* AsyncSetProfiledImageStreamServerRaw(::grpc::ClientContext* context, const ::hillab::v4::ImageStreamServerRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>* PrepareAsyncSetProfiledImageStreamServerRaw(::grpc::ClientContext* context, const ::hillab::v4::ImageStreamServerRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientReader< ::hillab::v4::SystemLogStream>* MonitorSystemLogRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request) override;
    ::grpc::ClientAsyncReader< ::hillab::v4::SystemLogStream>* AsyncMonitorSystemLogRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq, void* tag) override;
    ::grpc::ClientAsyncReader< ::hillab::v4::SystemLogStream>* PrepareAsyncMonitorSystemLogRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) override;
    const ::grpc::internal::RpcMethod rpcmethod_GetAppInfo_;
    const ::grpc::internal::RpcMethod rpcmethod_GetSettingList_;
    const ::grpc::internal::RpcMethod rpcmethod_GetCurrentSetting_;
    const ::grpc::internal::RpcMethod rpcmethod_LoadSetting_;
    const ::grpc::internal::RpcMethod rpcmethod_SaveSetting_;
    const ::grpc::internal::RpcMethod rpcmethod_AddSetting_;
    const ::grpc::internal::RpcMethod rpcmethod_RemoveSetting_;
    const ::grpc::internal::RpcMethod rpcmethod_GetDeviceList_;
    const ::grpc::internal::RpcMethod rpcmethod_ConnectLastDevice_;
    const ::grpc::internal::RpcMethod rpcmethod_ConnectDevice_;
    const ::grpc::internal::RpcMethod rpcmethod_DisconnectDevice_;
    const ::grpc::internal::RpcMethod rpcmethod_GetRawImageStreamServerInfo_;
    const ::grpc::internal::RpcMethod rpcmethod_GetProfiledImageStreamServerInfo_;
    const ::grpc::internal::RpcMethod rpcmethod_SetRawImageStreamServer_;
    const ::grpc::internal::RpcMethod rpcmethod_SetProfiledImageStreamServer_;
    const ::grpc::internal::RpcMethod rpcmethod_MonitorSystemLog_;
  };
  static std::unique_ptr<Stub> NewStub(const std::shared_ptr< ::grpc::ChannelInterface>& channel, const ::grpc::StubOptions& options = ::grpc::StubOptions());

  class Service : public ::grpc::Service {
   public:
    Service();
    virtual ~Service();
    virtual ::grpc::Status GetAppInfo(::grpc::ServerContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::AppInfoResponse* response);
    // Retrieves registered setting list.
    // Returns: 
    // - Status "OK" and response indicating the setting name list.
    virtual ::grpc::Status GetSettingList(::grpc::ServerContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::SettingListResponse* response);
    // Retrieves the loaded setting.
    // Returns: 
    // - Status "OK" and response indicating the loaded setting name.
    virtual ::grpc::Status GetCurrentSetting(::grpc::ServerContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::SettingResponse* response);
    // Loads setting. All system properties are applied as loaded settings, but information of gRPC host and Image Stream hosts is not loaded.
    // Returns: 
    // - Status "OK" for successful.
    // - Status "FAILED_PRECONDITION" for failure since the setting name is not exist in registered setting list.
    virtual ::grpc::Status LoadSetting(::grpc::ServerContext* context, const ::hillab::v4::SettingRequest* request, ::google::protobuf::Empty* response);
    // Saves setting. All system properties are saved in the current setting, including information of gRPC hosts and Image Stream hosts.
    // Returns: 
    // - Status "OK" for successful saving the setting.
    virtual ::grpc::Status SaveSetting(::grpc::ServerContext* context, const ::google::protobuf::Empty* request, ::google::protobuf::Empty* response);
    // Adds available setting. All system properties will be saved with new setting.
    // This works like "Save as".
    // If the setting already exist, the existing setting will be overwritten.
    // Returns: 
    // - Status "OK" for successful.
    virtual ::grpc::Status AddSetting(::grpc::ServerContext* context, const ::hillab::v4::SettingRequest* request, ::google::protobuf::Empty* response);
    // Removes setting from the registered setting list.
    // Returns: 
    // - Status "OK" for successful.
    // - Status "FAILED_PRECONDITION" for failure since target setting is loaded or not exist in registered setting list.
    virtual ::grpc::Status RemoveSetting(::grpc::ServerContext* context, const ::hillab::v4::SettingRequest* request, ::google::protobuf::Empty* response);
    // Retrieves the available device list.
    // Returns: 
    // - Status "OK" and response indicating the available device list.
    virtual ::grpc::Status GetDeviceList(::grpc::ServerContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::DeviceInfoList* response);
    // Connects last connected device. 
    // Returns: 
    // - Status "OK" for successful.
    // - Status "FAILED_PRECONDITION" for failure.
    virtual ::grpc::Status ConnectLastDevice(::grpc::ServerContext* context, const ::google::protobuf::Empty* request, ::google::protobuf::Empty* response);
    // Connects device which of serial number is given. 
    // Returns: 
    // - Status "OK" for successful.
    // - Status "FAILED_PRECONDITION" for failure.
    virtual ::grpc::Status ConnectDevice(::grpc::ServerContext* context, const ::hillab::v4::ConnectDeviceRequest* request, ::google::protobuf::Empty* response);
    // Disconnects the device.
    // Returns: 
    // - Status "OK" for successful.
    virtual ::grpc::Status DisconnectDevice(::grpc::ServerContext* context, const ::google::protobuf::Empty* request, ::google::protobuf::Empty* response);
    // Retrieves image stream server information for raw image.
    // Returns: 
    // - Status "OK" and response indicating the image stream information.
    virtual ::grpc::Status GetRawImageStreamServerInfo(::grpc::ServerContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::ImageStreamServerResponse* response);
    // Retrieves image stream server information for profiled image.
    // Returns: 
    // - Status "OK" and response indicating the image stream information.
    virtual ::grpc::Status GetProfiledImageStreamServerInfo(::grpc::ServerContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::ImageStreamServerResponse* response);
    // Starts/stops image stream server for raw image and/or modifies options. 
    // The server's URL (IP and Port) cannot be changed with gRPC.
    // Note that the camera must be streaming to start the stream server.
    // Returns: 
    // - Status "OK" for successful.
    // - Status "INVALID ARGUMENT" for failure since some values are out of range.
    // - Status "FAILED_PRECONDITION" for indicating that the stream cannot be started, or failure for changing some value since the server is running.
    virtual ::grpc::Status SetRawImageStreamServer(::grpc::ServerContext* context, const ::hillab::v4::ImageStreamServerRequest* request, ::google::protobuf::Empty* response);
    // Starts/stops image stream server for raw image and/or modifies options. 
    // The server's URL (IP and Port) cannot be changed with gRPC.
    // Note that the camera must be streaming to start the stream server.
    // Returns: 
    // - Status "OK" for successful.
    // - Status "INVALID ARGUMENT" for failure since some values are out of range.
    // - Status "FAILED_PRECONDITION" for indicating that the stream cannot be started, or failure for changing some value since the server is running.
    virtual ::grpc::Status SetProfiledImageStreamServer(::grpc::ServerContext* context, const ::hillab::v4::ImageStreamServerRequest* request, ::google::protobuf::Empty* response);
    // Retrieves the stream object for obtaining the system log message.
    // Returns: 
    // - Status "OK" for successful.
    virtual ::grpc::Status MonitorSystemLog(::grpc::ServerContext* context, const ::google::protobuf::Empty* request, ::grpc::ServerWriter< ::hillab::v4::SystemLogStream>* writer);
  };
  template <class BaseClass>
  class WithAsyncMethod_GetAppInfo : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_GetAppInfo() {
      ::grpc::Service::MarkMethodAsync(0);
    }
    ~WithAsyncMethod_GetAppInfo() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetAppInfo(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::AppInfoResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetAppInfo(::grpc::ServerContext* context, ::google::protobuf::Empty* request, ::grpc::ServerAsyncResponseWriter< ::hillab::v4::AppInfoResponse>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(0, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithAsyncMethod_GetSettingList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_GetSettingList() {
      ::grpc::Service::MarkMethodAsync(1);
    }
    ~WithAsyncMethod_GetSettingList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetSettingList(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::SettingListResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetSettingList(::grpc::ServerContext* context, ::google::protobuf::Empty* request, ::grpc::ServerAsyncResponseWriter< ::hillab::v4::SettingListResponse>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(1, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithAsyncMethod_GetCurrentSetting : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_GetCurrentSetting() {
      ::grpc::Service::MarkMethodAsync(2);
    }
    ~WithAsyncMethod_GetCurrentSetting() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetCurrentSetting(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::SettingResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetCurrentSetting(::grpc::ServerContext* context, ::google::protobuf::Empty* request, ::grpc::ServerAsyncResponseWriter< ::hillab::v4::SettingResponse>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(2, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithAsyncMethod_LoadSetting : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_LoadSetting() {
      ::grpc::Service::MarkMethodAsync(3);
    }
    ~WithAsyncMethod_LoadSetting() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status LoadSetting(::grpc::ServerContext* /*context*/, const ::hillab::v4::SettingRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestLoadSetting(::grpc::ServerContext* context, ::hillab::v4::SettingRequest* request, ::grpc::ServerAsyncResponseWriter< ::google::protobuf::Empty>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(3, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithAsyncMethod_SaveSetting : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_SaveSetting() {
      ::grpc::Service::MarkMethodAsync(4);
    }
    ~WithAsyncMethod_SaveSetting() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status SaveSetting(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestSaveSetting(::grpc::ServerContext* context, ::google::protobuf::Empty* request, ::grpc::ServerAsyncResponseWriter< ::google::protobuf::Empty>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(4, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithAsyncMethod_AddSetting : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_AddSetting() {
      ::grpc::Service::MarkMethodAsync(5);
    }
    ~WithAsyncMethod_AddSetting() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status AddSetting(::grpc::ServerContext* /*context*/, const ::hillab::v4::SettingRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestAddSetting(::grpc::ServerContext* context, ::hillab::v4::SettingRequest* request, ::grpc::ServerAsyncResponseWriter< ::google::protobuf::Empty>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(5, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithAsyncMethod_RemoveSetting : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_RemoveSetting() {
      ::grpc::Service::MarkMethodAsync(6);
    }
    ~WithAsyncMethod_RemoveSetting() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status RemoveSetting(::grpc::ServerContext* /*context*/, const ::hillab::v4::SettingRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestRemoveSetting(::grpc::ServerContext* context, ::hillab::v4::SettingRequest* request, ::grpc::ServerAsyncResponseWriter< ::google::protobuf::Empty>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(6, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithAsyncMethod_GetDeviceList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_GetDeviceList() {
      ::grpc::Service::MarkMethodAsync(7);
    }
    ~WithAsyncMethod_GetDeviceList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetDeviceList(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::DeviceInfoList* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetDeviceList(::grpc::ServerContext* context, ::google::protobuf::Empty* request, ::grpc::ServerAsyncResponseWriter< ::hillab::v4::DeviceInfoList>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(7, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithAsyncMethod_ConnectLastDevice : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_ConnectLastDevice() {
      ::grpc::Service::MarkMethodAsync(8);
    }
    ~WithAsyncMethod_ConnectLastDevice() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status ConnectLastDevice(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestConnectLastDevice(::grpc::ServerContext* context, ::google::protobuf::Empty* request, ::grpc::ServerAsyncResponseWriter< ::google::protobuf::Empty>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(8, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithAsyncMethod_ConnectDevice : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_ConnectDevice() {
      ::grpc::Service::MarkMethodAsync(9);
    }
    ~WithAsyncMethod_ConnectDevice() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status ConnectDevice(::grpc::ServerContext* /*context*/, const ::hillab::v4::ConnectDeviceRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestConnectDevice(::grpc::ServerContext* context, ::hillab::v4::ConnectDeviceRequest* request, ::grpc::ServerAsyncResponseWriter< ::google::protobuf::Empty>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(9, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithAsyncMethod_DisconnectDevice : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_DisconnectDevice() {
      ::grpc::Service::MarkMethodAsync(10);
    }
    ~WithAsyncMethod_DisconnectDevice() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status DisconnectDevice(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestDisconnectDevice(::grpc::ServerContext* context, ::google::protobuf::Empty* request, ::grpc::ServerAsyncResponseWriter< ::google::protobuf::Empty>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(10, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithAsyncMethod_GetRawImageStreamServerInfo : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_GetRawImageStreamServerInfo() {
      ::grpc::Service::MarkMethodAsync(11);
    }
    ~WithAsyncMethod_GetRawImageStreamServerInfo() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetRawImageStreamServerInfo(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::ImageStreamServerResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetRawImageStreamServerInfo(::grpc::ServerContext* context, ::google::protobuf::Empty* request, ::grpc::ServerAsyncResponseWriter< ::hillab::v4::ImageStreamServerResponse>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(11, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithAsyncMethod_GetProfiledImageStreamServerInfo : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_GetProfiledImageStreamServerInfo() {
      ::grpc::Service::MarkMethodAsync(12);
    }
    ~WithAsyncMethod_GetProfiledImageStreamServerInfo() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetProfiledImageStreamServerInfo(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::ImageStreamServerResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetProfiledImageStreamServerInfo(::grpc::ServerContext* context, ::google::protobuf::Empty* request, ::grpc::ServerAsyncResponseWriter< ::hillab::v4::ImageStreamServerResponse>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(12, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithAsyncMethod_SetRawImageStreamServer : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_SetRawImageStreamServer() {
      ::grpc::Service::MarkMethodAsync(13);
    }
    ~WithAsyncMethod_SetRawImageStreamServer() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status SetRawImageStreamServer(::grpc::ServerContext* /*context*/, const ::hillab::v4::ImageStreamServerRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestSetRawImageStreamServer(::grpc::ServerContext* context, ::hillab::v4::ImageStreamServerRequest* request, ::grpc::ServerAsyncResponseWriter< ::google::protobuf::Empty>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(13, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithAsyncMethod_SetProfiledImageStreamServer : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_SetProfiledImageStreamServer() {
      ::grpc::Service::MarkMethodAsync(14);
    }
    ~WithAsyncMethod_SetProfiledImageStreamServer() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status SetProfiledImageStreamServer(::grpc::ServerContext* /*context*/, const ::hillab::v4::ImageStreamServerRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestSetProfiledImageStreamServer(::grpc::ServerContext* context, ::hillab::v4::ImageStreamServerRequest* request, ::grpc::ServerAsyncResponseWriter< ::google::protobuf::Empty>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(14, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithAsyncMethod_MonitorSystemLog : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_MonitorSystemLog() {
      ::grpc::Service::MarkMethodAsync(15);
    }
    ~WithAsyncMethod_MonitorSystemLog() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status MonitorSystemLog(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::grpc::ServerWriter< ::hillab::v4::SystemLogStream>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestMonitorSystemLog(::grpc::ServerContext* context, ::google::protobuf::Empty* request, ::grpc::ServerAsyncWriter< ::hillab::v4::SystemLogStream>* writer, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncServerStreaming(15, context, request, writer, new_call_cq, notification_cq, tag);
    }
  };
  typedef WithAsyncMethod_GetAppInfo<WithAsyncMethod_GetSettingList<WithAsyncMethod_GetCurrentSetting<WithAsyncMethod_LoadSetting<WithAsyncMethod_SaveSetting<WithAsyncMethod_AddSetting<WithAsyncMethod_RemoveSetting<WithAsyncMethod_GetDeviceList<WithAsyncMethod_ConnectLastDevice<WithAsyncMethod_ConnectDevice<WithAsyncMethod_DisconnectDevice<WithAsyncMethod_GetRawImageStreamServerInfo<WithAsyncMethod_GetProfiledImageStreamServerInfo<WithAsyncMethod_SetRawImageStreamServer<WithAsyncMethod_SetProfiledImageStreamServer<WithAsyncMethod_MonitorSystemLog<Service > > > > > > > > > > > > > > > > AsyncService;
  template <class BaseClass>
  class WithCallbackMethod_GetAppInfo : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_GetAppInfo() {
      ::grpc::Service::MarkMethodCallback(0,
          new ::grpc::internal::CallbackUnaryHandler< ::google::protobuf::Empty, ::hillab::v4::AppInfoResponse>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::AppInfoResponse* response) { return this->GetAppInfo(context, request, response); }));}
    void SetMessageAllocatorFor_GetAppInfo(
        ::grpc::MessageAllocator< ::google::protobuf::Empty, ::hillab::v4::AppInfoResponse>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(0);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::google::protobuf::Empty, ::hillab::v4::AppInfoResponse>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_GetAppInfo() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetAppInfo(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::AppInfoResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* GetAppInfo(
      ::grpc::CallbackServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::AppInfoResponse* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_GetSettingList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_GetSettingList() {
      ::grpc::Service::MarkMethodCallback(1,
          new ::grpc::internal::CallbackUnaryHandler< ::google::protobuf::Empty, ::hillab::v4::SettingListResponse>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::SettingListResponse* response) { return this->GetSettingList(context, request, response); }));}
    void SetMessageAllocatorFor_GetSettingList(
        ::grpc::MessageAllocator< ::google::protobuf::Empty, ::hillab::v4::SettingListResponse>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(1);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::google::protobuf::Empty, ::hillab::v4::SettingListResponse>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_GetSettingList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetSettingList(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::SettingListResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* GetSettingList(
      ::grpc::CallbackServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::SettingListResponse* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_GetCurrentSetting : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_GetCurrentSetting() {
      ::grpc::Service::MarkMethodCallback(2,
          new ::grpc::internal::CallbackUnaryHandler< ::google::protobuf::Empty, ::hillab::v4::SettingResponse>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::SettingResponse* response) { return this->GetCurrentSetting(context, request, response); }));}
    void SetMessageAllocatorFor_GetCurrentSetting(
        ::grpc::MessageAllocator< ::google::protobuf::Empty, ::hillab::v4::SettingResponse>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(2);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::google::protobuf::Empty, ::hillab::v4::SettingResponse>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_GetCurrentSetting() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetCurrentSetting(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::SettingResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* GetCurrentSetting(
      ::grpc::CallbackServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::SettingResponse* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_LoadSetting : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_LoadSetting() {
      ::grpc::Service::MarkMethodCallback(3,
          new ::grpc::internal::CallbackUnaryHandler< ::hillab::v4::SettingRequest, ::google::protobuf::Empty>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::hillab::v4::SettingRequest* request, ::google::protobuf::Empty* response) { return this->LoadSetting(context, request, response); }));}
    void SetMessageAllocatorFor_LoadSetting(
        ::grpc::MessageAllocator< ::hillab::v4::SettingRequest, ::google::protobuf::Empty>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(3);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::hillab::v4::SettingRequest, ::google::protobuf::Empty>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_LoadSetting() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status LoadSetting(::grpc::ServerContext* /*context*/, const ::hillab::v4::SettingRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* LoadSetting(
      ::grpc::CallbackServerContext* /*context*/, const ::hillab::v4::SettingRequest* /*request*/, ::google::protobuf::Empty* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_SaveSetting : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_SaveSetting() {
      ::grpc::Service::MarkMethodCallback(4,
          new ::grpc::internal::CallbackUnaryHandler< ::google::protobuf::Empty, ::google::protobuf::Empty>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::google::protobuf::Empty* request, ::google::protobuf::Empty* response) { return this->SaveSetting(context, request, response); }));}
    void SetMessageAllocatorFor_SaveSetting(
        ::grpc::MessageAllocator< ::google::protobuf::Empty, ::google::protobuf::Empty>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(4);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::google::protobuf::Empty, ::google::protobuf::Empty>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_SaveSetting() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status SaveSetting(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* SaveSetting(
      ::grpc::CallbackServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::google::protobuf::Empty* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_AddSetting : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_AddSetting() {
      ::grpc::Service::MarkMethodCallback(5,
          new ::grpc::internal::CallbackUnaryHandler< ::hillab::v4::SettingRequest, ::google::protobuf::Empty>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::hillab::v4::SettingRequest* request, ::google::protobuf::Empty* response) { return this->AddSetting(context, request, response); }));}
    void SetMessageAllocatorFor_AddSetting(
        ::grpc::MessageAllocator< ::hillab::v4::SettingRequest, ::google::protobuf::Empty>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(5);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::hillab::v4::SettingRequest, ::google::protobuf::Empty>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_AddSetting() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status AddSetting(::grpc::ServerContext* /*context*/, const ::hillab::v4::SettingRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* AddSetting(
      ::grpc::CallbackServerContext* /*context*/, const ::hillab::v4::SettingRequest* /*request*/, ::google::protobuf::Empty* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_RemoveSetting : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_RemoveSetting() {
      ::grpc::Service::MarkMethodCallback(6,
          new ::grpc::internal::CallbackUnaryHandler< ::hillab::v4::SettingRequest, ::google::protobuf::Empty>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::hillab::v4::SettingRequest* request, ::google::protobuf::Empty* response) { return this->RemoveSetting(context, request, response); }));}
    void SetMessageAllocatorFor_RemoveSetting(
        ::grpc::MessageAllocator< ::hillab::v4::SettingRequest, ::google::protobuf::Empty>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(6);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::hillab::v4::SettingRequest, ::google::protobuf::Empty>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_RemoveSetting() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status RemoveSetting(::grpc::ServerContext* /*context*/, const ::hillab::v4::SettingRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* RemoveSetting(
      ::grpc::CallbackServerContext* /*context*/, const ::hillab::v4::SettingRequest* /*request*/, ::google::protobuf::Empty* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_GetDeviceList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_GetDeviceList() {
      ::grpc::Service::MarkMethodCallback(7,
          new ::grpc::internal::CallbackUnaryHandler< ::google::protobuf::Empty, ::hillab::v4::DeviceInfoList>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::DeviceInfoList* response) { return this->GetDeviceList(context, request, response); }));}
    void SetMessageAllocatorFor_GetDeviceList(
        ::grpc::MessageAllocator< ::google::protobuf::Empty, ::hillab::v4::DeviceInfoList>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(7);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::google::protobuf::Empty, ::hillab::v4::DeviceInfoList>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_GetDeviceList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetDeviceList(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::DeviceInfoList* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* GetDeviceList(
      ::grpc::CallbackServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::DeviceInfoList* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_ConnectLastDevice : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_ConnectLastDevice() {
      ::grpc::Service::MarkMethodCallback(8,
          new ::grpc::internal::CallbackUnaryHandler< ::google::protobuf::Empty, ::google::protobuf::Empty>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::google::protobuf::Empty* request, ::google::protobuf::Empty* response) { return this->ConnectLastDevice(context, request, response); }));}
    void SetMessageAllocatorFor_ConnectLastDevice(
        ::grpc::MessageAllocator< ::google::protobuf::Empty, ::google::protobuf::Empty>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(8);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::google::protobuf::Empty, ::google::protobuf::Empty>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_ConnectLastDevice() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status ConnectLastDevice(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* ConnectLastDevice(
      ::grpc::CallbackServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::google::protobuf::Empty* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_ConnectDevice : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_ConnectDevice() {
      ::grpc::Service::MarkMethodCallback(9,
          new ::grpc::internal::CallbackUnaryHandler< ::hillab::v4::ConnectDeviceRequest, ::google::protobuf::Empty>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::hillab::v4::ConnectDeviceRequest* request, ::google::protobuf::Empty* response) { return this->ConnectDevice(context, request, response); }));}
    void SetMessageAllocatorFor_ConnectDevice(
        ::grpc::MessageAllocator< ::hillab::v4::ConnectDeviceRequest, ::google::protobuf::Empty>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(9);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::hillab::v4::ConnectDeviceRequest, ::google::protobuf::Empty>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_ConnectDevice() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status ConnectDevice(::grpc::ServerContext* /*context*/, const ::hillab::v4::ConnectDeviceRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* ConnectDevice(
      ::grpc::CallbackServerContext* /*context*/, const ::hillab::v4::ConnectDeviceRequest* /*request*/, ::google::protobuf::Empty* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_DisconnectDevice : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_DisconnectDevice() {
      ::grpc::Service::MarkMethodCallback(10,
          new ::grpc::internal::CallbackUnaryHandler< ::google::protobuf::Empty, ::google::protobuf::Empty>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::google::protobuf::Empty* request, ::google::protobuf::Empty* response) { return this->DisconnectDevice(context, request, response); }));}
    void SetMessageAllocatorFor_DisconnectDevice(
        ::grpc::MessageAllocator< ::google::protobuf::Empty, ::google::protobuf::Empty>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(10);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::google::protobuf::Empty, ::google::protobuf::Empty>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_DisconnectDevice() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status DisconnectDevice(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* DisconnectDevice(
      ::grpc::CallbackServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::google::protobuf::Empty* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_GetRawImageStreamServerInfo : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_GetRawImageStreamServerInfo() {
      ::grpc::Service::MarkMethodCallback(11,
          new ::grpc::internal::CallbackUnaryHandler< ::google::protobuf::Empty, ::hillab::v4::ImageStreamServerResponse>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::ImageStreamServerResponse* response) { return this->GetRawImageStreamServerInfo(context, request, response); }));}
    void SetMessageAllocatorFor_GetRawImageStreamServerInfo(
        ::grpc::MessageAllocator< ::google::protobuf::Empty, ::hillab::v4::ImageStreamServerResponse>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(11);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::google::protobuf::Empty, ::hillab::v4::ImageStreamServerResponse>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_GetRawImageStreamServerInfo() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetRawImageStreamServerInfo(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::ImageStreamServerResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* GetRawImageStreamServerInfo(
      ::grpc::CallbackServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::ImageStreamServerResponse* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_GetProfiledImageStreamServerInfo : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_GetProfiledImageStreamServerInfo() {
      ::grpc::Service::MarkMethodCallback(12,
          new ::grpc::internal::CallbackUnaryHandler< ::google::protobuf::Empty, ::hillab::v4::ImageStreamServerResponse>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::ImageStreamServerResponse* response) { return this->GetProfiledImageStreamServerInfo(context, request, response); }));}
    void SetMessageAllocatorFor_GetProfiledImageStreamServerInfo(
        ::grpc::MessageAllocator< ::google::protobuf::Empty, ::hillab::v4::ImageStreamServerResponse>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(12);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::google::protobuf::Empty, ::hillab::v4::ImageStreamServerResponse>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_GetProfiledImageStreamServerInfo() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetProfiledImageStreamServerInfo(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::ImageStreamServerResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* GetProfiledImageStreamServerInfo(
      ::grpc::CallbackServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::ImageStreamServerResponse* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_SetRawImageStreamServer : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_SetRawImageStreamServer() {
      ::grpc::Service::MarkMethodCallback(13,
          new ::grpc::internal::CallbackUnaryHandler< ::hillab::v4::ImageStreamServerRequest, ::google::protobuf::Empty>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::hillab::v4::ImageStreamServerRequest* request, ::google::protobuf::Empty* response) { return this->SetRawImageStreamServer(context, request, response); }));}
    void SetMessageAllocatorFor_SetRawImageStreamServer(
        ::grpc::MessageAllocator< ::hillab::v4::ImageStreamServerRequest, ::google::protobuf::Empty>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(13);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::hillab::v4::ImageStreamServerRequest, ::google::protobuf::Empty>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_SetRawImageStreamServer() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status SetRawImageStreamServer(::grpc::ServerContext* /*context*/, const ::hillab::v4::ImageStreamServerRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* SetRawImageStreamServer(
      ::grpc::CallbackServerContext* /*context*/, const ::hillab::v4::ImageStreamServerRequest* /*request*/, ::google::protobuf::Empty* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_SetProfiledImageStreamServer : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_SetProfiledImageStreamServer() {
      ::grpc::Service::MarkMethodCallback(14,
          new ::grpc::internal::CallbackUnaryHandler< ::hillab::v4::ImageStreamServerRequest, ::google::protobuf::Empty>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::hillab::v4::ImageStreamServerRequest* request, ::google::protobuf::Empty* response) { return this->SetProfiledImageStreamServer(context, request, response); }));}
    void SetMessageAllocatorFor_SetProfiledImageStreamServer(
        ::grpc::MessageAllocator< ::hillab::v4::ImageStreamServerRequest, ::google::protobuf::Empty>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(14);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::hillab::v4::ImageStreamServerRequest, ::google::protobuf::Empty>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_SetProfiledImageStreamServer() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status SetProfiledImageStreamServer(::grpc::ServerContext* /*context*/, const ::hillab::v4::ImageStreamServerRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* SetProfiledImageStreamServer(
      ::grpc::CallbackServerContext* /*context*/, const ::hillab::v4::ImageStreamServerRequest* /*request*/, ::google::protobuf::Empty* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_MonitorSystemLog : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_MonitorSystemLog() {
      ::grpc::Service::MarkMethodCallback(15,
          new ::grpc::internal::CallbackServerStreamingHandler< ::google::protobuf::Empty, ::hillab::v4::SystemLogStream>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::google::protobuf::Empty* request) { return this->MonitorSystemLog(context, request); }));
    }
    ~WithCallbackMethod_MonitorSystemLog() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status MonitorSystemLog(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::grpc::ServerWriter< ::hillab::v4::SystemLogStream>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerWriteReactor< ::hillab::v4::SystemLogStream>* MonitorSystemLog(
      ::grpc::CallbackServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/)  { return nullptr; }
  };
  typedef WithCallbackMethod_GetAppInfo<WithCallbackMethod_GetSettingList<WithCallbackMethod_GetCurrentSetting<WithCallbackMethod_LoadSetting<WithCallbackMethod_SaveSetting<WithCallbackMethod_AddSetting<WithCallbackMethod_RemoveSetting<WithCallbackMethod_GetDeviceList<WithCallbackMethod_ConnectLastDevice<WithCallbackMethod_ConnectDevice<WithCallbackMethod_DisconnectDevice<WithCallbackMethod_GetRawImageStreamServerInfo<WithCallbackMethod_GetProfiledImageStreamServerInfo<WithCallbackMethod_SetRawImageStreamServer<WithCallbackMethod_SetProfiledImageStreamServer<WithCallbackMethod_MonitorSystemLog<Service > > > > > > > > > > > > > > > > CallbackService;
  typedef CallbackService ExperimentalCallbackService;
  template <class BaseClass>
  class WithGenericMethod_GetAppInfo : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_GetAppInfo() {
      ::grpc::Service::MarkMethodGeneric(0);
    }
    ~WithGenericMethod_GetAppInfo() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetAppInfo(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::AppInfoResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_GetSettingList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_GetSettingList() {
      ::grpc::Service::MarkMethodGeneric(1);
    }
    ~WithGenericMethod_GetSettingList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetSettingList(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::SettingListResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_GetCurrentSetting : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_GetCurrentSetting() {
      ::grpc::Service::MarkMethodGeneric(2);
    }
    ~WithGenericMethod_GetCurrentSetting() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetCurrentSetting(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::SettingResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_LoadSetting : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_LoadSetting() {
      ::grpc::Service::MarkMethodGeneric(3);
    }
    ~WithGenericMethod_LoadSetting() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status LoadSetting(::grpc::ServerContext* /*context*/, const ::hillab::v4::SettingRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_SaveSetting : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_SaveSetting() {
      ::grpc::Service::MarkMethodGeneric(4);
    }
    ~WithGenericMethod_SaveSetting() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status SaveSetting(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_AddSetting : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_AddSetting() {
      ::grpc::Service::MarkMethodGeneric(5);
    }
    ~WithGenericMethod_AddSetting() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status AddSetting(::grpc::ServerContext* /*context*/, const ::hillab::v4::SettingRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_RemoveSetting : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_RemoveSetting() {
      ::grpc::Service::MarkMethodGeneric(6);
    }
    ~WithGenericMethod_RemoveSetting() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status RemoveSetting(::grpc::ServerContext* /*context*/, const ::hillab::v4::SettingRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_GetDeviceList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_GetDeviceList() {
      ::grpc::Service::MarkMethodGeneric(7);
    }
    ~WithGenericMethod_GetDeviceList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetDeviceList(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::DeviceInfoList* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_ConnectLastDevice : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_ConnectLastDevice() {
      ::grpc::Service::MarkMethodGeneric(8);
    }
    ~WithGenericMethod_ConnectLastDevice() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status ConnectLastDevice(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_ConnectDevice : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_ConnectDevice() {
      ::grpc::Service::MarkMethodGeneric(9);
    }
    ~WithGenericMethod_ConnectDevice() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status ConnectDevice(::grpc::ServerContext* /*context*/, const ::hillab::v4::ConnectDeviceRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_DisconnectDevice : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_DisconnectDevice() {
      ::grpc::Service::MarkMethodGeneric(10);
    }
    ~WithGenericMethod_DisconnectDevice() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status DisconnectDevice(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_GetRawImageStreamServerInfo : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_GetRawImageStreamServerInfo() {
      ::grpc::Service::MarkMethodGeneric(11);
    }
    ~WithGenericMethod_GetRawImageStreamServerInfo() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetRawImageStreamServerInfo(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::ImageStreamServerResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_GetProfiledImageStreamServerInfo : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_GetProfiledImageStreamServerInfo() {
      ::grpc::Service::MarkMethodGeneric(12);
    }
    ~WithGenericMethod_GetProfiledImageStreamServerInfo() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetProfiledImageStreamServerInfo(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::ImageStreamServerResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_SetRawImageStreamServer : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_SetRawImageStreamServer() {
      ::grpc::Service::MarkMethodGeneric(13);
    }
    ~WithGenericMethod_SetRawImageStreamServer() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status SetRawImageStreamServer(::grpc::ServerContext* /*context*/, const ::hillab::v4::ImageStreamServerRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_SetProfiledImageStreamServer : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_SetProfiledImageStreamServer() {
      ::grpc::Service::MarkMethodGeneric(14);
    }
    ~WithGenericMethod_SetProfiledImageStreamServer() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status SetProfiledImageStreamServer(::grpc::ServerContext* /*context*/, const ::hillab::v4::ImageStreamServerRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_MonitorSystemLog : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_MonitorSystemLog() {
      ::grpc::Service::MarkMethodGeneric(15);
    }
    ~WithGenericMethod_MonitorSystemLog() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status MonitorSystemLog(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::grpc::ServerWriter< ::hillab::v4::SystemLogStream>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithRawMethod_GetAppInfo : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_GetAppInfo() {
      ::grpc::Service::MarkMethodRaw(0);
    }
    ~WithRawMethod_GetAppInfo() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetAppInfo(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::AppInfoResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetAppInfo(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(0, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithRawMethod_GetSettingList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_GetSettingList() {
      ::grpc::Service::MarkMethodRaw(1);
    }
    ~WithRawMethod_GetSettingList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetSettingList(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::SettingListResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetSettingList(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(1, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithRawMethod_GetCurrentSetting : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_GetCurrentSetting() {
      ::grpc::Service::MarkMethodRaw(2);
    }
    ~WithRawMethod_GetCurrentSetting() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetCurrentSetting(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::SettingResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetCurrentSetting(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(2, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithRawMethod_LoadSetting : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_LoadSetting() {
      ::grpc::Service::MarkMethodRaw(3);
    }
    ~WithRawMethod_LoadSetting() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status LoadSetting(::grpc::ServerContext* /*context*/, const ::hillab::v4::SettingRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestLoadSetting(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(3, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithRawMethod_SaveSetting : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_SaveSetting() {
      ::grpc::Service::MarkMethodRaw(4);
    }
    ~WithRawMethod_SaveSetting() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status SaveSetting(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestSaveSetting(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(4, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithRawMethod_AddSetting : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_AddSetting() {
      ::grpc::Service::MarkMethodRaw(5);
    }
    ~WithRawMethod_AddSetting() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status AddSetting(::grpc::ServerContext* /*context*/, const ::hillab::v4::SettingRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestAddSetting(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(5, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithRawMethod_RemoveSetting : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_RemoveSetting() {
      ::grpc::Service::MarkMethodRaw(6);
    }
    ~WithRawMethod_RemoveSetting() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status RemoveSetting(::grpc::ServerContext* /*context*/, const ::hillab::v4::SettingRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestRemoveSetting(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(6, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithRawMethod_GetDeviceList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_GetDeviceList() {
      ::grpc::Service::MarkMethodRaw(7);
    }
    ~WithRawMethod_GetDeviceList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetDeviceList(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::DeviceInfoList* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetDeviceList(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(7, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithRawMethod_ConnectLastDevice : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_ConnectLastDevice() {
      ::grpc::Service::MarkMethodRaw(8);
    }
    ~WithRawMethod_ConnectLastDevice() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status ConnectLastDevice(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestConnectLastDevice(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(8, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithRawMethod_ConnectDevice : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_ConnectDevice() {
      ::grpc::Service::MarkMethodRaw(9);
    }
    ~WithRawMethod_ConnectDevice() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status ConnectDevice(::grpc::ServerContext* /*context*/, const ::hillab::v4::ConnectDeviceRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestConnectDevice(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(9, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithRawMethod_DisconnectDevice : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_DisconnectDevice() {
      ::grpc::Service::MarkMethodRaw(10);
    }
    ~WithRawMethod_DisconnectDevice() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status DisconnectDevice(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestDisconnectDevice(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(10, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithRawMethod_GetRawImageStreamServerInfo : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_GetRawImageStreamServerInfo() {
      ::grpc::Service::MarkMethodRaw(11);
    }
    ~WithRawMethod_GetRawImageStreamServerInfo() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetRawImageStreamServerInfo(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::ImageStreamServerResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetRawImageStreamServerInfo(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(11, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithRawMethod_GetProfiledImageStreamServerInfo : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_GetProfiledImageStreamServerInfo() {
      ::grpc::Service::MarkMethodRaw(12);
    }
    ~WithRawMethod_GetProfiledImageStreamServerInfo() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetProfiledImageStreamServerInfo(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::ImageStreamServerResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetProfiledImageStreamServerInfo(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(12, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithRawMethod_SetRawImageStreamServer : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_SetRawImageStreamServer() {
      ::grpc::Service::MarkMethodRaw(13);
    }
    ~WithRawMethod_SetRawImageStreamServer() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status SetRawImageStreamServer(::grpc::ServerContext* /*context*/, const ::hillab::v4::ImageStreamServerRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestSetRawImageStreamServer(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(13, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithRawMethod_SetProfiledImageStreamServer : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_SetProfiledImageStreamServer() {
      ::grpc::Service::MarkMethodRaw(14);
    }
    ~WithRawMethod_SetProfiledImageStreamServer() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status SetProfiledImageStreamServer(::grpc::ServerContext* /*context*/, const ::hillab::v4::ImageStreamServerRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestSetProfiledImageStreamServer(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(14, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithRawMethod_MonitorSystemLog : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_MonitorSystemLog() {
      ::grpc::Service::MarkMethodRaw(15);
    }
    ~WithRawMethod_MonitorSystemLog() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status MonitorSystemLog(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::grpc::ServerWriter< ::hillab::v4::SystemLogStream>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestMonitorSystemLog(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncWriter< ::grpc::ByteBuffer>* writer, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncServerStreaming(15, context, request, writer, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_GetAppInfo : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_GetAppInfo() {
      ::grpc::Service::MarkMethodRawCallback(0,
          new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->GetAppInfo(context, request, response); }));
    }
    ~WithRawCallbackMethod_GetAppInfo() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetAppInfo(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::AppInfoResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* GetAppInfo(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_GetSettingList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_GetSettingList() {
      ::grpc::Service::MarkMethodRawCallback(1,
          new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->GetSettingList(context, request, response); }));
    }
    ~WithRawCallbackMethod_GetSettingList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetSettingList(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::SettingListResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* GetSettingList(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_GetCurrentSetting : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_GetCurrentSetting() {
      ::grpc::Service::MarkMethodRawCallback(2,
          new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->GetCurrentSetting(context, request, response); }));
    }
    ~WithRawCallbackMethod_GetCurrentSetting() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetCurrentSetting(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::SettingResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* GetCurrentSetting(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_LoadSetting : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_LoadSetting() {
      ::grpc::Service::MarkMethodRawCallback(3,
          new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->LoadSetting(context, request, response); }));
    }
    ~WithRawCallbackMethod_LoadSetting() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status LoadSetting(::grpc::ServerContext* /*context*/, const ::hillab::v4::SettingRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* LoadSetting(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_SaveSetting : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_SaveSetting() {
      ::grpc::Service::MarkMethodRawCallback(4,
          new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->SaveSetting(context, request, response); }));
    }
    ~WithRawCallbackMethod_SaveSetting() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status SaveSetting(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* SaveSetting(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_AddSetting : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_AddSetting() {
      ::grpc::Service::MarkMethodRawCallback(5,
          new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->AddSetting(context, request, response); }));
    }
    ~WithRawCallbackMethod_AddSetting() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status AddSetting(::grpc::ServerContext* /*context*/, const ::hillab::v4::SettingRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* AddSetting(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_RemoveSetting : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_RemoveSetting() {
      ::grpc::Service::MarkMethodRawCallback(6,
          new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->RemoveSetting(context, request, response); }));
    }
    ~WithRawCallbackMethod_RemoveSetting() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status RemoveSetting(::grpc::ServerContext* /*context*/, const ::hillab::v4::SettingRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* RemoveSetting(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_GetDeviceList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_GetDeviceList() {
      ::grpc::Service::MarkMethodRawCallback(7,
          new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->GetDeviceList(context, request, response); }));
    }
    ~WithRawCallbackMethod_GetDeviceList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetDeviceList(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::DeviceInfoList* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* GetDeviceList(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_ConnectLastDevice : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_ConnectLastDevice() {
      ::grpc::Service::MarkMethodRawCallback(8,
          new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->ConnectLastDevice(context, request, response); }));
    }
    ~WithRawCallbackMethod_ConnectLastDevice() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status ConnectLastDevice(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* ConnectLastDevice(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_ConnectDevice : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_ConnectDevice() {
      ::grpc::Service::MarkMethodRawCallback(9,
          new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->ConnectDevice(context, request, response); }));
    }
    ~WithRawCallbackMethod_ConnectDevice() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status ConnectDevice(::grpc::ServerContext* /*context*/, const ::hillab::v4::ConnectDeviceRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* ConnectDevice(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_DisconnectDevice : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_DisconnectDevice() {
      ::grpc::Service::MarkMethodRawCallback(10,
          new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->DisconnectDevice(context, request, response); }));
    }
    ~WithRawCallbackMethod_DisconnectDevice() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status DisconnectDevice(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* DisconnectDevice(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_GetRawImageStreamServerInfo : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_GetRawImageStreamServerInfo() {
      ::grpc::Service::MarkMethodRawCallback(11,
          new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->GetRawImageStreamServerInfo(context, request, response); }));
    }
    ~WithRawCallbackMethod_GetRawImageStreamServerInfo() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetRawImageStreamServerInfo(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::ImageStreamServerResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* GetRawImageStreamServerInfo(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_GetProfiledImageStreamServerInfo : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_GetProfiledImageStreamServerInfo() {
      ::grpc::Service::MarkMethodRawCallback(12,
          new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->GetProfiledImageStreamServerInfo(context, request, response); }));
    }
    ~WithRawCallbackMethod_GetProfiledImageStreamServerInfo() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetProfiledImageStreamServerInfo(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::ImageStreamServerResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* GetProfiledImageStreamServerInfo(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_SetRawImageStreamServer : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_SetRawImageStreamServer() {
      ::grpc::Service::MarkMethodRawCallback(13,
          new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->SetRawImageStreamServer(context, request, response); }));
    }
    ~WithRawCallbackMethod_SetRawImageStreamServer() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status SetRawImageStreamServer(::grpc::ServerContext* /*context*/, const ::hillab::v4::ImageStreamServerRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* SetRawImageStreamServer(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_SetProfiledImageStreamServer : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_SetProfiledImageStreamServer() {
      ::grpc::Service::MarkMethodRawCallback(14,
          new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->SetProfiledImageStreamServer(context, request, response); }));
    }
    ~WithRawCallbackMethod_SetProfiledImageStreamServer() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status SetProfiledImageStreamServer(::grpc::ServerContext* /*context*/, const ::hillab::v4::ImageStreamServerRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* SetProfiledImageStreamServer(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_MonitorSystemLog : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_MonitorSystemLog() {
      ::grpc::Service::MarkMethodRawCallback(15,
          new ::grpc::internal::CallbackServerStreamingHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
            [this](
                   ::grpc::CallbackServerContext* context, const::grpc::ByteBuffer* request) { return this->MonitorSystemLog(context, request); }));
    }
    ~WithRawCallbackMethod_MonitorSystemLog() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status MonitorSystemLog(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::grpc::ServerWriter< ::hillab::v4::SystemLogStream>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerWriteReactor< ::grpc::ByteBuffer>* MonitorSystemLog(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_GetAppInfo : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_GetAppInfo() {
      ::grpc::Service::MarkMethodStreamed(0,
        new ::grpc::internal::StreamedUnaryHandler<
          ::google::protobuf::Empty, ::hillab::v4::AppInfoResponse>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::google::protobuf::Empty, ::hillab::v4::AppInfoResponse>* streamer) {
                       return this->StreamedGetAppInfo(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_GetAppInfo() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status GetAppInfo(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::AppInfoResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedGetAppInfo(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::google::protobuf::Empty,::hillab::v4::AppInfoResponse>* server_unary_streamer) = 0;
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_GetSettingList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_GetSettingList() {
      ::grpc::Service::MarkMethodStreamed(1,
        new ::grpc::internal::StreamedUnaryHandler<
          ::google::protobuf::Empty, ::hillab::v4::SettingListResponse>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::google::protobuf::Empty, ::hillab::v4::SettingListResponse>* streamer) {
                       return this->StreamedGetSettingList(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_GetSettingList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status GetSettingList(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::SettingListResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedGetSettingList(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::google::protobuf::Empty,::hillab::v4::SettingListResponse>* server_unary_streamer) = 0;
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_GetCurrentSetting : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_GetCurrentSetting() {
      ::grpc::Service::MarkMethodStreamed(2,
        new ::grpc::internal::StreamedUnaryHandler<
          ::google::protobuf::Empty, ::hillab::v4::SettingResponse>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::google::protobuf::Empty, ::hillab::v4::SettingResponse>* streamer) {
                       return this->StreamedGetCurrentSetting(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_GetCurrentSetting() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status GetCurrentSetting(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::SettingResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedGetCurrentSetting(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::google::protobuf::Empty,::hillab::v4::SettingResponse>* server_unary_streamer) = 0;
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_LoadSetting : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_LoadSetting() {
      ::grpc::Service::MarkMethodStreamed(3,
        new ::grpc::internal::StreamedUnaryHandler<
          ::hillab::v4::SettingRequest, ::google::protobuf::Empty>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::hillab::v4::SettingRequest, ::google::protobuf::Empty>* streamer) {
                       return this->StreamedLoadSetting(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_LoadSetting() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status LoadSetting(::grpc::ServerContext* /*context*/, const ::hillab::v4::SettingRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedLoadSetting(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::hillab::v4::SettingRequest,::google::protobuf::Empty>* server_unary_streamer) = 0;
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_SaveSetting : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_SaveSetting() {
      ::grpc::Service::MarkMethodStreamed(4,
        new ::grpc::internal::StreamedUnaryHandler<
          ::google::protobuf::Empty, ::google::protobuf::Empty>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::google::protobuf::Empty, ::google::protobuf::Empty>* streamer) {
                       return this->StreamedSaveSetting(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_SaveSetting() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status SaveSetting(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedSaveSetting(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::google::protobuf::Empty,::google::protobuf::Empty>* server_unary_streamer) = 0;
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_AddSetting : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_AddSetting() {
      ::grpc::Service::MarkMethodStreamed(5,
        new ::grpc::internal::StreamedUnaryHandler<
          ::hillab::v4::SettingRequest, ::google::protobuf::Empty>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::hillab::v4::SettingRequest, ::google::protobuf::Empty>* streamer) {
                       return this->StreamedAddSetting(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_AddSetting() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status AddSetting(::grpc::ServerContext* /*context*/, const ::hillab::v4::SettingRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedAddSetting(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::hillab::v4::SettingRequest,::google::protobuf::Empty>* server_unary_streamer) = 0;
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_RemoveSetting : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_RemoveSetting() {
      ::grpc::Service::MarkMethodStreamed(6,
        new ::grpc::internal::StreamedUnaryHandler<
          ::hillab::v4::SettingRequest, ::google::protobuf::Empty>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::hillab::v4::SettingRequest, ::google::protobuf::Empty>* streamer) {
                       return this->StreamedRemoveSetting(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_RemoveSetting() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status RemoveSetting(::grpc::ServerContext* /*context*/, const ::hillab::v4::SettingRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedRemoveSetting(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::hillab::v4::SettingRequest,::google::protobuf::Empty>* server_unary_streamer) = 0;
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_GetDeviceList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_GetDeviceList() {
      ::grpc::Service::MarkMethodStreamed(7,
        new ::grpc::internal::StreamedUnaryHandler<
          ::google::protobuf::Empty, ::hillab::v4::DeviceInfoList>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::google::protobuf::Empty, ::hillab::v4::DeviceInfoList>* streamer) {
                       return this->StreamedGetDeviceList(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_GetDeviceList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status GetDeviceList(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::DeviceInfoList* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedGetDeviceList(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::google::protobuf::Empty,::hillab::v4::DeviceInfoList>* server_unary_streamer) = 0;
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_ConnectLastDevice : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_ConnectLastDevice() {
      ::grpc::Service::MarkMethodStreamed(8,
        new ::grpc::internal::StreamedUnaryHandler<
          ::google::protobuf::Empty, ::google::protobuf::Empty>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::google::protobuf::Empty, ::google::protobuf::Empty>* streamer) {
                       return this->StreamedConnectLastDevice(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_ConnectLastDevice() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status ConnectLastDevice(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedConnectLastDevice(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::google::protobuf::Empty,::google::protobuf::Empty>* server_unary_streamer) = 0;
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_ConnectDevice : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_ConnectDevice() {
      ::grpc::Service::MarkMethodStreamed(9,
        new ::grpc::internal::StreamedUnaryHandler<
          ::hillab::v4::ConnectDeviceRequest, ::google::protobuf::Empty>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::hillab::v4::ConnectDeviceRequest, ::google::protobuf::Empty>* streamer) {
                       return this->StreamedConnectDevice(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_ConnectDevice() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status ConnectDevice(::grpc::ServerContext* /*context*/, const ::hillab::v4::ConnectDeviceRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedConnectDevice(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::hillab::v4::ConnectDeviceRequest,::google::protobuf::Empty>* server_unary_streamer) = 0;
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_DisconnectDevice : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_DisconnectDevice() {
      ::grpc::Service::MarkMethodStreamed(10,
        new ::grpc::internal::StreamedUnaryHandler<
          ::google::protobuf::Empty, ::google::protobuf::Empty>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::google::protobuf::Empty, ::google::protobuf::Empty>* streamer) {
                       return this->StreamedDisconnectDevice(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_DisconnectDevice() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status DisconnectDevice(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedDisconnectDevice(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::google::protobuf::Empty,::google::protobuf::Empty>* server_unary_streamer) = 0;
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_GetRawImageStreamServerInfo : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_GetRawImageStreamServerInfo() {
      ::grpc::Service::MarkMethodStreamed(11,
        new ::grpc::internal::StreamedUnaryHandler<
          ::google::protobuf::Empty, ::hillab::v4::ImageStreamServerResponse>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::google::protobuf::Empty, ::hillab::v4::ImageStreamServerResponse>* streamer) {
                       return this->StreamedGetRawImageStreamServerInfo(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_GetRawImageStreamServerInfo() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status GetRawImageStreamServerInfo(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::ImageStreamServerResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedGetRawImageStreamServerInfo(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::google::protobuf::Empty,::hillab::v4::ImageStreamServerResponse>* server_unary_streamer) = 0;
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_GetProfiledImageStreamServerInfo : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_GetProfiledImageStreamServerInfo() {
      ::grpc::Service::MarkMethodStreamed(12,
        new ::grpc::internal::StreamedUnaryHandler<
          ::google::protobuf::Empty, ::hillab::v4::ImageStreamServerResponse>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::google::protobuf::Empty, ::hillab::v4::ImageStreamServerResponse>* streamer) {
                       return this->StreamedGetProfiledImageStreamServerInfo(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_GetProfiledImageStreamServerInfo() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status GetProfiledImageStreamServerInfo(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::ImageStreamServerResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedGetProfiledImageStreamServerInfo(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::google::protobuf::Empty,::hillab::v4::ImageStreamServerResponse>* server_unary_streamer) = 0;
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_SetRawImageStreamServer : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_SetRawImageStreamServer() {
      ::grpc::Service::MarkMethodStreamed(13,
        new ::grpc::internal::StreamedUnaryHandler<
          ::hillab::v4::ImageStreamServerRequest, ::google::protobuf::Empty>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::hillab::v4::ImageStreamServerRequest, ::google::protobuf::Empty>* streamer) {
                       return this->StreamedSetRawImageStreamServer(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_SetRawImageStreamServer() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status SetRawImageStreamServer(::grpc::ServerContext* /*context*/, const ::hillab::v4::ImageStreamServerRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedSetRawImageStreamServer(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::hillab::v4::ImageStreamServerRequest,::google::protobuf::Empty>* server_unary_streamer) = 0;
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_SetProfiledImageStreamServer : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_SetProfiledImageStreamServer() {
      ::grpc::Service::MarkMethodStreamed(14,
        new ::grpc::internal::StreamedUnaryHandler<
          ::hillab::v4::ImageStreamServerRequest, ::google::protobuf::Empty>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::hillab::v4::ImageStreamServerRequest, ::google::protobuf::Empty>* streamer) {
                       return this->StreamedSetProfiledImageStreamServer(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_SetProfiledImageStreamServer() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status SetProfiledImageStreamServer(::grpc::ServerContext* /*context*/, const ::hillab::v4::ImageStreamServerRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedSetProfiledImageStreamServer(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::hillab::v4::ImageStreamServerRequest,::google::protobuf::Empty>* server_unary_streamer) = 0;
  };
  typedef WithStreamedUnaryMethod_GetAppInfo<WithStreamedUnaryMethod_GetSettingList<WithStreamedUnaryMethod_GetCurrentSetting<WithStreamedUnaryMethod_LoadSetting<WithStreamedUnaryMethod_SaveSetting<WithStreamedUnaryMethod_AddSetting<WithStreamedUnaryMethod_RemoveSetting<WithStreamedUnaryMethod_GetDeviceList<WithStreamedUnaryMethod_ConnectLastDevice<WithStreamedUnaryMethod_ConnectDevice<WithStreamedUnaryMethod_DisconnectDevice<WithStreamedUnaryMethod_GetRawImageStreamServerInfo<WithStreamedUnaryMethod_GetProfiledImageStreamServerInfo<WithStreamedUnaryMethod_SetRawImageStreamServer<WithStreamedUnaryMethod_SetProfiledImageStreamServer<Service > > > > > > > > > > > > > > > StreamedUnaryService;
  template <class BaseClass>
  class WithSplitStreamingMethod_MonitorSystemLog : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithSplitStreamingMethod_MonitorSystemLog() {
      ::grpc::Service::MarkMethodStreamed(15,
        new ::grpc::internal::SplitServerStreamingHandler<
          ::google::protobuf::Empty, ::hillab::v4::SystemLogStream>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerSplitStreamer<
                     ::google::protobuf::Empty, ::hillab::v4::SystemLogStream>* streamer) {
                       return this->StreamedMonitorSystemLog(context,
                         streamer);
                  }));
    }
    ~WithSplitStreamingMethod_MonitorSystemLog() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status MonitorSystemLog(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::grpc::ServerWriter< ::hillab::v4::SystemLogStream>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with split streamed
    virtual ::grpc::Status StreamedMonitorSystemLog(::grpc::ServerContext* context, ::grpc::ServerSplitStreamer< ::google::protobuf::Empty,::hillab::v4::SystemLogStream>* server_split_streamer) = 0;
  };
  typedef WithSplitStreamingMethod_MonitorSystemLog<Service > SplitStreamedService;
  typedef WithStreamedUnaryMethod_GetAppInfo<WithStreamedUnaryMethod_GetSettingList<WithStreamedUnaryMethod_GetCurrentSetting<WithStreamedUnaryMethod_LoadSetting<WithStreamedUnaryMethod_SaveSetting<WithStreamedUnaryMethod_AddSetting<WithStreamedUnaryMethod_RemoveSetting<WithStreamedUnaryMethod_GetDeviceList<WithStreamedUnaryMethod_ConnectLastDevice<WithStreamedUnaryMethod_ConnectDevice<WithStreamedUnaryMethod_DisconnectDevice<WithStreamedUnaryMethod_GetRawImageStreamServerInfo<WithStreamedUnaryMethod_GetProfiledImageStreamServerInfo<WithStreamedUnaryMethod_SetRawImageStreamServer<WithStreamedUnaryMethod_SetProfiledImageStreamServer<WithSplitStreamingMethod_MonitorSystemLog<Service > > > > > > > > > > > > > > > > StreamedService;
};

}  // namespace v4
}  // namespace hillab


#endif  // GRPC_hillab_5fbeam_5fprofiler_2eproto__INCLUDED
