// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: source_address_token.proto

#include "source_address_token.pb.h"

#include <algorithm>

#include <google/protobuf/stubs/common.h>
#include <google/protobuf/io/coded_stream.h>
#include <google/protobuf/extension_set.h>
#include <google/protobuf/wire_format_lite.h>
#include <google/protobuf/io/zero_copy_stream_impl_lite.h>
// @@protoc_insertion_point(includes)
#include <google/protobuf/port_def.inc>
extern PROTOBUF_INTERNAL_EXPORT_cached_5fnetwork_5fparameters_2eproto ::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<0> scc_info_CachedNetworkParameters_cached_5fnetwork_5fparameters_2eproto;
extern PROTOBUF_INTERNAL_EXPORT_source_5faddress_5ftoken_2eproto ::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<1> scc_info_SourceAddressToken_source_5faddress_5ftoken_2eproto;
namespace quic {
class SourceAddressTokenDefaultTypeInternal {
 public:
  ::PROTOBUF_NAMESPACE_ID::internal::ExplicitlyConstructed<SourceAddressToken> _instance;
} _SourceAddressToken_default_instance_;
class SourceAddressTokensDefaultTypeInternal {
 public:
  ::PROTOBUF_NAMESPACE_ID::internal::ExplicitlyConstructed<SourceAddressTokens> _instance;
} _SourceAddressTokens_default_instance_;
}  // namespace quic
static void InitDefaultsscc_info_SourceAddressToken_source_5faddress_5ftoken_2eproto() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

  {
    void* ptr = &::quic::_SourceAddressToken_default_instance_;
    new (ptr) ::quic::SourceAddressToken();
    ::PROTOBUF_NAMESPACE_ID::internal::OnShutdownDestroyMessage(ptr);
  }
  ::quic::SourceAddressToken::InitAsDefaultInstance();
}

NET_EXPORT_PRIVATE ::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<1> scc_info_SourceAddressToken_source_5faddress_5ftoken_2eproto =
    {{ATOMIC_VAR_INIT(::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase::kUninitialized), 1, InitDefaultsscc_info_SourceAddressToken_source_5faddress_5ftoken_2eproto}, {
      &scc_info_CachedNetworkParameters_cached_5fnetwork_5fparameters_2eproto.base,}};

static void InitDefaultsscc_info_SourceAddressTokens_source_5faddress_5ftoken_2eproto() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

  {
    void* ptr = &::quic::_SourceAddressTokens_default_instance_;
    new (ptr) ::quic::SourceAddressTokens();
    ::PROTOBUF_NAMESPACE_ID::internal::OnShutdownDestroyMessage(ptr);
  }
  ::quic::SourceAddressTokens::InitAsDefaultInstance();
}

NET_EXPORT_PRIVATE ::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<1> scc_info_SourceAddressTokens_source_5faddress_5ftoken_2eproto =
    {{ATOMIC_VAR_INIT(::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase::kUninitialized), 1, InitDefaultsscc_info_SourceAddressTokens_source_5faddress_5ftoken_2eproto}, {
      &scc_info_SourceAddressToken_source_5faddress_5ftoken_2eproto.base,}};

namespace quic {

// ===================================================================

void SourceAddressToken::InitAsDefaultInstance() {
  ::quic::_SourceAddressToken_default_instance_._instance.get_mutable()->cached_network_parameters_ = const_cast< ::quic::CachedNetworkParameters*>(
      ::quic::CachedNetworkParameters::internal_default_instance());
}
class SourceAddressToken::_Internal {
 public:
  using HasBits = decltype(std::declval<SourceAddressToken>()._has_bits_);
  static void set_has_ip(HasBits* has_bits) {
    (*has_bits)[0] |= 1u;
  }
  static void set_has_timestamp(HasBits* has_bits) {
    (*has_bits)[0] |= 4u;
  }
  static const ::quic::CachedNetworkParameters& cached_network_parameters(const SourceAddressToken* msg);
  static void set_has_cached_network_parameters(HasBits* has_bits) {
    (*has_bits)[0] |= 2u;
  }
};

const ::quic::CachedNetworkParameters&
SourceAddressToken::_Internal::cached_network_parameters(const SourceAddressToken* msg) {
  return *msg->cached_network_parameters_;
}
void SourceAddressToken::clear_cached_network_parameters() {
  if (cached_network_parameters_ != nullptr) cached_network_parameters_->Clear();
  _has_bits_[0] &= ~0x00000002u;
}
SourceAddressToken::SourceAddressToken()
  : ::PROTOBUF_NAMESPACE_ID::MessageLite(), _internal_metadata_(nullptr) {
  SharedCtor();
  // @@protoc_insertion_point(constructor:quic.SourceAddressToken)
}
SourceAddressToken::SourceAddressToken(const SourceAddressToken& from)
  : ::PROTOBUF_NAMESPACE_ID::MessageLite(),
      _internal_metadata_(nullptr),
      _has_bits_(from._has_bits_) {
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  ip_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  if (from.has_ip()) {
    ip_.AssignWithDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), from.ip_);
  }
  if (from.has_cached_network_parameters()) {
    cached_network_parameters_ = new ::quic::CachedNetworkParameters(*from.cached_network_parameters_);
  } else {
    cached_network_parameters_ = nullptr;
  }
  timestamp_ = from.timestamp_;
  // @@protoc_insertion_point(copy_constructor:quic.SourceAddressToken)
}

void SourceAddressToken::SharedCtor() {
  ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&scc_info_SourceAddressToken_source_5faddress_5ftoken_2eproto.base);
  ip_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  ::memset(&cached_network_parameters_, 0, static_cast<size_t>(
      reinterpret_cast<char*>(&timestamp_) -
      reinterpret_cast<char*>(&cached_network_parameters_)) + sizeof(timestamp_));
}

SourceAddressToken::~SourceAddressToken() {
  // @@protoc_insertion_point(destructor:quic.SourceAddressToken)
  SharedDtor();
}

void SourceAddressToken::SharedDtor() {
  ip_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  if (this != internal_default_instance()) delete cached_network_parameters_;
}

void SourceAddressToken::SetCachedSize(int size) const {
  _cached_size_.Set(size);
}
const SourceAddressToken& SourceAddressToken::default_instance() {
  ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&::scc_info_SourceAddressToken_source_5faddress_5ftoken_2eproto.base);
  return *internal_default_instance();
}


void SourceAddressToken::Clear() {
// @@protoc_insertion_point(message_clear_start:quic.SourceAddressToken)
  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  cached_has_bits = _has_bits_[0];
  if (cached_has_bits & 0x00000003u) {
    if (cached_has_bits & 0x00000001u) {
      ip_.ClearNonDefaultToEmptyNoArena();
    }
    if (cached_has_bits & 0x00000002u) {
      GOOGLE_DCHECK(cached_network_parameters_ != nullptr);
      cached_network_parameters_->Clear();
    }
  }
  timestamp_ = PROTOBUF_LONGLONG(0);
  _has_bits_.Clear();
  _internal_metadata_.Clear();
}

#if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
const char* SourceAddressToken::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) {
#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  _Internal::HasBits has_bits{};
  while (!ctx->Done(&ptr)) {
    ::PROTOBUF_NAMESPACE_ID::uint32 tag;
    ptr = ::PROTOBUF_NAMESPACE_ID::internal::ReadTag(ptr, &tag);
    CHK_(ptr);
    switch (tag >> 3) {
      // required bytes ip = 1;
      case 1:
        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 10)) {
          ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParser(mutable_ip(), ptr, ctx);
          CHK_(ptr);
        } else goto handle_unusual;
        continue;
      // required int64 timestamp = 2;
      case 2:
        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 16)) {
          _Internal::set_has_timestamp(&has_bits);
          timestamp_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint(&ptr);
          CHK_(ptr);
        } else goto handle_unusual;
        continue;
      // optional .quic.CachedNetworkParameters cached_network_parameters = 3;
      case 3:
        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 26)) {
          ptr = ctx->ParseMessage(mutable_cached_network_parameters(), ptr);
          CHK_(ptr);
        } else goto handle_unusual;
        continue;
      default: {
      handle_unusual:
        if ((tag & 7) == 4 || tag == 0) {
          ctx->SetLastTag(tag);
          goto success;
        }
        ptr = UnknownFieldParse(tag, &_internal_metadata_, ptr, ctx);
        CHK_(ptr != nullptr);
        continue;
      }
    }  // switch
  }  // while
success:
  _has_bits_.Or(has_bits);
  return ptr;
failure:
  ptr = nullptr;
  goto success;
#undef CHK_
}
#else  // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
bool SourceAddressToken::MergePartialFromCodedStream(
    ::PROTOBUF_NAMESPACE_ID::io::CodedInputStream* input) {
#define DO_(EXPRESSION) if (!PROTOBUF_PREDICT_TRUE(EXPRESSION)) goto failure
  ::PROTOBUF_NAMESPACE_ID::uint32 tag;
  ::PROTOBUF_NAMESPACE_ID::internal::LiteUnknownFieldSetter unknown_fields_setter(
      &_internal_metadata_);
  ::PROTOBUF_NAMESPACE_ID::io::StringOutputStream unknown_fields_output(
      unknown_fields_setter.buffer());
  ::PROTOBUF_NAMESPACE_ID::io::CodedOutputStream unknown_fields_stream(
      &unknown_fields_output, false);
  // @@protoc_insertion_point(parse_start:quic.SourceAddressToken)
  for (;;) {
    ::std::pair<::PROTOBUF_NAMESPACE_ID::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
    tag = p.first;
    if (!p.second) goto handle_unusual;
    switch (::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::GetTagFieldNumber(tag)) {
      // required bytes ip = 1;
      case 1: {
        if (static_cast< ::PROTOBUF_NAMESPACE_ID::uint8>(tag) == (10 & 0xFF)) {
          DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::ReadBytes(
                input, this->mutable_ip()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // required int64 timestamp = 2;
      case 2: {
        if (static_cast< ::PROTOBUF_NAMESPACE_ID::uint8>(tag) == (16 & 0xFF)) {
          _Internal::set_has_timestamp(&_has_bits_);
          DO_((::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::ReadPrimitive<
                   ::PROTOBUF_NAMESPACE_ID::int64, ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::TYPE_INT64>(
                 input, &timestamp_)));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // optional .quic.CachedNetworkParameters cached_network_parameters = 3;
      case 3: {
        if (static_cast< ::PROTOBUF_NAMESPACE_ID::uint8>(tag) == (26 & 0xFF)) {
          DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::ReadMessage(
               input, mutable_cached_network_parameters()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      default: {
      handle_unusual:
        if (tag == 0) {
          goto success;
        }
        DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SkipField(
            input, tag, &unknown_fields_stream));
        break;
      }
    }
  }
success:
  // @@protoc_insertion_point(parse_success:quic.SourceAddressToken)
  return true;
failure:
  // @@protoc_insertion_point(parse_failure:quic.SourceAddressToken)
  return false;
#undef DO_
}
#endif  // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER

void SourceAddressToken::SerializeWithCachedSizes(
    ::PROTOBUF_NAMESPACE_ID::io::CodedOutputStream* output) const {
  // @@protoc_insertion_point(serialize_start:quic.SourceAddressToken)
  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  cached_has_bits = _has_bits_[0];
  // required bytes ip = 1;
  if (cached_has_bits & 0x00000001u) {
    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteBytesMaybeAliased(
      1, this->ip(), output);
  }

  // required int64 timestamp = 2;
  if (cached_has_bits & 0x00000004u) {
    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteInt64(2, this->timestamp(), output);
  }

  // optional .quic.CachedNetworkParameters cached_network_parameters = 3;
  if (cached_has_bits & 0x00000002u) {
    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteMessage(
      3, _Internal::cached_network_parameters(this), output);
  }

  output->WriteRaw(_internal_metadata_.unknown_fields().data(),
                   static_cast<int>(_internal_metadata_.unknown_fields().size()));
  // @@protoc_insertion_point(serialize_end:quic.SourceAddressToken)
}

size_t SourceAddressToken::RequiredFieldsByteSizeFallback() const {
// @@protoc_insertion_point(required_fields_byte_size_fallback_start:quic.SourceAddressToken)
  size_t total_size = 0;

  if (has_ip()) {
    // required bytes ip = 1;
    total_size += 1 +
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::BytesSize(
        this->ip());
  }

  if (has_timestamp()) {
    // required int64 timestamp = 2;
    total_size += 1 +
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::Int64Size(
        this->timestamp());
  }

  return total_size;
}
size_t SourceAddressToken::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:quic.SourceAddressToken)
  size_t total_size = 0;

  total_size += _internal_metadata_.unknown_fields().size();

  if (((_has_bits_[0] & 0x00000005) ^ 0x00000005) == 0) {  // All required fields are present.
    // required bytes ip = 1;
    total_size += 1 +
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::BytesSize(
        this->ip());

    // required int64 timestamp = 2;
    total_size += 1 +
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::Int64Size(
        this->timestamp());

  } else {
    total_size += RequiredFieldsByteSizeFallback();
  }
  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  // optional .quic.CachedNetworkParameters cached_network_parameters = 3;
  cached_has_bits = _has_bits_[0];
  if (cached_has_bits & 0x00000002u) {
    total_size += 1 +
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
        *cached_network_parameters_);
  }

  int cached_size = ::PROTOBUF_NAMESPACE_ID::internal::ToCachedSize(total_size);
  SetCachedSize(cached_size);
  return total_size;
}

void SourceAddressToken::CheckTypeAndMergeFrom(
    const ::PROTOBUF_NAMESPACE_ID::MessageLite& from) {
  MergeFrom(*::PROTOBUF_NAMESPACE_ID::internal::DownCast<const SourceAddressToken*>(
      &from));
}

void SourceAddressToken::MergeFrom(const SourceAddressToken& from) {
// @@protoc_insertion_point(class_specific_merge_from_start:quic.SourceAddressToken)
  GOOGLE_DCHECK_NE(&from, this);
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  cached_has_bits = from._has_bits_[0];
  if (cached_has_bits & 0x00000007u) {
    if (cached_has_bits & 0x00000001u) {
      _has_bits_[0] |= 0x00000001u;
      ip_.AssignWithDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), from.ip_);
    }
    if (cached_has_bits & 0x00000002u) {
      mutable_cached_network_parameters()->::quic::CachedNetworkParameters::MergeFrom(from.cached_network_parameters());
    }
    if (cached_has_bits & 0x00000004u) {
      timestamp_ = from.timestamp_;
    }
    _has_bits_[0] |= cached_has_bits;
  }
}

void SourceAddressToken::CopyFrom(const SourceAddressToken& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:quic.SourceAddressToken)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool SourceAddressToken::IsInitialized() const {
  if ((_has_bits_[0] & 0x00000005) != 0x00000005) return false;
  return true;
}

void SourceAddressToken::InternalSwap(SourceAddressToken* other) {
  using std::swap;
  _internal_metadata_.Swap(&other->_internal_metadata_);
  swap(_has_bits_[0], other->_has_bits_[0]);
  ip_.Swap(&other->ip_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
    GetArenaNoVirtual());
  swap(cached_network_parameters_, other->cached_network_parameters_);
  swap(timestamp_, other->timestamp_);
}

std::string SourceAddressToken::GetTypeName() const {
  return "quic.SourceAddressToken";
}


// ===================================================================

void SourceAddressTokens::InitAsDefaultInstance() {
}
class SourceAddressTokens::_Internal {
 public:
  using HasBits = decltype(std::declval<SourceAddressTokens>()._has_bits_);
};

SourceAddressTokens::SourceAddressTokens()
  : ::PROTOBUF_NAMESPACE_ID::MessageLite(), _internal_metadata_(nullptr) {
  SharedCtor();
  // @@protoc_insertion_point(constructor:quic.SourceAddressTokens)
}
SourceAddressTokens::SourceAddressTokens(const SourceAddressTokens& from)
  : ::PROTOBUF_NAMESPACE_ID::MessageLite(),
      _internal_metadata_(nullptr),
      _has_bits_(from._has_bits_),
      tokens_(from.tokens_) {
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  // @@protoc_insertion_point(copy_constructor:quic.SourceAddressTokens)
}

void SourceAddressTokens::SharedCtor() {
  ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&scc_info_SourceAddressTokens_source_5faddress_5ftoken_2eproto.base);
}

SourceAddressTokens::~SourceAddressTokens() {
  // @@protoc_insertion_point(destructor:quic.SourceAddressTokens)
  SharedDtor();
}

void SourceAddressTokens::SharedDtor() {
}

void SourceAddressTokens::SetCachedSize(int size) const {
  _cached_size_.Set(size);
}
const SourceAddressTokens& SourceAddressTokens::default_instance() {
  ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&::scc_info_SourceAddressTokens_source_5faddress_5ftoken_2eproto.base);
  return *internal_default_instance();
}


void SourceAddressTokens::Clear() {
// @@protoc_insertion_point(message_clear_start:quic.SourceAddressTokens)
  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  tokens_.Clear();
  _has_bits_.Clear();
  _internal_metadata_.Clear();
}

#if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
const char* SourceAddressTokens::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) {
#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  while (!ctx->Done(&ptr)) {
    ::PROTOBUF_NAMESPACE_ID::uint32 tag;
    ptr = ::PROTOBUF_NAMESPACE_ID::internal::ReadTag(ptr, &tag);
    CHK_(ptr);
    switch (tag >> 3) {
      // repeated .quic.SourceAddressToken tokens = 4;
      case 4:
        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 34)) {
          ptr -= 1;
          do {
            ptr += 1;
            ptr = ctx->ParseMessage(add_tokens(), ptr);
            CHK_(ptr);
            if (!ctx->DataAvailable(ptr)) break;
          } while (::PROTOBUF_NAMESPACE_ID::internal::UnalignedLoad<::PROTOBUF_NAMESPACE_ID::uint8>(ptr) == 34);
        } else goto handle_unusual;
        continue;
      default: {
      handle_unusual:
        if ((tag & 7) == 4 || tag == 0) {
          ctx->SetLastTag(tag);
          goto success;
        }
        ptr = UnknownFieldParse(tag, &_internal_metadata_, ptr, ctx);
        CHK_(ptr != nullptr);
        continue;
      }
    }  // switch
  }  // while
success:
  return ptr;
failure:
  ptr = nullptr;
  goto success;
#undef CHK_
}
#else  // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
bool SourceAddressTokens::MergePartialFromCodedStream(
    ::PROTOBUF_NAMESPACE_ID::io::CodedInputStream* input) {
#define DO_(EXPRESSION) if (!PROTOBUF_PREDICT_TRUE(EXPRESSION)) goto failure
  ::PROTOBUF_NAMESPACE_ID::uint32 tag;
  ::PROTOBUF_NAMESPACE_ID::internal::LiteUnknownFieldSetter unknown_fields_setter(
      &_internal_metadata_);
  ::PROTOBUF_NAMESPACE_ID::io::StringOutputStream unknown_fields_output(
      unknown_fields_setter.buffer());
  ::PROTOBUF_NAMESPACE_ID::io::CodedOutputStream unknown_fields_stream(
      &unknown_fields_output, false);
  // @@protoc_insertion_point(parse_start:quic.SourceAddressTokens)
  for (;;) {
    ::std::pair<::PROTOBUF_NAMESPACE_ID::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
    tag = p.first;
    if (!p.second) goto handle_unusual;
    switch (::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::GetTagFieldNumber(tag)) {
      // repeated .quic.SourceAddressToken tokens = 4;
      case 4: {
        if (static_cast< ::PROTOBUF_NAMESPACE_ID::uint8>(tag) == (34 & 0xFF)) {
          DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::ReadMessage(
                input, add_tokens()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      default: {
      handle_unusual:
        if (tag == 0) {
          goto success;
        }
        DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SkipField(
            input, tag, &unknown_fields_stream));
        break;
      }
    }
  }
success:
  // @@protoc_insertion_point(parse_success:quic.SourceAddressTokens)
  return true;
failure:
  // @@protoc_insertion_point(parse_failure:quic.SourceAddressTokens)
  return false;
#undef DO_
}
#endif  // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER

void SourceAddressTokens::SerializeWithCachedSizes(
    ::PROTOBUF_NAMESPACE_ID::io::CodedOutputStream* output) const {
  // @@protoc_insertion_point(serialize_start:quic.SourceAddressTokens)
  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // repeated .quic.SourceAddressToken tokens = 4;
  for (unsigned int i = 0,
      n = static_cast<unsigned int>(this->tokens_size()); i < n; i++) {
    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteMessage(
      4,
      this->tokens(static_cast<int>(i)),
      output);
  }

  output->WriteRaw(_internal_metadata_.unknown_fields().data(),
                   static_cast<int>(_internal_metadata_.unknown_fields().size()));
  // @@protoc_insertion_point(serialize_end:quic.SourceAddressTokens)
}

size_t SourceAddressTokens::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:quic.SourceAddressTokens)
  size_t total_size = 0;

  total_size += _internal_metadata_.unknown_fields().size();

  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  // repeated .quic.SourceAddressToken tokens = 4;
  {
    unsigned int count = static_cast<unsigned int>(this->tokens_size());
    total_size += 1UL * count;
    for (unsigned int i = 0; i < count; i++) {
      total_size +=
        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
          this->tokens(static_cast<int>(i)));
    }
  }

  int cached_size = ::PROTOBUF_NAMESPACE_ID::internal::ToCachedSize(total_size);
  SetCachedSize(cached_size);
  return total_size;
}

void SourceAddressTokens::CheckTypeAndMergeFrom(
    const ::PROTOBUF_NAMESPACE_ID::MessageLite& from) {
  MergeFrom(*::PROTOBUF_NAMESPACE_ID::internal::DownCast<const SourceAddressTokens*>(
      &from));
}

void SourceAddressTokens::MergeFrom(const SourceAddressTokens& from) {
// @@protoc_insertion_point(class_specific_merge_from_start:quic.SourceAddressTokens)
  GOOGLE_DCHECK_NE(&from, this);
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  tokens_.MergeFrom(from.tokens_);
}

void SourceAddressTokens::CopyFrom(const SourceAddressTokens& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:quic.SourceAddressTokens)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool SourceAddressTokens::IsInitialized() const {
  if (!::PROTOBUF_NAMESPACE_ID::internal::AllAreInitialized(this->tokens())) return false;
  return true;
}

void SourceAddressTokens::InternalSwap(SourceAddressTokens* other) {
  using std::swap;
  _internal_metadata_.Swap(&other->_internal_metadata_);
  swap(_has_bits_[0], other->_has_bits_[0]);
  CastToBase(&tokens_)->InternalSwap(CastToBase(&other->tokens_));
}

std::string SourceAddressTokens::GetTypeName() const {
  return "quic.SourceAddressTokens";
}


// @@protoc_insertion_point(namespace_scope)
}  // namespace quic
PROTOBUF_NAMESPACE_OPEN
template<> PROTOBUF_NOINLINE ::quic::SourceAddressToken* Arena::CreateMaybeMessage< ::quic::SourceAddressToken >(Arena* arena) {
  return Arena::CreateInternal< ::quic::SourceAddressToken >(arena);
}
template<> PROTOBUF_NOINLINE ::quic::SourceAddressTokens* Arena::CreateMaybeMessage< ::quic::SourceAddressTokens >(Arena* arena) {
  return Arena::CreateInternal< ::quic::SourceAddressTokens >(arena);
}
PROTOBUF_NAMESPACE_CLOSE

// @@protoc_insertion_point(global_scope)
#include <google/protobuf/port_undef.inc>
