diff --git a/VERSION b/VERSION
index 658aed9..9084fa2 100644
--- a/VERSION
+++ b/VERSION
@@ -1,2 +1 @@
-1.0.1
-
+1.1.0
diff --git a/cpp/dmi/hw.pb.cc b/cpp/dmi/hw.pb.cc
index 1b32844..4d358d9 100644
--- a/cpp/dmi/hw.pb.cc
+++ b/cpp/dmi/hw.pb.cc
@@ -17,13 +17,15 @@
 #include <google/protobuf/port_def.inc>
 
 extern PROTOBUF_INTERNAL_EXPORT_dmi_2fhw_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_ContainerComponentAttributes_dmi_2fhw_2eproto;
-extern PROTOBUF_INTERNAL_EXPORT_dmi_2fhw_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_PortComponentAttributes_dmi_2fhw_2eproto;
+extern PROTOBUF_INTERNAL_EXPORT_dmi_2fhw_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_PonIdConfig_dmi_2fhw_2eproto;
 extern PROTOBUF_INTERNAL_EXPORT_dmi_2fhw_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_PsuComponentAttributes_dmi_2fhw_2eproto;
 extern PROTOBUF_INTERNAL_EXPORT_dmi_2fhw_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_TransceiverComponentsAttributes_dmi_2fhw_2eproto;
 extern PROTOBUF_INTERNAL_EXPORT_dmi_2fhw_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_Uri_dmi_2fhw_2eproto;
 extern PROTOBUF_INTERNAL_EXPORT_dmi_2fhw_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_Uuid_dmi_2fhw_2eproto;
 extern PROTOBUF_INTERNAL_EXPORT_dmi_2fhw_2eproto ::google::protobuf::internal::SCCInfo<1> scc_info_ComponentSensorData_dmi_2fhw_2eproto;
 extern PROTOBUF_INTERNAL_EXPORT_dmi_2fhw_2eproto ::google::protobuf::internal::SCCInfo<1> scc_info_ComponentState_dmi_2fhw_2eproto;
+extern PROTOBUF_INTERNAL_EXPORT_dmi_2fhw_2eproto ::google::protobuf::internal::SCCInfo<1> scc_info_PortComponentAttributes_dmi_2fhw_2eproto;
+extern PROTOBUF_INTERNAL_EXPORT_dmi_2fhw_2eproto ::google::protobuf::internal::SCCInfo<1> scc_info_PortComponentChangeAttributes_dmi_2fhw_2eproto;
 extern PROTOBUF_INTERNAL_EXPORT_dmi_2fhw_2eproto ::google::protobuf::internal::SCCInfo<9> scc_info_Component_dmi_2fhw_2eproto;
 extern PROTOBUF_INTERNAL_EXPORT_google_2fprotobuf_2ftimestamp_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_Timestamp_google_2fprotobuf_2ftimestamp_2eproto;
 namespace dmi {
@@ -51,6 +53,14 @@
  public:
   ::google::protobuf::internal::ExplicitlyConstructed<PortComponentAttributes> _instance;
 } _PortComponentAttributes_default_instance_;
+class PortComponentChangeAttributesDefaultTypeInternal {
+ public:
+  ::google::protobuf::internal::ExplicitlyConstructed<PortComponentChangeAttributes> _instance;
+} _PortComponentChangeAttributes_default_instance_;
+class PonIdConfigDefaultTypeInternal {
+ public:
+  ::google::protobuf::internal::ExplicitlyConstructed<PonIdConfig> _instance;
+} _PonIdConfig_default_instance_;
 class ContainerComponentAttributesDefaultTypeInternal {
  public:
   ::google::protobuf::internal::ExplicitlyConstructed<ContainerComponentAttributes> _instance;
@@ -78,6 +88,7 @@
 class ModifiableComponentDefaultTypeInternal {
  public:
   ::google::protobuf::internal::ExplicitlyConstructed<ModifiableComponent> _instance;
+  const ::dmi::PortComponentChangeAttributes* port_attr_;
 } _ModifiableComponent_default_instance_;
 }  // namespace dmi
 static void InitDefaultsUuid_dmi_2fhw_2eproto() {
@@ -164,8 +175,38 @@
   ::dmi::PortComponentAttributes::InitAsDefaultInstance();
 }
 
-::google::protobuf::internal::SCCInfo<0> scc_info_PortComponentAttributes_dmi_2fhw_2eproto =
-    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsPortComponentAttributes_dmi_2fhw_2eproto}, {}};
+::google::protobuf::internal::SCCInfo<1> scc_info_PortComponentAttributes_dmi_2fhw_2eproto =
+    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 1, InitDefaultsPortComponentAttributes_dmi_2fhw_2eproto}, {
+      &scc_info_PonIdConfig_dmi_2fhw_2eproto.base,}};
+
+static void InitDefaultsPortComponentChangeAttributes_dmi_2fhw_2eproto() {
+  GOOGLE_PROTOBUF_VERIFY_VERSION;
+
+  {
+    void* ptr = &::dmi::_PortComponentChangeAttributes_default_instance_;
+    new (ptr) ::dmi::PortComponentChangeAttributes();
+    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
+  }
+  ::dmi::PortComponentChangeAttributes::InitAsDefaultInstance();
+}
+
+::google::protobuf::internal::SCCInfo<1> scc_info_PortComponentChangeAttributes_dmi_2fhw_2eproto =
+    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 1, InitDefaultsPortComponentChangeAttributes_dmi_2fhw_2eproto}, {
+      &scc_info_PonIdConfig_dmi_2fhw_2eproto.base,}};
+
+static void InitDefaultsPonIdConfig_dmi_2fhw_2eproto() {
+  GOOGLE_PROTOBUF_VERIFY_VERSION;
+
+  {
+    void* ptr = &::dmi::_PonIdConfig_default_instance_;
+    new (ptr) ::dmi::PonIdConfig();
+    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
+  }
+  ::dmi::PonIdConfig::InitAsDefaultInstance();
+}
+
+::google::protobuf::internal::SCCInfo<0> scc_info_PonIdConfig_dmi_2fhw_2eproto =
+    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsPonIdConfig_dmi_2fhw_2eproto}, {}};
 
 static void InitDefaultsContainerComponentAttributes_dmi_2fhw_2eproto() {
   GOOGLE_PROTOBUF_VERIFY_VERSION;
@@ -259,10 +300,11 @@
   ::dmi::ModifiableComponent::InitAsDefaultInstance();
 }
 
-::google::protobuf::internal::SCCInfo<2> scc_info_ModifiableComponent_dmi_2fhw_2eproto =
-    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 2, InitDefaultsModifiableComponent_dmi_2fhw_2eproto}, {
+::google::protobuf::internal::SCCInfo<3> scc_info_ModifiableComponent_dmi_2fhw_2eproto =
+    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 3, InitDefaultsModifiableComponent_dmi_2fhw_2eproto}, {
       &scc_info_Component_dmi_2fhw_2eproto.base,
-      &scc_info_Uri_dmi_2fhw_2eproto.base,}};
+      &scc_info_Uri_dmi_2fhw_2eproto.base,
+      &scc_info_PortComponentChangeAttributes_dmi_2fhw_2eproto.base,}};
 
 void InitDefaults_dmi_2fhw_2eproto() {
   ::google::protobuf::internal::InitSCC(&scc_info_Uuid_dmi_2fhw_2eproto.base);
@@ -271,6 +313,8 @@
   ::google::protobuf::internal::InitSCC(&scc_info_ComponentState_dmi_2fhw_2eproto.base);
   ::google::protobuf::internal::InitSCC(&scc_info_ComponentSensorData_dmi_2fhw_2eproto.base);
   ::google::protobuf::internal::InitSCC(&scc_info_PortComponentAttributes_dmi_2fhw_2eproto.base);
+  ::google::protobuf::internal::InitSCC(&scc_info_PortComponentChangeAttributes_dmi_2fhw_2eproto.base);
+  ::google::protobuf::internal::InitSCC(&scc_info_PonIdConfig_dmi_2fhw_2eproto.base);
   ::google::protobuf::internal::InitSCC(&scc_info_ContainerComponentAttributes_dmi_2fhw_2eproto.base);
   ::google::protobuf::internal::InitSCC(&scc_info_PsuComponentAttributes_dmi_2fhw_2eproto.base);
   ::google::protobuf::internal::InitSCC(&scc_info_TransceiverComponentsAttributes_dmi_2fhw_2eproto.base);
@@ -279,7 +323,7 @@
   ::google::protobuf::internal::InitSCC(&scc_info_ModifiableComponent_dmi_2fhw_2eproto.base);
 }
 
-::google::protobuf::Metadata file_level_metadata_dmi_2fhw_2eproto[12];
+::google::protobuf::Metadata file_level_metadata_dmi_2fhw_2eproto[14];
 const ::google::protobuf::EnumDescriptor* file_level_enum_descriptors_dmi_2fhw_2eproto[15];
 constexpr ::google::protobuf::ServiceDescriptor const** file_level_service_descriptors_dmi_2fhw_2eproto = nullptr;
 
@@ -336,6 +380,21 @@
   PROTOBUF_FIELD_OFFSET(::dmi::PortComponentAttributes, speed_),
   PROTOBUF_FIELD_OFFSET(::dmi::PortComponentAttributes, protocol_),
   PROTOBUF_FIELD_OFFSET(::dmi::PortComponentAttributes, physical_label_),
+  PROTOBUF_FIELD_OFFSET(::dmi::PortComponentAttributes, mapping_label_),
+  PROTOBUF_FIELD_OFFSET(::dmi::PortComponentAttributes, pon_id_config_),
+  ~0u,  // no _has_bits_
+  PROTOBUF_FIELD_OFFSET(::dmi::PortComponentChangeAttributes, _internal_metadata_),
+  ~0u,  // no _extensions_
+  ~0u,  // no _oneof_case_
+  ~0u,  // no _weak_field_map_
+  PROTOBUF_FIELD_OFFSET(::dmi::PortComponentChangeAttributes, pon_id_config_),
+  ~0u,  // no _has_bits_
+  PROTOBUF_FIELD_OFFSET(::dmi::PonIdConfig, _internal_metadata_),
+  ~0u,  // no _extensions_
+  ~0u,  // no _oneof_case_
+  ~0u,  // no _weak_field_map_
+  PROTOBUF_FIELD_OFFSET(::dmi::PonIdConfig, pon_id_),
+  PROTOBUF_FIELD_OFFSET(::dmi::PonIdConfig, pon_id_transmit_periodicity_),
   ~0u,  // no _has_bits_
   PROTOBUF_FIELD_OFFSET(::dmi::ContainerComponentAttributes, _internal_metadata_),
   ~0u,  // no _extensions_
@@ -401,7 +460,7 @@
   ~0u,  // no _has_bits_
   PROTOBUF_FIELD_OFFSET(::dmi::ModifiableComponent, _internal_metadata_),
   ~0u,  // no _extensions_
-  ~0u,  // no _oneof_case_
+  PROTOBUF_FIELD_OFFSET(::dmi::ModifiableComponent, _oneof_case_[0]),
   ~0u,  // no _weak_field_map_
   PROTOBUF_FIELD_OFFSET(::dmi::ModifiableComponent, name_),
   PROTOBUF_FIELD_OFFSET(::dmi::ModifiableComponent, class__),
@@ -411,6 +470,8 @@
   PROTOBUF_FIELD_OFFSET(::dmi::ModifiableComponent, asset_id_),
   PROTOBUF_FIELD_OFFSET(::dmi::ModifiableComponent, uri_),
   PROTOBUF_FIELD_OFFSET(::dmi::ModifiableComponent, admin_state_),
+  offsetof(::dmi::ModifiableComponentDefaultTypeInternal, port_attr_),
+  PROTOBUF_FIELD_OFFSET(::dmi::ModifiableComponent, specific_),
 };
 static const ::google::protobuf::internal::MigrationSchema schemas[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = {
   { 0, -1, sizeof(::dmi::Uuid)},
@@ -419,12 +480,14 @@
   { 18, -1, sizeof(::dmi::ComponentState)},
   { 29, -1, sizeof(::dmi::ComponentSensorData)},
   { 43, -1, sizeof(::dmi::PortComponentAttributes)},
-  { 52, -1, sizeof(::dmi::ContainerComponentAttributes)},
-  { 58, -1, sizeof(::dmi::PsuComponentAttributes)},
-  { 64, -1, sizeof(::dmi::TransceiverComponentsAttributes)},
-  { 76, -1, sizeof(::dmi::Component)},
-  { 106, -1, sizeof(::dmi::Hardware)},
-  { 114, -1, sizeof(::dmi::ModifiableComponent)},
+  { 54, -1, sizeof(::dmi::PortComponentChangeAttributes)},
+  { 60, -1, sizeof(::dmi::PonIdConfig)},
+  { 67, -1, sizeof(::dmi::ContainerComponentAttributes)},
+  { 73, -1, sizeof(::dmi::PsuComponentAttributes)},
+  { 79, -1, sizeof(::dmi::TransceiverComponentsAttributes)},
+  { 91, -1, sizeof(::dmi::Component)},
+  { 121, -1, sizeof(::dmi::Hardware)},
+  { 129, -1, sizeof(::dmi::ModifiableComponent)},
 };
 
 static ::google::protobuf::Message const * const file_default_instances[] = {
@@ -434,6 +497,8 @@
   reinterpret_cast<const ::google::protobuf::Message*>(&::dmi::_ComponentState_default_instance_),
   reinterpret_cast<const ::google::protobuf::Message*>(&::dmi::_ComponentSensorData_default_instance_),
   reinterpret_cast<const ::google::protobuf::Message*>(&::dmi::_PortComponentAttributes_default_instance_),
+  reinterpret_cast<const ::google::protobuf::Message*>(&::dmi::_PortComponentChangeAttributes_default_instance_),
+  reinterpret_cast<const ::google::protobuf::Message*>(&::dmi::_PonIdConfig_default_instance_),
   reinterpret_cast<const ::google::protobuf::Message*>(&::dmi::_ContainerComponentAttributes_default_instance_),
   reinterpret_cast<const ::google::protobuf::Message*>(&::dmi::_PsuComponentAttributes_default_instance_),
   reinterpret_cast<const ::google::protobuf::Message*>(&::dmi::_TransceiverComponentsAttributes_default_instance_),
@@ -445,7 +510,7 @@
 ::google::protobuf::internal::AssignDescriptorsTable assign_descriptors_table_dmi_2fhw_2eproto = {
   {}, AddDescriptors_dmi_2fhw_2eproto, "dmi/hw.proto", schemas,
   file_default_instances, TableStruct_dmi_2fhw_2eproto::offsets,
-  file_level_metadata_dmi_2fhw_2eproto, 12, file_level_enum_descriptors_dmi_2fhw_2eproto, file_level_service_descriptors_dmi_2fhw_2eproto,
+  file_level_metadata_dmi_2fhw_2eproto, 14, file_level_enum_descriptors_dmi_2fhw_2eproto, file_level_service_descriptors_dmi_2fhw_2eproto,
 };
 
 const char descriptor_table_protodef_dmi_2fhw_2eproto[] =
@@ -467,138 +532,145 @@
   "atus\022\025\n\runits_display\030\006 \001(\t\022-\n\ttimestamp"
   "\030\007 \001(\0132\032.google.protobuf.Timestamp\022\031\n\021va"
   "lue_update_rate\030\010 \001(\r\022\021\n\tdata_type\030\t \001(\t"
-  "\"\202\005\n\027PortComponentAttributes\022B\n\016connecto"
+  "\"\302\005\n\027PortComponentAttributes\022B\n\016connecto"
   "r_type\030\001 \001(\0162*.dmi.PortComponentAttribut"
   "es.ConnectorType\0221\n\005speed\030\002 \001(\0162\".dmi.Po"
   "rtComponentAttributes.Speed\0227\n\010protocol\030"
   "\003 \001(\0162%.dmi.PortComponentAttributes.Prot"
-  "ocol\022\026\n\016physical_label\030\004 \001(\t\"p\n\rConnecto"
-  "rType\022\034\n\030CONNECTOR_TYPE_UNDEFINED\020\000\022\010\n\004R"
-  "J45\020\001\022\014\n\010FIBER_LC\020\002\022\017\n\013FIBER_SC_PC\020\003\022\r\n\t"
-  "FIBER_MPO\020\004\022\t\n\005RS232\020\005\"\256\001\n\005Speed\022\023\n\017SPEE"
-  "D_UNDEFINED\020\000\022\013\n\007DYNAMIC\020\001\022\r\n\tGIGABIT_1\020"
-  "\002\022\016\n\nGIGABIT_10\020\003\022\016\n\nGIGABIT_25\020\004\022\016\n\nGIG"
-  "ABIT_40\020\005\022\017\n\013GIGABIT_100\020\006\022\017\n\013GIGABIT_40"
-  "0\020\007\022\020\n\014MEGABIT_2500\020\010\022\020\n\014MEGABIT_1250\020\t\""
-  "|\n\010Protocol\022\026\n\022PROTOCOL_UNDEFINED\020\000\022\014\n\010E"
+  "ocol\022\026\n\016physical_label\030\004 \001(\t\022\025\n\rmapping_"
+  "label\030\005 \001(\t\022\'\n\rpon_id_config\030\006 \001(\0132\020.dmi"
+  ".PonIdConfig\"p\n\rConnectorType\022\034\n\030CONNECT"
+  "OR_TYPE_UNDEFINED\020\000\022\010\n\004RJ45\020\001\022\014\n\010FIBER_L"
+  "C\020\002\022\017\n\013FIBER_SC_PC\020\003\022\r\n\tFIBER_MPO\020\004\022\t\n\005R"
+  "S232\020\005\"\256\001\n\005Speed\022\023\n\017SPEED_UNDEFINED\020\000\022\013\n"
+  "\007DYNAMIC\020\001\022\r\n\tGIGABIT_1\020\002\022\016\n\nGIGABIT_10\020"
+  "\003\022\016\n\nGIGABIT_25\020\004\022\016\n\nGIGABIT_40\020\005\022\017\n\013GIG"
+  "ABIT_100\020\006\022\017\n\013GIGABIT_400\020\007\022\020\n\014MEGABIT_2"
+  "500\020\010\022\020\n\014MEGABIT_1250\020\t\"|\n\010Protocol\022\026\n\022P"
+  "ROTOCOL_UNDEFINED\020\000\022\014\n\010ETHERNET\020\001\022\010\n\004GPO"
+  "N\020\002\022\t\n\005XGPON\020\003\022\n\n\006XGSPON\020\004\022\t\n\005GFAST\020\005\022\n\n"
+  "\006SERIAL\020\006\022\010\n\004EPON\020\007\022\010\n\004BITS\020\010\"H\n\035PortCom"
+  "ponentChangeAttributes\022\'\n\rpon_id_config\030"
+  "\001 \001(\0132\020.dmi.PonIdConfig\"B\n\013PonIdConfig\022\016"
+  "\n\006pon_id\030\001 \001(\014\022#\n\033pon_id_transmit_period"
+  "icity\030\002 \001(\r\"6\n\034ContainerComponentAttribu"
+  "tes\022\026\n\016physical_label\030\001 \001(\t\"\263\001\n\026PsuCompo"
+  "nentAttributes\022G\n\021supported_voltage\030\001 \001("
+  "\0162,.dmi.PsuComponentAttributes.Supported"
+  "Voltage\"P\n\020SupportedVoltage\022\037\n\033SUPPORTED"
+  "_VOLTAGE_UNDEFINED\020\000\022\007\n\003V48\020\001\022\010\n\004V230\020\002\022"
+  "\010\n\004V115\020\003\"\357\004\n\037TransceiverComponentsAttri"
+  "butes\022D\n\013form_factor\030\001 \001(\0162/.dmi.Transce"
+  "iverComponentsAttributes.FormFactor\022=\n\nt"
+  "rans_type\030\002 \001(\0162).dmi.TransceiverCompone"
+  "ntsAttributes.Type\022\024\n\014max_distance\030\003 \001(\r"
+  "\022+\n\022max_distance_scale\030\004 \001(\0162\017.dmi.Value"
+  "Scale\022\025\n\rrx_wavelength\030\005 \003(\r\022\025\n\rtx_wavel"
+  "ength\030\006 \003(\r\022)\n\020wavelength_scale\030\007 \001(\0162\017."
+  "dmi.ValueScale\"\300\001\n\nFormFactor\022\027\n\023FORM_FA"
+  "CTOR_UNKNOWN\020\000\022\010\n\004QSFP\020\001\022\r\n\tQSFP_PLUS\020\002\022"
+  "\n\n\006QSFP28\020\003\022\007\n\003SFP\020\004\022\014\n\010SFP_PLUS\020\005\022\007\n\003XF"
+  "P\020\006\022\010\n\004CFP4\020\007\022\010\n\004CFP2\020\010\022\010\n\004CPAK\020\t\022\006\n\002X2\020"
+  "\n\022\t\n\005OTHER\020\013\022\007\n\003CFP\020\014\022\014\n\010CFP2_ACO\020\r\022\014\n\010C"
+  "FP2_DCO\020\016\"h\n\004Type\022\020\n\014TYPE_UNKNOWN\020\000\022\014\n\010E"
   "THERNET\020\001\022\010\n\004GPON\020\002\022\t\n\005XGPON\020\003\022\n\n\006XGSPON"
-  "\020\004\022\t\n\005GFAST\020\005\022\n\n\006SERIAL\020\006\022\010\n\004EPON\020\007\022\010\n\004B"
-  "ITS\020\010\"6\n\034ContainerComponentAttributes\022\026\n"
-  "\016physical_label\030\001 \001(\t\"\263\001\n\026PsuComponentAt"
-  "tributes\022G\n\021supported_voltage\030\001 \001(\0162,.dm"
-  "i.PsuComponentAttributes.SupportedVoltag"
-  "e\"P\n\020SupportedVoltage\022\037\n\033SUPPORTED_VOLTA"
-  "GE_UNDEFINED\020\000\022\007\n\003V48\020\001\022\010\n\004V230\020\002\022\010\n\004V11"
-  "5\020\003\"\357\004\n\037TransceiverComponentsAttributes\022"
-  "D\n\013form_factor\030\001 \001(\0162/.dmi.TransceiverCo"
-  "mponentsAttributes.FormFactor\022=\n\ntrans_t"
-  "ype\030\002 \001(\0162).dmi.TransceiverComponentsAtt"
-  "ributes.Type\022\024\n\014max_distance\030\003 \001(\r\022+\n\022ma"
-  "x_distance_scale\030\004 \001(\0162\017.dmi.ValueScale\022"
-  "\025\n\rrx_wavelength\030\005 \003(\r\022\025\n\rtx_wavelength\030"
-  "\006 \003(\r\022)\n\020wavelength_scale\030\007 \001(\0162\017.dmi.Va"
-  "lueScale\"\300\001\n\nFormFactor\022\027\n\023FORM_FACTOR_U"
-  "NKNOWN\020\000\022\010\n\004QSFP\020\001\022\r\n\tQSFP_PLUS\020\002\022\n\n\006QSF"
-  "P28\020\003\022\007\n\003SFP\020\004\022\014\n\010SFP_PLUS\020\005\022\007\n\003XFP\020\006\022\010\n"
-  "\004CFP4\020\007\022\010\n\004CFP2\020\010\022\010\n\004CPAK\020\t\022\006\n\002X2\020\n\022\t\n\005O"
-  "THER\020\013\022\007\n\003CFP\020\014\022\014\n\010CFP2_ACO\020\r\022\014\n\010CFP2_DC"
-  "O\020\016\"h\n\004Type\022\020\n\014TYPE_UNKNOWN\020\000\022\014\n\010ETHERNE"
-  "T\020\001\022\010\n\004GPON\020\002\022\t\n\005XGPON\020\003\022\n\n\006XGSPON\020\004\022\010\n\004"
-  "CPON\020\005\022\013\n\007NG_PON2\020\006\022\010\n\004EPON\020\007\"\350\005\n\tCompon"
-  "ent\022\014\n\004name\030\001 \001(\t\022!\n\005class\030\002 \001(\0162\022.dmi.C"
-  "omponentType\022\023\n\013description\030\003 \001(\t\022\016\n\006par"
-  "ent\030\004 \001(\t\022\026\n\016parent_rel_pos\030\005 \001(\005\022 \n\010chi"
-  "ldren\030\006 \003(\0132\016.dmi.Component\022\024\n\014hardware_"
-  "rev\030\007 \001(\t\022\024\n\014firmware_rev\030\010 \001(\t\022\024\n\014softw"
-  "are_rev\030\t \001(\t\022\022\n\nserial_num\030\n \001(\t\022\020\n\010mfg"
-  "_name\030\013 \001(\t\022\022\n\nmodel_name\030\014 \001(\t\022\r\n\005alias"
-  "\030\r \001(\t\022\020\n\010asset_id\030\016 \001(\t\022\016\n\006is_fru\030\017 \001(\010"
-  "\022,\n\010mfg_date\030\020 \001(\0132\032.google.protobuf.Tim"
-  "estamp\022\025\n\003uri\030\021 \001(\0132\010.dmi.Uri\022\027\n\004uuid\030\022 "
-  "\001(\0132\t.dmi.Uuid\022\"\n\005state\030\023 \001(\0132\023.dmi.Comp"
-  "onentState\022-\n\013sensor_data\030\024 \003(\0132\030.dmi.Co"
-  "mponentSensorData\0221\n\tport_attr\0302 \001(\0132\034.d"
-  "mi.PortComponentAttributesH\000\022;\n\016containe"
-  "r_attr\0303 \001(\0132!.dmi.ContainerComponentAtt"
-  "ributesH\000\022/\n\010psu_attr\0304 \001(\0132\033.dmi.PsuCom"
-  "ponentAttributesH\000\022@\n\020transceiver_attr\0305"
-  " \001(\0132$.dmi.TransceiverComponentsAttribut"
-  "esH\000B\n\n\010specific\"\212\001\n\010Hardware\022/\n\013last_ch"
-  "ange\030\001 \001(\0132\032.google.protobuf.Timestamp\022\034"
-  "\n\004root\030\002 \001(\0132\016.dmi.Component\022/\n\013last_boo"
-  "ted\030\003 \001(\0132\032.google.protobuf.Timestamp\"\345\001"
-  "\n\023ModifiableComponent\022\014\n\004name\030\001 \001(\t\022!\n\005c"
-  "lass\030\002 \001(\0162\022.dmi.ComponentType\022\036\n\006parent"
-  "\030\003 \001(\0132\016.dmi.Component\022\026\n\016parent_rel_pos"
-  "\030\004 \001(\005\022\r\n\005alias\030\005 \001(\t\022\020\n\010asset_id\030\006 \001(\t\022"
-  "\025\n\003uri\030\007 \001(\0132\010.dmi.Uri\022-\n\013admin_state\030\010 "
-  "\001(\0162\030.dmi.ComponentAdminState*\264\003\n\rCompon"
-  "entType\022\034\n\030COMPONENT_TYPE_UNDEFINED\020\000\022\032\n"
-  "\026COMPONENT_TYPE_UNKNOWN\020\001\022\032\n\026COMPONENT_T"
-  "YPE_CHASSIS\020\002\022\034\n\030COMPONENT_TYPE_BACKPLAN"
-  "E\020\003\022\034\n\030COMPONENT_TYPE_CONTAINER\020\004\022\037\n\033COM"
-  "PONENT_TYPE_POWER_SUPPLY\020\005\022\026\n\022COMPONENT_"
-  "TYPE_FAN\020\006\022\031\n\025COMPONENT_TYPE_SENSOR\020\007\022\031\n"
-  "\025COMPONENT_TYPE_MODULE\020\010\022\027\n\023COMPONENT_TY"
-  "PE_PORT\020\t\022\026\n\022COMPONENT_TYPE_CPU\020\n\022\032\n\026COM"
-  "PONENT_TYPE_BATTERY\020\013\022\032\n\026COMPONENT_TYPE_"
-  "STORAGE\020\014\022\031\n\025COMPONENT_TYPE_MEMORY\020\r\022\036\n\032"
-  "COMPONENT_TYPE_TRANSCEIVER\020\016*\263\001\n\023Compone"
-  "ntAdminState\022\036\n\032COMP_ADMIN_STATE_UNDEFIN"
-  "ED\020\000\022\034\n\030COMP_ADMIN_STATE_UNKNOWN\020\001\022\033\n\027CO"
-  "MP_ADMIN_STATE_LOCKED\020\002\022\"\n\036COMP_ADMIN_ST"
-  "ATE_SHUTTING_DOWN\020\003\022\035\n\031COMP_ADMIN_STATE_"
-  "UNLOCKED\020\004*\250\001\n\022ComponentOperState\022\035\n\031COM"
-  "P_OPER_STATE_UNDEFINED\020\000\022\033\n\027COMP_OPER_ST"
-  "ATE_UNKNOWN\020\001\022\034\n\030COMP_OPER_STATE_DISABLE"
-  "D\020\002\022\033\n\027COMP_OPER_STATE_ENABLED\020\003\022\033\n\027COMP"
-  "_OPER_STATE_TESTING\020\004*\246\001\n\023ComponentUsage"
-  "State\022\036\n\032COMP_USAGE_STATE_UNDEFINED\020\000\022\034\n"
-  "\030COMP_USAGE_STATE_UNKNOWN\020\001\022\031\n\025COMP_USAG"
-  "E_STATE_IDLE\020\002\022\033\n\027COMP_USAGE_STATE_ACTIV"
-  "E\020\003\022\031\n\025COMP_USAGE_STATE_BUSY\020\004*\217\002\n\023Compo"
-  "nentAlarmState\022\036\n\032COMP_ALARM_STATE_UNDEF"
-  "INED\020\000\022\034\n\030COMP_ALARM_STATE_UNKNOWN\020\001\022!\n\035"
-  "COMP_ALARM_STATE_UNDER_REPAIR\020\002\022\035\n\031COMP_"
-  "ALARM_STATE_CRITICAL\020\003\022\032\n\026COMP_ALARM_STA"
-  "TE_MAJOR\020\004\022\032\n\026COMP_ALARM_STATE_MINOR\020\005\022\034"
-  "\n\030COMP_ALARM_STATE_WARNING\020\006\022\"\n\036COMP_ALA"
-  "RM_STATE_INDETERMINATE\020\007*\274\001\n\025ComponentSt"
-  "andbyState\022 \n\034COMP_STANDBY_STATE_UNDEFIN"
-  "ED\020\000\022\036\n\032COMP_STANDBY_STATE_UNKNOWN\020\001\022\032\n\026"
-  "COMP_STANDBY_STATE_HOT\020\002\022\033\n\027COMP_STANDBY"
-  "_STATE_COLD\020\003\022(\n$COMP_STANDBY_STATE_PROV"
-  "IDING_SERVICE\020\004*\211\003\n\rDataValueType\022\030\n\024VAL"
-  "UE_TYPE_UNDEFINED\020\000\022\024\n\020VALUE_TYPE_OTHER\020"
-  "\001\022\026\n\022VALUE_TYPE_UNKNOWN\020\002\022\027\n\023VALUE_TYPE_"
-  "VOLTS_AC\020\003\022\027\n\023VALUE_TYPE_VOLTS_DC\020\004\022\026\n\022V"
-  "ALUE_TYPE_AMPERES\020\005\022\024\n\020VALUE_TYPE_WATTS\020"
-  "\006\022\024\n\020VALUE_TYPE_HERTZ\020\007\022\026\n\022VALUE_TYPE_CE"
-  "LSIUS\020\010\022\031\n\025VALUE_TYPE_PERCENT_RH\020\t\022\022\n\016VA"
-  "LUE_TYPE_RPM\020\n\022\022\n\016VALUE_TYPE_CMM\020\013\022\032\n\026VA"
-  "LUE_TYPE_TRUTH_VALUE\020\014\022\026\n\022VALUE_TYPE_PER"
-  "CENT\020\r\022\025\n\021VALUE_TYPE_METERS\020\016\022\024\n\020VALUE_T"
-  "YPE_BYTES\020\017*\244\003\n\nValueScale\022\031\n\025VALUE_SCAL"
-  "E_UNDEFINED\020\000\022\025\n\021VALUE_SCALE_YOCTO\020\001\022\025\n\021"
-  "VALUE_SCALE_ZEPTO\020\002\022\024\n\020VALUE_SCALE_ATTO\020"
-  "\003\022\025\n\021VALUE_SCALE_FEMTO\020\004\022\024\n\020VALUE_SCALE_"
-  "PICO\020\005\022\024\n\020VALUE_SCALE_NANO\020\006\022\025\n\021VALUE_SC"
-  "ALE_MICRO\020\007\022\025\n\021VALUE_SCALE_MILLI\020\010\022\025\n\021VA"
-  "LUE_SCALE_UNITS\020\t\022\024\n\020VALUE_SCALE_KILO\020\n\022"
-  "\024\n\020VALUE_SCALE_MEGA\020\013\022\024\n\020VALUE_SCALE_GIG"
-  "A\020\014\022\024\n\020VALUE_SCALE_TERA\020\r\022\024\n\020VALUE_SCALE"
-  "_PETA\020\016\022\023\n\017VALUE_SCALE_EXA\020\017\022\025\n\021VALUE_SC"
-  "ALE_ZETTA\020\020\022\025\n\021VALUE_SCALE_YOTTA\020\021*\202\001\n\014S"
-  "ensorStatus\022\033\n\027SENSOR_STATUS_UNDEFINED\020\000"
-  "\022\024\n\020SENSOR_STATUS_OK\020\001\022\035\n\031SENSOR_STATUS_"
-  "UNAVAILABLE\020\002\022 \n\034SENSOR_STATUS_NONOPERAT"
-  "IONAL\020\003B;Z9github.com/opencord/device-ma"
-  "nagement-interface/v3/go/dmib\006proto3"
+  "\020\004\022\010\n\004CPON\020\005\022\013\n\007NG_PON2\020\006\022\010\n\004EPON\020\007\"\350\005\n\t"
+  "Component\022\014\n\004name\030\001 \001(\t\022!\n\005class\030\002 \001(\0162\022"
+  ".dmi.ComponentType\022\023\n\013description\030\003 \001(\t\022"
+  "\016\n\006parent\030\004 \001(\t\022\026\n\016parent_rel_pos\030\005 \001(\005\022"
+  " \n\010children\030\006 \003(\0132\016.dmi.Component\022\024\n\014har"
+  "dware_rev\030\007 \001(\t\022\024\n\014firmware_rev\030\010 \001(\t\022\024\n"
+  "\014software_rev\030\t \001(\t\022\022\n\nserial_num\030\n \001(\t\022"
+  "\020\n\010mfg_name\030\013 \001(\t\022\022\n\nmodel_name\030\014 \001(\t\022\r\n"
+  "\005alias\030\r \001(\t\022\020\n\010asset_id\030\016 \001(\t\022\016\n\006is_fru"
+  "\030\017 \001(\010\022,\n\010mfg_date\030\020 \001(\0132\032.google.protob"
+  "uf.Timestamp\022\025\n\003uri\030\021 \001(\0132\010.dmi.Uri\022\027\n\004u"
+  "uid\030\022 \001(\0132\t.dmi.Uuid\022\"\n\005state\030\023 \001(\0132\023.dm"
+  "i.ComponentState\022-\n\013sensor_data\030\024 \003(\0132\030."
+  "dmi.ComponentSensorData\0221\n\tport_attr\0302 \001"
+  "(\0132\034.dmi.PortComponentAttributesH\000\022;\n\016co"
+  "ntainer_attr\0303 \001(\0132!.dmi.ContainerCompon"
+  "entAttributesH\000\022/\n\010psu_attr\0304 \001(\0132\033.dmi."
+  "PsuComponentAttributesH\000\022@\n\020transceiver_"
+  "attr\0305 \001(\0132$.dmi.TransceiverComponentsAt"
+  "tributesH\000B\n\n\010specific\"\212\001\n\010Hardware\022/\n\013l"
+  "ast_change\030\001 \001(\0132\032.google.protobuf.Times"
+  "tamp\022\034\n\004root\030\002 \001(\0132\016.dmi.Component\022/\n\013la"
+  "st_booted\030\003 \001(\0132\032.google.protobuf.Timest"
+  "amp\"\252\002\n\023ModifiableComponent\022\014\n\004name\030\001 \001("
+  "\t\022!\n\005class\030\002 \001(\0162\022.dmi.ComponentType\022\036\n\006"
+  "parent\030\003 \001(\0132\016.dmi.Component\022\026\n\016parent_r"
+  "el_pos\030\004 \001(\005\022\r\n\005alias\030\005 \001(\t\022\020\n\010asset_id\030"
+  "\006 \001(\t\022\025\n\003uri\030\007 \001(\0132\010.dmi.Uri\022-\n\013admin_st"
+  "ate\030\010 \001(\0162\030.dmi.ComponentAdminState\0227\n\tp"
+  "ort_attr\0302 \001(\0132\".dmi.PortComponentChange"
+  "AttributesH\000B\n\n\010specific*\264\003\n\rComponentTy"
+  "pe\022\034\n\030COMPONENT_TYPE_UNDEFINED\020\000\022\032\n\026COMP"
+  "ONENT_TYPE_UNKNOWN\020\001\022\032\n\026COMPONENT_TYPE_C"
+  "HASSIS\020\002\022\034\n\030COMPONENT_TYPE_BACKPLANE\020\003\022\034"
+  "\n\030COMPONENT_TYPE_CONTAINER\020\004\022\037\n\033COMPONEN"
+  "T_TYPE_POWER_SUPPLY\020\005\022\026\n\022COMPONENT_TYPE_"
+  "FAN\020\006\022\031\n\025COMPONENT_TYPE_SENSOR\020\007\022\031\n\025COMP"
+  "ONENT_TYPE_MODULE\020\010\022\027\n\023COMPONENT_TYPE_PO"
+  "RT\020\t\022\026\n\022COMPONENT_TYPE_CPU\020\n\022\032\n\026COMPONEN"
+  "T_TYPE_BATTERY\020\013\022\032\n\026COMPONENT_TYPE_STORA"
+  "GE\020\014\022\031\n\025COMPONENT_TYPE_MEMORY\020\r\022\036\n\032COMPO"
+  "NENT_TYPE_TRANSCEIVER\020\016*\263\001\n\023ComponentAdm"
+  "inState\022\036\n\032COMP_ADMIN_STATE_UNDEFINED\020\000\022"
+  "\034\n\030COMP_ADMIN_STATE_UNKNOWN\020\001\022\033\n\027COMP_AD"
+  "MIN_STATE_LOCKED\020\002\022\"\n\036COMP_ADMIN_STATE_S"
+  "HUTTING_DOWN\020\003\022\035\n\031COMP_ADMIN_STATE_UNLOC"
+  "KED\020\004*\250\001\n\022ComponentOperState\022\035\n\031COMP_OPE"
+  "R_STATE_UNDEFINED\020\000\022\033\n\027COMP_OPER_STATE_U"
+  "NKNOWN\020\001\022\034\n\030COMP_OPER_STATE_DISABLED\020\002\022\033"
+  "\n\027COMP_OPER_STATE_ENABLED\020\003\022\033\n\027COMP_OPER"
+  "_STATE_TESTING\020\004*\246\001\n\023ComponentUsageState"
+  "\022\036\n\032COMP_USAGE_STATE_UNDEFINED\020\000\022\034\n\030COMP"
+  "_USAGE_STATE_UNKNOWN\020\001\022\031\n\025COMP_USAGE_STA"
+  "TE_IDLE\020\002\022\033\n\027COMP_USAGE_STATE_ACTIVE\020\003\022\031"
+  "\n\025COMP_USAGE_STATE_BUSY\020\004*\217\002\n\023ComponentA"
+  "larmState\022\036\n\032COMP_ALARM_STATE_UNDEFINED\020"
+  "\000\022\034\n\030COMP_ALARM_STATE_UNKNOWN\020\001\022!\n\035COMP_"
+  "ALARM_STATE_UNDER_REPAIR\020\002\022\035\n\031COMP_ALARM"
+  "_STATE_CRITICAL\020\003\022\032\n\026COMP_ALARM_STATE_MA"
+  "JOR\020\004\022\032\n\026COMP_ALARM_STATE_MINOR\020\005\022\034\n\030COM"
+  "P_ALARM_STATE_WARNING\020\006\022\"\n\036COMP_ALARM_ST"
+  "ATE_INDETERMINATE\020\007*\274\001\n\025ComponentStandby"
+  "State\022 \n\034COMP_STANDBY_STATE_UNDEFINED\020\000\022"
+  "\036\n\032COMP_STANDBY_STATE_UNKNOWN\020\001\022\032\n\026COMP_"
+  "STANDBY_STATE_HOT\020\002\022\033\n\027COMP_STANDBY_STAT"
+  "E_COLD\020\003\022(\n$COMP_STANDBY_STATE_PROVIDING"
+  "_SERVICE\020\004*\211\003\n\rDataValueType\022\030\n\024VALUE_TY"
+  "PE_UNDEFINED\020\000\022\024\n\020VALUE_TYPE_OTHER\020\001\022\026\n\022"
+  "VALUE_TYPE_UNKNOWN\020\002\022\027\n\023VALUE_TYPE_VOLTS"
+  "_AC\020\003\022\027\n\023VALUE_TYPE_VOLTS_DC\020\004\022\026\n\022VALUE_"
+  "TYPE_AMPERES\020\005\022\024\n\020VALUE_TYPE_WATTS\020\006\022\024\n\020"
+  "VALUE_TYPE_HERTZ\020\007\022\026\n\022VALUE_TYPE_CELSIUS"
+  "\020\010\022\031\n\025VALUE_TYPE_PERCENT_RH\020\t\022\022\n\016VALUE_T"
+  "YPE_RPM\020\n\022\022\n\016VALUE_TYPE_CMM\020\013\022\032\n\026VALUE_T"
+  "YPE_TRUTH_VALUE\020\014\022\026\n\022VALUE_TYPE_PERCENT\020"
+  "\r\022\025\n\021VALUE_TYPE_METERS\020\016\022\024\n\020VALUE_TYPE_B"
+  "YTES\020\017*\244\003\n\nValueScale\022\031\n\025VALUE_SCALE_UND"
+  "EFINED\020\000\022\025\n\021VALUE_SCALE_YOCTO\020\001\022\025\n\021VALUE"
+  "_SCALE_ZEPTO\020\002\022\024\n\020VALUE_SCALE_ATTO\020\003\022\025\n\021"
+  "VALUE_SCALE_FEMTO\020\004\022\024\n\020VALUE_SCALE_PICO\020"
+  "\005\022\024\n\020VALUE_SCALE_NANO\020\006\022\025\n\021VALUE_SCALE_M"
+  "ICRO\020\007\022\025\n\021VALUE_SCALE_MILLI\020\010\022\025\n\021VALUE_S"
+  "CALE_UNITS\020\t\022\024\n\020VALUE_SCALE_KILO\020\n\022\024\n\020VA"
+  "LUE_SCALE_MEGA\020\013\022\024\n\020VALUE_SCALE_GIGA\020\014\022\024"
+  "\n\020VALUE_SCALE_TERA\020\r\022\024\n\020VALUE_SCALE_PETA"
+  "\020\016\022\023\n\017VALUE_SCALE_EXA\020\017\022\025\n\021VALUE_SCALE_Z"
+  "ETTA\020\020\022\025\n\021VALUE_SCALE_YOTTA\020\021*\202\001\n\014Sensor"
+  "Status\022\033\n\027SENSOR_STATUS_UNDEFINED\020\000\022\024\n\020S"
+  "ENSOR_STATUS_OK\020\001\022\035\n\031SENSOR_STATUS_UNAVA"
+  "ILABLE\020\002\022 \n\034SENSOR_STATUS_NONOPERATIONAL"
+  "\020\003B;Z9github.com/opencord/device-managem"
+  "ent-interface/v3/go/dmib\006proto3"
   ;
 ::google::protobuf::internal::DescriptorTable descriptor_table_dmi_2fhw_2eproto = {
   false, InitDefaults_dmi_2fhw_2eproto, 
   descriptor_table_protodef_dmi_2fhw_2eproto,
-  "dmi/hw.proto", &assign_descriptors_table_dmi_2fhw_2eproto, 5796,
+  "dmi/hw.proto", &assign_descriptors_table_dmi_2fhw_2eproto, 6071,
 };
 
 void AddDescriptors_dmi_2fhw_2eproto() {
@@ -3130,16 +3202,25 @@
 // ===================================================================
 
 void PortComponentAttributes::InitAsDefaultInstance() {
+  ::dmi::_PortComponentAttributes_default_instance_._instance.get_mutable()->pon_id_config_ = const_cast< ::dmi::PonIdConfig*>(
+      ::dmi::PonIdConfig::internal_default_instance());
 }
 class PortComponentAttributes::HasBitSetters {
  public:
+  static const ::dmi::PonIdConfig& pon_id_config(const PortComponentAttributes* msg);
 };
 
+const ::dmi::PonIdConfig&
+PortComponentAttributes::HasBitSetters::pon_id_config(const PortComponentAttributes* msg) {
+  return *msg->pon_id_config_;
+}
 #if !defined(_MSC_VER) || _MSC_VER >= 1900
 const int PortComponentAttributes::kConnectorTypeFieldNumber;
 const int PortComponentAttributes::kSpeedFieldNumber;
 const int PortComponentAttributes::kProtocolFieldNumber;
 const int PortComponentAttributes::kPhysicalLabelFieldNumber;
+const int PortComponentAttributes::kMappingLabelFieldNumber;
+const int PortComponentAttributes::kPonIdConfigFieldNumber;
 #endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
 
 PortComponentAttributes::PortComponentAttributes()
@@ -3155,6 +3236,15 @@
   if (from.physical_label().size() > 0) {
     physical_label_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.physical_label_);
   }
+  mapping_label_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  if (from.mapping_label().size() > 0) {
+    mapping_label_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.mapping_label_);
+  }
+  if (from.has_pon_id_config()) {
+    pon_id_config_ = new ::dmi::PonIdConfig(*from.pon_id_config_);
+  } else {
+    pon_id_config_ = nullptr;
+  }
   ::memcpy(&connector_type_, &from.connector_type_,
     static_cast<size_t>(reinterpret_cast<char*>(&protocol_) -
     reinterpret_cast<char*>(&connector_type_)) + sizeof(protocol_));
@@ -3165,9 +3255,10 @@
   ::google::protobuf::internal::InitSCC(
       &scc_info_PortComponentAttributes_dmi_2fhw_2eproto.base);
   physical_label_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
-  ::memset(&connector_type_, 0, static_cast<size_t>(
+  mapping_label_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  ::memset(&pon_id_config_, 0, static_cast<size_t>(
       reinterpret_cast<char*>(&protocol_) -
-      reinterpret_cast<char*>(&connector_type_)) + sizeof(protocol_));
+      reinterpret_cast<char*>(&pon_id_config_)) + sizeof(protocol_));
 }
 
 PortComponentAttributes::~PortComponentAttributes() {
@@ -3177,6 +3268,8 @@
 
 void PortComponentAttributes::SharedDtor() {
   physical_label_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  mapping_label_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  if (this != internal_default_instance()) delete pon_id_config_;
 }
 
 void PortComponentAttributes::SetCachedSize(int size) const {
@@ -3195,6 +3288,11 @@
   (void) cached_has_bits;
 
   physical_label_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  mapping_label_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  if (GetArenaNoVirtual() == nullptr && pon_id_config_ != nullptr) {
+    delete pon_id_config_;
+  }
+  pon_id_config_ = nullptr;
   ::memset(&connector_type_, 0, static_cast<size_t>(
       reinterpret_cast<char*>(&protocol_) -
       reinterpret_cast<char*>(&connector_type_)) + sizeof(protocol_));
@@ -3254,6 +3352,35 @@
         ptr += size;
         break;
       }
+      // string mapping_label = 5;
+      case 5: {
+        if (static_cast<::google::protobuf::uint8>(tag) != 42) goto handle_unusual;
+        ptr = ::google::protobuf::io::ReadSize(ptr, &size);
+        GOOGLE_PROTOBUF_PARSER_ASSERT(ptr);
+        ctx->extra_parse_data().SetFieldName("dmi.PortComponentAttributes.mapping_label");
+        object = msg->mutable_mapping_label();
+        if (size > end - ptr + ::google::protobuf::internal::ParseContext::kSlopBytes) {
+          parser_till_end = ::google::protobuf::internal::GreedyStringParserUTF8;
+          goto string_till_end;
+        }
+        GOOGLE_PROTOBUF_PARSER_ASSERT(::google::protobuf::internal::StringCheckUTF8(ptr, size, ctx));
+        ::google::protobuf::internal::InlineGreedyStringParser(object, ptr, size, ctx);
+        ptr += size;
+        break;
+      }
+      // .dmi.PonIdConfig pon_id_config = 6;
+      case 6: {
+        if (static_cast<::google::protobuf::uint8>(tag) != 50) goto handle_unusual;
+        ptr = ::google::protobuf::io::ReadSize(ptr, &size);
+        GOOGLE_PROTOBUF_PARSER_ASSERT(ptr);
+        parser_till_end = ::dmi::PonIdConfig::_InternalParse;
+        object = msg->mutable_pon_id_config();
+        if (size > end - ptr) goto len_delim_till_end;
+        ptr += size;
+        GOOGLE_PROTOBUF_PARSER_ASSERT(ctx->ParseExactRange(
+            {parser_till_end, object}, ptr - size, ptr));
+        break;
+      }
       default: {
       handle_unusual:
         if ((tag & 7) == 4 || tag == 0) {
@@ -3345,6 +3472,32 @@
         break;
       }
 
+      // string mapping_label = 5;
+      case 5: {
+        if (static_cast< ::google::protobuf::uint8>(tag) == (42 & 0xFF)) {
+          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
+                input, this->mutable_mapping_label()));
+          DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+            this->mapping_label().data(), static_cast<int>(this->mapping_label().length()),
+            ::google::protobuf::internal::WireFormatLite::PARSE,
+            "dmi.PortComponentAttributes.mapping_label"));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      // .dmi.PonIdConfig pon_id_config = 6;
+      case 6: {
+        if (static_cast< ::google::protobuf::uint8>(tag) == (50 & 0xFF)) {
+          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
+               input, mutable_pon_id_config()));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
       default: {
       handle_unusual:
         if (tag == 0) {
@@ -3400,6 +3553,22 @@
       4, this->physical_label(), output);
   }
 
+  // string mapping_label = 5;
+  if (this->mapping_label().size() > 0) {
+    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+      this->mapping_label().data(), static_cast<int>(this->mapping_label().length()),
+      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
+      "dmi.PortComponentAttributes.mapping_label");
+    ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
+      5, this->mapping_label(), output);
+  }
+
+  // .dmi.PonIdConfig pon_id_config = 6;
+  if (this->has_pon_id_config()) {
+    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
+      6, HasBitSetters::pon_id_config(this), output);
+  }
+
   if (_internal_metadata_.have_unknown_fields()) {
     ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
         _internal_metadata_.unknown_fields(), output);
@@ -3442,6 +3611,24 @@
         4, this->physical_label(), target);
   }
 
+  // string mapping_label = 5;
+  if (this->mapping_label().size() > 0) {
+    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+      this->mapping_label().data(), static_cast<int>(this->mapping_label().length()),
+      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
+      "dmi.PortComponentAttributes.mapping_label");
+    target =
+      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
+        5, this->mapping_label(), target);
+  }
+
+  // .dmi.PonIdConfig pon_id_config = 6;
+  if (this->has_pon_id_config()) {
+    target = ::google::protobuf::internal::WireFormatLite::
+      InternalWriteMessageToArray(
+        6, HasBitSetters::pon_id_config(this), target);
+  }
+
   if (_internal_metadata_.have_unknown_fields()) {
     target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
         _internal_metadata_.unknown_fields(), target);
@@ -3470,6 +3657,20 @@
         this->physical_label());
   }
 
+  // string mapping_label = 5;
+  if (this->mapping_label().size() > 0) {
+    total_size += 1 +
+      ::google::protobuf::internal::WireFormatLite::StringSize(
+        this->mapping_label());
+  }
+
+  // .dmi.PonIdConfig pon_id_config = 6;
+  if (this->has_pon_id_config()) {
+    total_size += 1 +
+      ::google::protobuf::internal::WireFormatLite::MessageSize(
+        *pon_id_config_);
+  }
+
   // .dmi.PortComponentAttributes.ConnectorType connector_type = 1;
   if (this->connector_type() != 0) {
     total_size += 1 +
@@ -3519,6 +3720,13 @@
 
     physical_label_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.physical_label_);
   }
+  if (from.mapping_label().size() > 0) {
+
+    mapping_label_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.mapping_label_);
+  }
+  if (from.has_pon_id_config()) {
+    mutable_pon_id_config()->::dmi::PonIdConfig::MergeFrom(from.pon_id_config());
+  }
   if (from.connector_type() != 0) {
     set_connector_type(from.connector_type());
   }
@@ -3557,6 +3765,9 @@
   _internal_metadata_.Swap(&other->_internal_metadata_);
   physical_label_.Swap(&other->physical_label_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
     GetArenaNoVirtual());
+  mapping_label_.Swap(&other->mapping_label_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+    GetArenaNoVirtual());
+  swap(pon_id_config_, other->pon_id_config_);
   swap(connector_type_, other->connector_type_);
   swap(speed_, other->speed_);
   swap(protocol_, other->protocol_);
@@ -3570,6 +3781,622 @@
 
 // ===================================================================
 
+void PortComponentChangeAttributes::InitAsDefaultInstance() {
+  ::dmi::_PortComponentChangeAttributes_default_instance_._instance.get_mutable()->pon_id_config_ = const_cast< ::dmi::PonIdConfig*>(
+      ::dmi::PonIdConfig::internal_default_instance());
+}
+class PortComponentChangeAttributes::HasBitSetters {
+ public:
+  static const ::dmi::PonIdConfig& pon_id_config(const PortComponentChangeAttributes* msg);
+};
+
+const ::dmi::PonIdConfig&
+PortComponentChangeAttributes::HasBitSetters::pon_id_config(const PortComponentChangeAttributes* msg) {
+  return *msg->pon_id_config_;
+}
+#if !defined(_MSC_VER) || _MSC_VER >= 1900
+const int PortComponentChangeAttributes::kPonIdConfigFieldNumber;
+#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
+
+PortComponentChangeAttributes::PortComponentChangeAttributes()
+  : ::google::protobuf::Message(), _internal_metadata_(nullptr) {
+  SharedCtor();
+  // @@protoc_insertion_point(constructor:dmi.PortComponentChangeAttributes)
+}
+PortComponentChangeAttributes::PortComponentChangeAttributes(const PortComponentChangeAttributes& from)
+  : ::google::protobuf::Message(),
+      _internal_metadata_(nullptr) {
+  _internal_metadata_.MergeFrom(from._internal_metadata_);
+  if (from.has_pon_id_config()) {
+    pon_id_config_ = new ::dmi::PonIdConfig(*from.pon_id_config_);
+  } else {
+    pon_id_config_ = nullptr;
+  }
+  // @@protoc_insertion_point(copy_constructor:dmi.PortComponentChangeAttributes)
+}
+
+void PortComponentChangeAttributes::SharedCtor() {
+  ::google::protobuf::internal::InitSCC(
+      &scc_info_PortComponentChangeAttributes_dmi_2fhw_2eproto.base);
+  pon_id_config_ = nullptr;
+}
+
+PortComponentChangeAttributes::~PortComponentChangeAttributes() {
+  // @@protoc_insertion_point(destructor:dmi.PortComponentChangeAttributes)
+  SharedDtor();
+}
+
+void PortComponentChangeAttributes::SharedDtor() {
+  if (this != internal_default_instance()) delete pon_id_config_;
+}
+
+void PortComponentChangeAttributes::SetCachedSize(int size) const {
+  _cached_size_.Set(size);
+}
+const PortComponentChangeAttributes& PortComponentChangeAttributes::default_instance() {
+  ::google::protobuf::internal::InitSCC(&::scc_info_PortComponentChangeAttributes_dmi_2fhw_2eproto.base);
+  return *internal_default_instance();
+}
+
+
+void PortComponentChangeAttributes::Clear() {
+// @@protoc_insertion_point(message_clear_start:dmi.PortComponentChangeAttributes)
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  if (GetArenaNoVirtual() == nullptr && pon_id_config_ != nullptr) {
+    delete pon_id_config_;
+  }
+  pon_id_config_ = nullptr;
+  _internal_metadata_.Clear();
+}
+
+#if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
+const char* PortComponentChangeAttributes::_InternalParse(const char* begin, const char* end, void* object,
+                  ::google::protobuf::internal::ParseContext* ctx) {
+  auto msg = static_cast<PortComponentChangeAttributes*>(object);
+  ::google::protobuf::int32 size; (void)size;
+  int depth; (void)depth;
+  ::google::protobuf::uint32 tag;
+  ::google::protobuf::internal::ParseFunc parser_till_end; (void)parser_till_end;
+  auto ptr = begin;
+  while (ptr < end) {
+    ptr = ::google::protobuf::io::Parse32(ptr, &tag);
+    GOOGLE_PROTOBUF_PARSER_ASSERT(ptr);
+    switch (tag >> 3) {
+      // .dmi.PonIdConfig pon_id_config = 1;
+      case 1: {
+        if (static_cast<::google::protobuf::uint8>(tag) != 10) goto handle_unusual;
+        ptr = ::google::protobuf::io::ReadSize(ptr, &size);
+        GOOGLE_PROTOBUF_PARSER_ASSERT(ptr);
+        parser_till_end = ::dmi::PonIdConfig::_InternalParse;
+        object = msg->mutable_pon_id_config();
+        if (size > end - ptr) goto len_delim_till_end;
+        ptr += size;
+        GOOGLE_PROTOBUF_PARSER_ASSERT(ctx->ParseExactRange(
+            {parser_till_end, object}, ptr - size, ptr));
+        break;
+      }
+      default: {
+      handle_unusual:
+        if ((tag & 7) == 4 || tag == 0) {
+          ctx->EndGroup(tag);
+          return ptr;
+        }
+        auto res = UnknownFieldParse(tag, {_InternalParse, msg},
+          ptr, end, msg->_internal_metadata_.mutable_unknown_fields(), ctx);
+        ptr = res.first;
+        GOOGLE_PROTOBUF_PARSER_ASSERT(ptr != nullptr);
+        if (res.second) return ptr;
+      }
+    }  // switch
+  }  // while
+  return ptr;
+len_delim_till_end:
+  return ctx->StoreAndTailCall(ptr, end, {_InternalParse, msg},
+                               {parser_till_end, object}, size);
+}
+#else  // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
+bool PortComponentChangeAttributes::MergePartialFromCodedStream(
+    ::google::protobuf::io::CodedInputStream* input) {
+#define DO_(EXPRESSION) if (!PROTOBUF_PREDICT_TRUE(EXPRESSION)) goto failure
+  ::google::protobuf::uint32 tag;
+  // @@protoc_insertion_point(parse_start:dmi.PortComponentChangeAttributes)
+  for (;;) {
+    ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
+    tag = p.first;
+    if (!p.second) goto handle_unusual;
+    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
+      // .dmi.PonIdConfig pon_id_config = 1;
+      case 1: {
+        if (static_cast< ::google::protobuf::uint8>(tag) == (10 & 0xFF)) {
+          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
+               input, mutable_pon_id_config()));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      default: {
+      handle_unusual:
+        if (tag == 0) {
+          goto success;
+        }
+        DO_(::google::protobuf::internal::WireFormat::SkipField(
+              input, tag, _internal_metadata_.mutable_unknown_fields()));
+        break;
+      }
+    }
+  }
+success:
+  // @@protoc_insertion_point(parse_success:dmi.PortComponentChangeAttributes)
+  return true;
+failure:
+  // @@protoc_insertion_point(parse_failure:dmi.PortComponentChangeAttributes)
+  return false;
+#undef DO_
+}
+#endif  // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
+
+void PortComponentChangeAttributes::SerializeWithCachedSizes(
+    ::google::protobuf::io::CodedOutputStream* output) const {
+  // @@protoc_insertion_point(serialize_start:dmi.PortComponentChangeAttributes)
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  // .dmi.PonIdConfig pon_id_config = 1;
+  if (this->has_pon_id_config()) {
+    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
+      1, HasBitSetters::pon_id_config(this), output);
+  }
+
+  if (_internal_metadata_.have_unknown_fields()) {
+    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
+        _internal_metadata_.unknown_fields(), output);
+  }
+  // @@protoc_insertion_point(serialize_end:dmi.PortComponentChangeAttributes)
+}
+
+::google::protobuf::uint8* PortComponentChangeAttributes::InternalSerializeWithCachedSizesToArray(
+    ::google::protobuf::uint8* target) const {
+  // @@protoc_insertion_point(serialize_to_array_start:dmi.PortComponentChangeAttributes)
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  // .dmi.PonIdConfig pon_id_config = 1;
+  if (this->has_pon_id_config()) {
+    target = ::google::protobuf::internal::WireFormatLite::
+      InternalWriteMessageToArray(
+        1, HasBitSetters::pon_id_config(this), target);
+  }
+
+  if (_internal_metadata_.have_unknown_fields()) {
+    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
+        _internal_metadata_.unknown_fields(), target);
+  }
+  // @@protoc_insertion_point(serialize_to_array_end:dmi.PortComponentChangeAttributes)
+  return target;
+}
+
+size_t PortComponentChangeAttributes::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:dmi.PortComponentChangeAttributes)
+  size_t total_size = 0;
+
+  if (_internal_metadata_.have_unknown_fields()) {
+    total_size +=
+      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
+        _internal_metadata_.unknown_fields());
+  }
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  // .dmi.PonIdConfig pon_id_config = 1;
+  if (this->has_pon_id_config()) {
+    total_size += 1 +
+      ::google::protobuf::internal::WireFormatLite::MessageSize(
+        *pon_id_config_);
+  }
+
+  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
+  SetCachedSize(cached_size);
+  return total_size;
+}
+
+void PortComponentChangeAttributes::MergeFrom(const ::google::protobuf::Message& from) {
+// @@protoc_insertion_point(generalized_merge_from_start:dmi.PortComponentChangeAttributes)
+  GOOGLE_DCHECK_NE(&from, this);
+  const PortComponentChangeAttributes* source =
+      ::google::protobuf::DynamicCastToGenerated<PortComponentChangeAttributes>(
+          &from);
+  if (source == nullptr) {
+  // @@protoc_insertion_point(generalized_merge_from_cast_fail:dmi.PortComponentChangeAttributes)
+    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
+  } else {
+  // @@protoc_insertion_point(generalized_merge_from_cast_success:dmi.PortComponentChangeAttributes)
+    MergeFrom(*source);
+  }
+}
+
+void PortComponentChangeAttributes::MergeFrom(const PortComponentChangeAttributes& from) {
+// @@protoc_insertion_point(class_specific_merge_from_start:dmi.PortComponentChangeAttributes)
+  GOOGLE_DCHECK_NE(&from, this);
+  _internal_metadata_.MergeFrom(from._internal_metadata_);
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  if (from.has_pon_id_config()) {
+    mutable_pon_id_config()->::dmi::PonIdConfig::MergeFrom(from.pon_id_config());
+  }
+}
+
+void PortComponentChangeAttributes::CopyFrom(const ::google::protobuf::Message& from) {
+// @@protoc_insertion_point(generalized_copy_from_start:dmi.PortComponentChangeAttributes)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+void PortComponentChangeAttributes::CopyFrom(const PortComponentChangeAttributes& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:dmi.PortComponentChangeAttributes)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool PortComponentChangeAttributes::IsInitialized() const {
+  return true;
+}
+
+void PortComponentChangeAttributes::Swap(PortComponentChangeAttributes* other) {
+  if (other == this) return;
+  InternalSwap(other);
+}
+void PortComponentChangeAttributes::InternalSwap(PortComponentChangeAttributes* other) {
+  using std::swap;
+  _internal_metadata_.Swap(&other->_internal_metadata_);
+  swap(pon_id_config_, other->pon_id_config_);
+}
+
+::google::protobuf::Metadata PortComponentChangeAttributes::GetMetadata() const {
+  ::google::protobuf::internal::AssignDescriptors(&::assign_descriptors_table_dmi_2fhw_2eproto);
+  return ::file_level_metadata_dmi_2fhw_2eproto[kIndexInFileMessages];
+}
+
+
+// ===================================================================
+
+void PonIdConfig::InitAsDefaultInstance() {
+}
+class PonIdConfig::HasBitSetters {
+ public:
+};
+
+#if !defined(_MSC_VER) || _MSC_VER >= 1900
+const int PonIdConfig::kPonIdFieldNumber;
+const int PonIdConfig::kPonIdTransmitPeriodicityFieldNumber;
+#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
+
+PonIdConfig::PonIdConfig()
+  : ::google::protobuf::Message(), _internal_metadata_(nullptr) {
+  SharedCtor();
+  // @@protoc_insertion_point(constructor:dmi.PonIdConfig)
+}
+PonIdConfig::PonIdConfig(const PonIdConfig& from)
+  : ::google::protobuf::Message(),
+      _internal_metadata_(nullptr) {
+  _internal_metadata_.MergeFrom(from._internal_metadata_);
+  pon_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  if (from.pon_id().size() > 0) {
+    pon_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.pon_id_);
+  }
+  pon_id_transmit_periodicity_ = from.pon_id_transmit_periodicity_;
+  // @@protoc_insertion_point(copy_constructor:dmi.PonIdConfig)
+}
+
+void PonIdConfig::SharedCtor() {
+  ::google::protobuf::internal::InitSCC(
+      &scc_info_PonIdConfig_dmi_2fhw_2eproto.base);
+  pon_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  pon_id_transmit_periodicity_ = 0u;
+}
+
+PonIdConfig::~PonIdConfig() {
+  // @@protoc_insertion_point(destructor:dmi.PonIdConfig)
+  SharedDtor();
+}
+
+void PonIdConfig::SharedDtor() {
+  pon_id_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+
+void PonIdConfig::SetCachedSize(int size) const {
+  _cached_size_.Set(size);
+}
+const PonIdConfig& PonIdConfig::default_instance() {
+  ::google::protobuf::internal::InitSCC(&::scc_info_PonIdConfig_dmi_2fhw_2eproto.base);
+  return *internal_default_instance();
+}
+
+
+void PonIdConfig::Clear() {
+// @@protoc_insertion_point(message_clear_start:dmi.PonIdConfig)
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  pon_id_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  pon_id_transmit_periodicity_ = 0u;
+  _internal_metadata_.Clear();
+}
+
+#if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
+const char* PonIdConfig::_InternalParse(const char* begin, const char* end, void* object,
+                  ::google::protobuf::internal::ParseContext* ctx) {
+  auto msg = static_cast<PonIdConfig*>(object);
+  ::google::protobuf::int32 size; (void)size;
+  int depth; (void)depth;
+  ::google::protobuf::uint32 tag;
+  ::google::protobuf::internal::ParseFunc parser_till_end; (void)parser_till_end;
+  auto ptr = begin;
+  while (ptr < end) {
+    ptr = ::google::protobuf::io::Parse32(ptr, &tag);
+    GOOGLE_PROTOBUF_PARSER_ASSERT(ptr);
+    switch (tag >> 3) {
+      // bytes pon_id = 1;
+      case 1: {
+        if (static_cast<::google::protobuf::uint8>(tag) != 10) goto handle_unusual;
+        ptr = ::google::protobuf::io::ReadSize(ptr, &size);
+        GOOGLE_PROTOBUF_PARSER_ASSERT(ptr);
+        object = msg->mutable_pon_id();
+        if (size > end - ptr + ::google::protobuf::internal::ParseContext::kSlopBytes) {
+          parser_till_end = ::google::protobuf::internal::GreedyStringParser;
+          goto string_till_end;
+        }
+        GOOGLE_PROTOBUF_PARSER_ASSERT(::google::protobuf::internal::StringCheck(ptr, size, ctx));
+        ::google::protobuf::internal::InlineGreedyStringParser(object, ptr, size, ctx);
+        ptr += size;
+        break;
+      }
+      // uint32 pon_id_transmit_periodicity = 2;
+      case 2: {
+        if (static_cast<::google::protobuf::uint8>(tag) != 16) goto handle_unusual;
+        msg->set_pon_id_transmit_periodicity(::google::protobuf::internal::ReadVarint(&ptr));
+        GOOGLE_PROTOBUF_PARSER_ASSERT(ptr);
+        break;
+      }
+      default: {
+      handle_unusual:
+        if ((tag & 7) == 4 || tag == 0) {
+          ctx->EndGroup(tag);
+          return ptr;
+        }
+        auto res = UnknownFieldParse(tag, {_InternalParse, msg},
+          ptr, end, msg->_internal_metadata_.mutable_unknown_fields(), ctx);
+        ptr = res.first;
+        GOOGLE_PROTOBUF_PARSER_ASSERT(ptr != nullptr);
+        if (res.second) return ptr;
+      }
+    }  // switch
+  }  // while
+  return ptr;
+string_till_end:
+  static_cast<::std::string*>(object)->clear();
+  static_cast<::std::string*>(object)->reserve(size);
+  goto len_delim_till_end;
+len_delim_till_end:
+  return ctx->StoreAndTailCall(ptr, end, {_InternalParse, msg},
+                               {parser_till_end, object}, size);
+}
+#else  // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
+bool PonIdConfig::MergePartialFromCodedStream(
+    ::google::protobuf::io::CodedInputStream* input) {
+#define DO_(EXPRESSION) if (!PROTOBUF_PREDICT_TRUE(EXPRESSION)) goto failure
+  ::google::protobuf::uint32 tag;
+  // @@protoc_insertion_point(parse_start:dmi.PonIdConfig)
+  for (;;) {
+    ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
+    tag = p.first;
+    if (!p.second) goto handle_unusual;
+    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
+      // bytes pon_id = 1;
+      case 1: {
+        if (static_cast< ::google::protobuf::uint8>(tag) == (10 & 0xFF)) {
+          DO_(::google::protobuf::internal::WireFormatLite::ReadBytes(
+                input, this->mutable_pon_id()));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      // uint32 pon_id_transmit_periodicity = 2;
+      case 2: {
+        if (static_cast< ::google::protobuf::uint8>(tag) == (16 & 0xFF)) {
+
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+                   ::google::protobuf::uint32, ::google::protobuf::internal::WireFormatLite::TYPE_UINT32>(
+                 input, &pon_id_transmit_periodicity_)));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      default: {
+      handle_unusual:
+        if (tag == 0) {
+          goto success;
+        }
+        DO_(::google::protobuf::internal::WireFormat::SkipField(
+              input, tag, _internal_metadata_.mutable_unknown_fields()));
+        break;
+      }
+    }
+  }
+success:
+  // @@protoc_insertion_point(parse_success:dmi.PonIdConfig)
+  return true;
+failure:
+  // @@protoc_insertion_point(parse_failure:dmi.PonIdConfig)
+  return false;
+#undef DO_
+}
+#endif  // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
+
+void PonIdConfig::SerializeWithCachedSizes(
+    ::google::protobuf::io::CodedOutputStream* output) const {
+  // @@protoc_insertion_point(serialize_start:dmi.PonIdConfig)
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  // bytes pon_id = 1;
+  if (this->pon_id().size() > 0) {
+    ::google::protobuf::internal::WireFormatLite::WriteBytesMaybeAliased(
+      1, this->pon_id(), output);
+  }
+
+  // uint32 pon_id_transmit_periodicity = 2;
+  if (this->pon_id_transmit_periodicity() != 0) {
+    ::google::protobuf::internal::WireFormatLite::WriteUInt32(2, this->pon_id_transmit_periodicity(), output);
+  }
+
+  if (_internal_metadata_.have_unknown_fields()) {
+    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
+        _internal_metadata_.unknown_fields(), output);
+  }
+  // @@protoc_insertion_point(serialize_end:dmi.PonIdConfig)
+}
+
+::google::protobuf::uint8* PonIdConfig::InternalSerializeWithCachedSizesToArray(
+    ::google::protobuf::uint8* target) const {
+  // @@protoc_insertion_point(serialize_to_array_start:dmi.PonIdConfig)
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  // bytes pon_id = 1;
+  if (this->pon_id().size() > 0) {
+    target =
+      ::google::protobuf::internal::WireFormatLite::WriteBytesToArray(
+        1, this->pon_id(), target);
+  }
+
+  // uint32 pon_id_transmit_periodicity = 2;
+  if (this->pon_id_transmit_periodicity() != 0) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteUInt32ToArray(2, this->pon_id_transmit_periodicity(), target);
+  }
+
+  if (_internal_metadata_.have_unknown_fields()) {
+    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
+        _internal_metadata_.unknown_fields(), target);
+  }
+  // @@protoc_insertion_point(serialize_to_array_end:dmi.PonIdConfig)
+  return target;
+}
+
+size_t PonIdConfig::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:dmi.PonIdConfig)
+  size_t total_size = 0;
+
+  if (_internal_metadata_.have_unknown_fields()) {
+    total_size +=
+      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
+        _internal_metadata_.unknown_fields());
+  }
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  // bytes pon_id = 1;
+  if (this->pon_id().size() > 0) {
+    total_size += 1 +
+      ::google::protobuf::internal::WireFormatLite::BytesSize(
+        this->pon_id());
+  }
+
+  // uint32 pon_id_transmit_periodicity = 2;
+  if (this->pon_id_transmit_periodicity() != 0) {
+    total_size += 1 +
+      ::google::protobuf::internal::WireFormatLite::UInt32Size(
+        this->pon_id_transmit_periodicity());
+  }
+
+  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
+  SetCachedSize(cached_size);
+  return total_size;
+}
+
+void PonIdConfig::MergeFrom(const ::google::protobuf::Message& from) {
+// @@protoc_insertion_point(generalized_merge_from_start:dmi.PonIdConfig)
+  GOOGLE_DCHECK_NE(&from, this);
+  const PonIdConfig* source =
+      ::google::protobuf::DynamicCastToGenerated<PonIdConfig>(
+          &from);
+  if (source == nullptr) {
+  // @@protoc_insertion_point(generalized_merge_from_cast_fail:dmi.PonIdConfig)
+    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
+  } else {
+  // @@protoc_insertion_point(generalized_merge_from_cast_success:dmi.PonIdConfig)
+    MergeFrom(*source);
+  }
+}
+
+void PonIdConfig::MergeFrom(const PonIdConfig& from) {
+// @@protoc_insertion_point(class_specific_merge_from_start:dmi.PonIdConfig)
+  GOOGLE_DCHECK_NE(&from, this);
+  _internal_metadata_.MergeFrom(from._internal_metadata_);
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  if (from.pon_id().size() > 0) {
+
+    pon_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.pon_id_);
+  }
+  if (from.pon_id_transmit_periodicity() != 0) {
+    set_pon_id_transmit_periodicity(from.pon_id_transmit_periodicity());
+  }
+}
+
+void PonIdConfig::CopyFrom(const ::google::protobuf::Message& from) {
+// @@protoc_insertion_point(generalized_copy_from_start:dmi.PonIdConfig)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+void PonIdConfig::CopyFrom(const PonIdConfig& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:dmi.PonIdConfig)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool PonIdConfig::IsInitialized() const {
+  return true;
+}
+
+void PonIdConfig::Swap(PonIdConfig* other) {
+  if (other == this) return;
+  InternalSwap(other);
+}
+void PonIdConfig::InternalSwap(PonIdConfig* other) {
+  using std::swap;
+  _internal_metadata_.Swap(&other->_internal_metadata_);
+  pon_id_.Swap(&other->pon_id_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+    GetArenaNoVirtual());
+  swap(pon_id_transmit_periodicity_, other->pon_id_transmit_periodicity_);
+}
+
+::google::protobuf::Metadata PonIdConfig::GetMetadata() const {
+  ::google::protobuf::internal::AssignDescriptors(&::assign_descriptors_table_dmi_2fhw_2eproto);
+  return ::file_level_metadata_dmi_2fhw_2eproto[kIndexInFileMessages];
+}
+
+
+// ===================================================================
+
 void ContainerComponentAttributes::InitAsDefaultInstance() {
 }
 class ContainerComponentAttributes::HasBitSetters {
@@ -7076,11 +7903,14 @@
       ::dmi::Component::internal_default_instance());
   ::dmi::_ModifiableComponent_default_instance_._instance.get_mutable()->uri_ = const_cast< ::dmi::Uri*>(
       ::dmi::Uri::internal_default_instance());
+  ::dmi::_ModifiableComponent_default_instance_.port_attr_ = const_cast< ::dmi::PortComponentChangeAttributes*>(
+      ::dmi::PortComponentChangeAttributes::internal_default_instance());
 }
 class ModifiableComponent::HasBitSetters {
  public:
   static const ::dmi::Component& parent(const ModifiableComponent* msg);
   static const ::dmi::Uri& uri(const ModifiableComponent* msg);
+  static const ::dmi::PortComponentChangeAttributes& port_attr(const ModifiableComponent* msg);
 };
 
 const ::dmi::Component&
@@ -7091,6 +7921,24 @@
 ModifiableComponent::HasBitSetters::uri(const ModifiableComponent* msg) {
   return *msg->uri_;
 }
+const ::dmi::PortComponentChangeAttributes&
+ModifiableComponent::HasBitSetters::port_attr(const ModifiableComponent* msg) {
+  return *msg->specific_.port_attr_;
+}
+void ModifiableComponent::set_allocated_port_attr(::dmi::PortComponentChangeAttributes* port_attr) {
+  ::google::protobuf::Arena* message_arena = GetArenaNoVirtual();
+  clear_specific();
+  if (port_attr) {
+    ::google::protobuf::Arena* submessage_arena = nullptr;
+    if (message_arena != submessage_arena) {
+      port_attr = ::google::protobuf::internal::GetOwnedMessage(
+          message_arena, port_attr, submessage_arena);
+    }
+    set_has_port_attr();
+    specific_.port_attr_ = port_attr;
+  }
+  // @@protoc_insertion_point(field_set_allocated:dmi.ModifiableComponent.port_attr)
+}
 #if !defined(_MSC_VER) || _MSC_VER >= 1900
 const int ModifiableComponent::kNameFieldNumber;
 const int ModifiableComponent::kClassFieldNumber;
@@ -7100,6 +7948,7 @@
 const int ModifiableComponent::kAssetIdFieldNumber;
 const int ModifiableComponent::kUriFieldNumber;
 const int ModifiableComponent::kAdminStateFieldNumber;
+const int ModifiableComponent::kPortAttrFieldNumber;
 #endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
 
 ModifiableComponent::ModifiableComponent()
@@ -7136,6 +7985,16 @@
   ::memcpy(&class__, &from.class__,
     static_cast<size_t>(reinterpret_cast<char*>(&admin_state_) -
     reinterpret_cast<char*>(&class__)) + sizeof(admin_state_));
+  clear_has_specific();
+  switch (from.specific_case()) {
+    case kPortAttr: {
+      mutable_port_attr()->::dmi::PortComponentChangeAttributes::MergeFrom(from.port_attr());
+      break;
+    }
+    case SPECIFIC_NOT_SET: {
+      break;
+    }
+  }
   // @@protoc_insertion_point(copy_constructor:dmi.ModifiableComponent)
 }
 
@@ -7148,6 +8007,7 @@
   ::memset(&parent_, 0, static_cast<size_t>(
       reinterpret_cast<char*>(&admin_state_) -
       reinterpret_cast<char*>(&parent_)) + sizeof(admin_state_));
+  clear_has_specific();
 }
 
 ModifiableComponent::~ModifiableComponent() {
@@ -7161,6 +8021,9 @@
   asset_id_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
   if (this != internal_default_instance()) delete parent_;
   if (this != internal_default_instance()) delete uri_;
+  if (has_specific()) {
+    clear_specific();
+  }
 }
 
 void ModifiableComponent::SetCachedSize(int size) const {
@@ -7172,6 +8035,21 @@
 }
 
 
+void ModifiableComponent::clear_specific() {
+// @@protoc_insertion_point(one_of_clear_start:dmi.ModifiableComponent)
+  switch (specific_case()) {
+    case kPortAttr: {
+      delete specific_.port_attr_;
+      break;
+    }
+    case SPECIFIC_NOT_SET: {
+      break;
+    }
+  }
+  _oneof_case_[0] = SPECIFIC_NOT_SET;
+}
+
+
 void ModifiableComponent::Clear() {
 // @@protoc_insertion_point(message_clear_start:dmi.ModifiableComponent)
   ::google::protobuf::uint32 cached_has_bits = 0;
@@ -7192,6 +8070,7 @@
   ::memset(&class__, 0, static_cast<size_t>(
       reinterpret_cast<char*>(&admin_state_) -
       reinterpret_cast<char*>(&class__)) + sizeof(admin_state_));
+  clear_specific();
   _internal_metadata_.Clear();
 }
 
@@ -7305,6 +8184,19 @@
         GOOGLE_PROTOBUF_PARSER_ASSERT(ptr);
         break;
       }
+      // .dmi.PortComponentChangeAttributes port_attr = 50;
+      case 50: {
+        if (static_cast<::google::protobuf::uint8>(tag) != 146) goto handle_unusual;
+        ptr = ::google::protobuf::io::ReadSize(ptr, &size);
+        GOOGLE_PROTOBUF_PARSER_ASSERT(ptr);
+        parser_till_end = ::dmi::PortComponentChangeAttributes::_InternalParse;
+        object = msg->mutable_port_attr();
+        if (size > end - ptr) goto len_delim_till_end;
+        ptr += size;
+        GOOGLE_PROTOBUF_PARSER_ASSERT(ctx->ParseExactRange(
+            {parser_till_end, object}, ptr - size, ptr));
+        break;
+      }
       default: {
       handle_unusual:
         if ((tag & 7) == 4 || tag == 0) {
@@ -7335,7 +8227,7 @@
   ::google::protobuf::uint32 tag;
   // @@protoc_insertion_point(parse_start:dmi.ModifiableComponent)
   for (;;) {
-    ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
+    ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(16383u);
     tag = p.first;
     if (!p.second) goto handle_unusual;
     switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
@@ -7447,6 +8339,17 @@
         break;
       }
 
+      // .dmi.PortComponentChangeAttributes port_attr = 50;
+      case 50: {
+        if (static_cast< ::google::protobuf::uint8>(tag) == (402 & 0xFF)) {
+          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
+               input, mutable_port_attr()));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
       default: {
       handle_unusual:
         if (tag == 0) {
@@ -7533,6 +8436,12 @@
       8, this->admin_state(), output);
   }
 
+  // .dmi.PortComponentChangeAttributes port_attr = 50;
+  if (has_port_attr()) {
+    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
+      50, HasBitSetters::port_attr(this), output);
+  }
+
   if (_internal_metadata_.have_unknown_fields()) {
     ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
         _internal_metadata_.unknown_fields(), output);
@@ -7610,6 +8519,13 @@
       8, this->admin_state(), target);
   }
 
+  // .dmi.PortComponentChangeAttributes port_attr = 50;
+  if (has_port_attr()) {
+    target = ::google::protobuf::internal::WireFormatLite::
+      InternalWriteMessageToArray(
+        50, HasBitSetters::port_attr(this), target);
+  }
+
   if (_internal_metadata_.have_unknown_fields()) {
     target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
         _internal_metadata_.unknown_fields(), target);
@@ -7685,6 +8601,18 @@
       ::google::protobuf::internal::WireFormatLite::EnumSize(this->admin_state());
   }
 
+  switch (specific_case()) {
+    // .dmi.PortComponentChangeAttributes port_attr = 50;
+    case kPortAttr: {
+      total_size += 2 +
+        ::google::protobuf::internal::WireFormatLite::MessageSize(
+          *specific_.port_attr_);
+      break;
+    }
+    case SPECIFIC_NOT_SET: {
+      break;
+    }
+  }
   int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
   SetCachedSize(cached_size);
   return total_size;
@@ -7739,6 +8667,15 @@
   if (from.admin_state() != 0) {
     set_admin_state(from.admin_state());
   }
+  switch (from.specific_case()) {
+    case kPortAttr: {
+      mutable_port_attr()->::dmi::PortComponentChangeAttributes::MergeFrom(from.port_attr());
+      break;
+    }
+    case SPECIFIC_NOT_SET: {
+      break;
+    }
+  }
 }
 
 void ModifiableComponent::CopyFrom(const ::google::protobuf::Message& from) {
@@ -7777,6 +8714,8 @@
   swap(class__, other->class__);
   swap(parent_rel_pos_, other->parent_rel_pos_);
   swap(admin_state_, other->admin_state_);
+  swap(specific_, other->specific_);
+  swap(_oneof_case_[0], other->_oneof_case_[0]);
 }
 
 ::google::protobuf::Metadata ModifiableComponent::GetMetadata() const {
@@ -7807,6 +8746,12 @@
 template<> PROTOBUF_NOINLINE ::dmi::PortComponentAttributes* Arena::CreateMaybeMessage< ::dmi::PortComponentAttributes >(Arena* arena) {
   return Arena::CreateInternal< ::dmi::PortComponentAttributes >(arena);
 }
+template<> PROTOBUF_NOINLINE ::dmi::PortComponentChangeAttributes* Arena::CreateMaybeMessage< ::dmi::PortComponentChangeAttributes >(Arena* arena) {
+  return Arena::CreateInternal< ::dmi::PortComponentChangeAttributes >(arena);
+}
+template<> PROTOBUF_NOINLINE ::dmi::PonIdConfig* Arena::CreateMaybeMessage< ::dmi::PonIdConfig >(Arena* arena) {
+  return Arena::CreateInternal< ::dmi::PonIdConfig >(arena);
+}
 template<> PROTOBUF_NOINLINE ::dmi::ContainerComponentAttributes* Arena::CreateMaybeMessage< ::dmi::ContainerComponentAttributes >(Arena* arena) {
   return Arena::CreateInternal< ::dmi::ContainerComponentAttributes >(arena);
 }
diff --git a/cpp/dmi/hw.pb.h b/cpp/dmi/hw.pb.h
index f4b9c89..b1b3127 100644
--- a/cpp/dmi/hw.pb.h
+++ b/cpp/dmi/hw.pb.h
@@ -43,7 +43,7 @@
     PROTOBUF_SECTION_VARIABLE(protodesc_cold);
   static const ::google::protobuf::internal::AuxillaryParseTableField aux[]
     PROTOBUF_SECTION_VARIABLE(protodesc_cold);
-  static const ::google::protobuf::internal::ParseTable schema[12]
+  static const ::google::protobuf::internal::ParseTable schema[14]
     PROTOBUF_SECTION_VARIABLE(protodesc_cold);
   static const ::google::protobuf::internal::FieldMetadata field_metadata[];
   static const ::google::protobuf::internal::SerializationTable serialization_table[];
@@ -72,9 +72,15 @@
 class ModifiableComponent;
 class ModifiableComponentDefaultTypeInternal;
 extern ModifiableComponentDefaultTypeInternal _ModifiableComponent_default_instance_;
+class PonIdConfig;
+class PonIdConfigDefaultTypeInternal;
+extern PonIdConfigDefaultTypeInternal _PonIdConfig_default_instance_;
 class PortComponentAttributes;
 class PortComponentAttributesDefaultTypeInternal;
 extern PortComponentAttributesDefaultTypeInternal _PortComponentAttributes_default_instance_;
+class PortComponentChangeAttributes;
+class PortComponentChangeAttributesDefaultTypeInternal;
+extern PortComponentChangeAttributesDefaultTypeInternal _PortComponentChangeAttributes_default_instance_;
 class PsuComponentAttributes;
 class PsuComponentAttributesDefaultTypeInternal;
 extern PsuComponentAttributesDefaultTypeInternal _PsuComponentAttributes_default_instance_;
@@ -97,7 +103,9 @@
 template<> ::dmi::Hardware* Arena::CreateMaybeMessage<::dmi::Hardware>(Arena*);
 template<> ::dmi::HardwareID* Arena::CreateMaybeMessage<::dmi::HardwareID>(Arena*);
 template<> ::dmi::ModifiableComponent* Arena::CreateMaybeMessage<::dmi::ModifiableComponent>(Arena*);
+template<> ::dmi::PonIdConfig* Arena::CreateMaybeMessage<::dmi::PonIdConfig>(Arena*);
 template<> ::dmi::PortComponentAttributes* Arena::CreateMaybeMessage<::dmi::PortComponentAttributes>(Arena*);
+template<> ::dmi::PortComponentChangeAttributes* Arena::CreateMaybeMessage<::dmi::PortComponentChangeAttributes>(Arena*);
 template<> ::dmi::PsuComponentAttributes* Arena::CreateMaybeMessage<::dmi::PsuComponentAttributes>(Arena*);
 template<> ::dmi::TransceiverComponentsAttributes* Arena::CreateMaybeMessage<::dmi::TransceiverComponentsAttributes>(Arena*);
 template<> ::dmi::Uri* Arena::CreateMaybeMessage<::dmi::Uri>(Arena*);
@@ -1443,6 +1451,29 @@
   ::std::string* release_physical_label();
   void set_allocated_physical_label(::std::string* physical_label);
 
+  // string mapping_label = 5;
+  void clear_mapping_label();
+  static const int kMappingLabelFieldNumber = 5;
+  const ::std::string& mapping_label() const;
+  void set_mapping_label(const ::std::string& value);
+  #if LANG_CXX11
+  void set_mapping_label(::std::string&& value);
+  #endif
+  void set_mapping_label(const char* value);
+  void set_mapping_label(const char* value, size_t size);
+  ::std::string* mutable_mapping_label();
+  ::std::string* release_mapping_label();
+  void set_allocated_mapping_label(::std::string* mapping_label);
+
+  // .dmi.PonIdConfig pon_id_config = 6;
+  bool has_pon_id_config() const;
+  void clear_pon_id_config();
+  static const int kPonIdConfigFieldNumber = 6;
+  const ::dmi::PonIdConfig& pon_id_config() const;
+  ::dmi::PonIdConfig* release_pon_id_config();
+  ::dmi::PonIdConfig* mutable_pon_id_config();
+  void set_allocated_pon_id_config(::dmi::PonIdConfig* pon_id_config);
+
   // .dmi.PortComponentAttributes.ConnectorType connector_type = 1;
   void clear_connector_type();
   static const int kConnectorTypeFieldNumber = 1;
@@ -1467,6 +1498,8 @@
 
   ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
   ::google::protobuf::internal::ArenaStringPtr physical_label_;
+  ::google::protobuf::internal::ArenaStringPtr mapping_label_;
+  ::dmi::PonIdConfig* pon_id_config_;
   int connector_type_;
   int speed_;
   int protocol_;
@@ -1475,6 +1508,248 @@
 };
 // -------------------------------------------------------------------
 
+class PortComponentChangeAttributes final :
+    public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:dmi.PortComponentChangeAttributes) */ {
+ public:
+  PortComponentChangeAttributes();
+  virtual ~PortComponentChangeAttributes();
+
+  PortComponentChangeAttributes(const PortComponentChangeAttributes& from);
+
+  inline PortComponentChangeAttributes& operator=(const PortComponentChangeAttributes& from) {
+    CopyFrom(from);
+    return *this;
+  }
+  #if LANG_CXX11
+  PortComponentChangeAttributes(PortComponentChangeAttributes&& from) noexcept
+    : PortComponentChangeAttributes() {
+    *this = ::std::move(from);
+  }
+
+  inline PortComponentChangeAttributes& operator=(PortComponentChangeAttributes&& from) noexcept {
+    if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
+      if (this != &from) InternalSwap(&from);
+    } else {
+      CopyFrom(from);
+    }
+    return *this;
+  }
+  #endif
+  static const ::google::protobuf::Descriptor* descriptor() {
+    return default_instance().GetDescriptor();
+  }
+  static const PortComponentChangeAttributes& default_instance();
+
+  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
+  static inline const PortComponentChangeAttributes* internal_default_instance() {
+    return reinterpret_cast<const PortComponentChangeAttributes*>(
+               &_PortComponentChangeAttributes_default_instance_);
+  }
+  static constexpr int kIndexInFileMessages =
+    6;
+
+  void Swap(PortComponentChangeAttributes* other);
+  friend void swap(PortComponentChangeAttributes& a, PortComponentChangeAttributes& b) {
+    a.Swap(&b);
+  }
+
+  // implements Message ----------------------------------------------
+
+  inline PortComponentChangeAttributes* New() const final {
+    return CreateMaybeMessage<PortComponentChangeAttributes>(nullptr);
+  }
+
+  PortComponentChangeAttributes* New(::google::protobuf::Arena* arena) const final {
+    return CreateMaybeMessage<PortComponentChangeAttributes>(arena);
+  }
+  void CopyFrom(const ::google::protobuf::Message& from) final;
+  void MergeFrom(const ::google::protobuf::Message& from) final;
+  void CopyFrom(const PortComponentChangeAttributes& from);
+  void MergeFrom(const PortComponentChangeAttributes& from);
+  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
+  bool IsInitialized() const final;
+
+  size_t ByteSizeLong() const final;
+  #if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
+  static const char* _InternalParse(const char* begin, const char* end, void* object, ::google::protobuf::internal::ParseContext* ctx);
+  ::google::protobuf::internal::ParseFunc _ParseFunc() const final { return _InternalParse; }
+  #else
+  bool MergePartialFromCodedStream(
+      ::google::protobuf::io::CodedInputStream* input) final;
+  #endif  // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
+  void SerializeWithCachedSizes(
+      ::google::protobuf::io::CodedOutputStream* output) const final;
+  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
+      ::google::protobuf::uint8* target) const final;
+  int GetCachedSize() const final { return _cached_size_.Get(); }
+
+  private:
+  void SharedCtor();
+  void SharedDtor();
+  void SetCachedSize(int size) const final;
+  void InternalSwap(PortComponentChangeAttributes* other);
+  private:
+  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
+    return nullptr;
+  }
+  inline void* MaybeArenaPtr() const {
+    return nullptr;
+  }
+  public:
+
+  ::google::protobuf::Metadata GetMetadata() const final;
+
+  // nested types ----------------------------------------------------
+
+  // accessors -------------------------------------------------------
+
+  // .dmi.PonIdConfig pon_id_config = 1;
+  bool has_pon_id_config() const;
+  void clear_pon_id_config();
+  static const int kPonIdConfigFieldNumber = 1;
+  const ::dmi::PonIdConfig& pon_id_config() const;
+  ::dmi::PonIdConfig* release_pon_id_config();
+  ::dmi::PonIdConfig* mutable_pon_id_config();
+  void set_allocated_pon_id_config(::dmi::PonIdConfig* pon_id_config);
+
+  // @@protoc_insertion_point(class_scope:dmi.PortComponentChangeAttributes)
+ private:
+  class HasBitSetters;
+
+  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
+  ::dmi::PonIdConfig* pon_id_config_;
+  mutable ::google::protobuf::internal::CachedSize _cached_size_;
+  friend struct ::TableStruct_dmi_2fhw_2eproto;
+};
+// -------------------------------------------------------------------
+
+class PonIdConfig final :
+    public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:dmi.PonIdConfig) */ {
+ public:
+  PonIdConfig();
+  virtual ~PonIdConfig();
+
+  PonIdConfig(const PonIdConfig& from);
+
+  inline PonIdConfig& operator=(const PonIdConfig& from) {
+    CopyFrom(from);
+    return *this;
+  }
+  #if LANG_CXX11
+  PonIdConfig(PonIdConfig&& from) noexcept
+    : PonIdConfig() {
+    *this = ::std::move(from);
+  }
+
+  inline PonIdConfig& operator=(PonIdConfig&& from) noexcept {
+    if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
+      if (this != &from) InternalSwap(&from);
+    } else {
+      CopyFrom(from);
+    }
+    return *this;
+  }
+  #endif
+  static const ::google::protobuf::Descriptor* descriptor() {
+    return default_instance().GetDescriptor();
+  }
+  static const PonIdConfig& default_instance();
+
+  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
+  static inline const PonIdConfig* internal_default_instance() {
+    return reinterpret_cast<const PonIdConfig*>(
+               &_PonIdConfig_default_instance_);
+  }
+  static constexpr int kIndexInFileMessages =
+    7;
+
+  void Swap(PonIdConfig* other);
+  friend void swap(PonIdConfig& a, PonIdConfig& b) {
+    a.Swap(&b);
+  }
+
+  // implements Message ----------------------------------------------
+
+  inline PonIdConfig* New() const final {
+    return CreateMaybeMessage<PonIdConfig>(nullptr);
+  }
+
+  PonIdConfig* New(::google::protobuf::Arena* arena) const final {
+    return CreateMaybeMessage<PonIdConfig>(arena);
+  }
+  void CopyFrom(const ::google::protobuf::Message& from) final;
+  void MergeFrom(const ::google::protobuf::Message& from) final;
+  void CopyFrom(const PonIdConfig& from);
+  void MergeFrom(const PonIdConfig& from);
+  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
+  bool IsInitialized() const final;
+
+  size_t ByteSizeLong() const final;
+  #if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
+  static const char* _InternalParse(const char* begin, const char* end, void* object, ::google::protobuf::internal::ParseContext* ctx);
+  ::google::protobuf::internal::ParseFunc _ParseFunc() const final { return _InternalParse; }
+  #else
+  bool MergePartialFromCodedStream(
+      ::google::protobuf::io::CodedInputStream* input) final;
+  #endif  // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
+  void SerializeWithCachedSizes(
+      ::google::protobuf::io::CodedOutputStream* output) const final;
+  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
+      ::google::protobuf::uint8* target) const final;
+  int GetCachedSize() const final { return _cached_size_.Get(); }
+
+  private:
+  void SharedCtor();
+  void SharedDtor();
+  void SetCachedSize(int size) const final;
+  void InternalSwap(PonIdConfig* other);
+  private:
+  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
+    return nullptr;
+  }
+  inline void* MaybeArenaPtr() const {
+    return nullptr;
+  }
+  public:
+
+  ::google::protobuf::Metadata GetMetadata() const final;
+
+  // nested types ----------------------------------------------------
+
+  // accessors -------------------------------------------------------
+
+  // bytes pon_id = 1;
+  void clear_pon_id();
+  static const int kPonIdFieldNumber = 1;
+  const ::std::string& pon_id() const;
+  void set_pon_id(const ::std::string& value);
+  #if LANG_CXX11
+  void set_pon_id(::std::string&& value);
+  #endif
+  void set_pon_id(const char* value);
+  void set_pon_id(const void* value, size_t size);
+  ::std::string* mutable_pon_id();
+  ::std::string* release_pon_id();
+  void set_allocated_pon_id(::std::string* pon_id);
+
+  // uint32 pon_id_transmit_periodicity = 2;
+  void clear_pon_id_transmit_periodicity();
+  static const int kPonIdTransmitPeriodicityFieldNumber = 2;
+  ::google::protobuf::uint32 pon_id_transmit_periodicity() const;
+  void set_pon_id_transmit_periodicity(::google::protobuf::uint32 value);
+
+  // @@protoc_insertion_point(class_scope:dmi.PonIdConfig)
+ private:
+  class HasBitSetters;
+
+  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
+  ::google::protobuf::internal::ArenaStringPtr pon_id_;
+  ::google::protobuf::uint32 pon_id_transmit_periodicity_;
+  mutable ::google::protobuf::internal::CachedSize _cached_size_;
+  friend struct ::TableStruct_dmi_2fhw_2eproto;
+};
+// -------------------------------------------------------------------
+
 class ContainerComponentAttributes final :
     public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:dmi.ContainerComponentAttributes) */ {
  public:
@@ -1513,7 +1788,7 @@
                &_ContainerComponentAttributes_default_instance_);
   }
   static constexpr int kIndexInFileMessages =
-    6;
+    8;
 
   void Swap(ContainerComponentAttributes* other);
   friend void swap(ContainerComponentAttributes& a, ContainerComponentAttributes& b) {
@@ -1633,7 +1908,7 @@
                &_PsuComponentAttributes_default_instance_);
   }
   static constexpr int kIndexInFileMessages =
-    7;
+    9;
 
   void Swap(PsuComponentAttributes* other);
   friend void swap(PsuComponentAttributes& a, PsuComponentAttributes& b) {
@@ -1775,7 +2050,7 @@
                &_TransceiverComponentsAttributes_default_instance_);
   }
   static constexpr int kIndexInFileMessages =
-    8;
+    10;
 
   void Swap(TransceiverComponentsAttributes* other);
   friend void swap(TransceiverComponentsAttributes& a, TransceiverComponentsAttributes& b) {
@@ -2041,7 +2316,7 @@
                &_Component_default_instance_);
   }
   static constexpr int kIndexInFileMessages =
-    9;
+    11;
 
   void Swap(Component* other);
   friend void swap(Component& a, Component& b) {
@@ -2452,7 +2727,7 @@
                &_Hardware_default_instance_);
   }
   static constexpr int kIndexInFileMessages =
-    10;
+    12;
 
   void Swap(Hardware* other);
   friend void swap(Hardware& a, Hardware& b) {
@@ -2581,13 +2856,18 @@
   }
   static const ModifiableComponent& default_instance();
 
+  enum SpecificCase {
+    kPortAttr = 50,
+    SPECIFIC_NOT_SET = 0,
+  };
+
   static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
   static inline const ModifiableComponent* internal_default_instance() {
     return reinterpret_cast<const ModifiableComponent*>(
                &_ModifiableComponent_default_instance_);
   }
   static constexpr int kIndexInFileMessages =
-    11;
+    13;
 
   void Swap(ModifiableComponent* other);
   friend void swap(ModifiableComponent& a, ModifiableComponent& b) {
@@ -2722,9 +3002,24 @@
   ::dmi::ComponentAdminState admin_state() const;
   void set_admin_state(::dmi::ComponentAdminState value);
 
+  // .dmi.PortComponentChangeAttributes port_attr = 50;
+  bool has_port_attr() const;
+  void clear_port_attr();
+  static const int kPortAttrFieldNumber = 50;
+  const ::dmi::PortComponentChangeAttributes& port_attr() const;
+  ::dmi::PortComponentChangeAttributes* release_port_attr();
+  ::dmi::PortComponentChangeAttributes* mutable_port_attr();
+  void set_allocated_port_attr(::dmi::PortComponentChangeAttributes* port_attr);
+
+  void clear_specific();
+  SpecificCase specific_case() const;
   // @@protoc_insertion_point(class_scope:dmi.ModifiableComponent)
  private:
   class HasBitSetters;
+  void set_has_port_attr();
+
+  inline bool has_specific() const;
+  inline void clear_has_specific();
 
   ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
   ::google::protobuf::internal::ArenaStringPtr name_;
@@ -2735,7 +3030,13 @@
   int class__;
   ::google::protobuf::int32 parent_rel_pos_;
   int admin_state_;
+  union SpecificUnion {
+    SpecificUnion() {}
+    ::dmi::PortComponentChangeAttributes* port_attr_;
+  } specific_;
   mutable ::google::protobuf::internal::CachedSize _cached_size_;
+  ::google::protobuf::uint32 _oneof_case_[1];
+
   friend struct ::TableStruct_dmi_2fhw_2eproto;
 };
 // ===================================================================
@@ -3373,6 +3674,236 @@
   // @@protoc_insertion_point(field_set_allocated:dmi.PortComponentAttributes.physical_label)
 }
 
+// string mapping_label = 5;
+inline void PortComponentAttributes::clear_mapping_label() {
+  mapping_label_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline const ::std::string& PortComponentAttributes::mapping_label() const {
+  // @@protoc_insertion_point(field_get:dmi.PortComponentAttributes.mapping_label)
+  return mapping_label_.GetNoArena();
+}
+inline void PortComponentAttributes::set_mapping_label(const ::std::string& value) {
+  
+  mapping_label_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
+  // @@protoc_insertion_point(field_set:dmi.PortComponentAttributes.mapping_label)
+}
+#if LANG_CXX11
+inline void PortComponentAttributes::set_mapping_label(::std::string&& value) {
+  
+  mapping_label_.SetNoArena(
+    &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
+  // @@protoc_insertion_point(field_set_rvalue:dmi.PortComponentAttributes.mapping_label)
+}
+#endif
+inline void PortComponentAttributes::set_mapping_label(const char* value) {
+  GOOGLE_DCHECK(value != nullptr);
+  
+  mapping_label_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
+  // @@protoc_insertion_point(field_set_char:dmi.PortComponentAttributes.mapping_label)
+}
+inline void PortComponentAttributes::set_mapping_label(const char* value, size_t size) {
+  
+  mapping_label_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+      ::std::string(reinterpret_cast<const char*>(value), size));
+  // @@protoc_insertion_point(field_set_pointer:dmi.PortComponentAttributes.mapping_label)
+}
+inline ::std::string* PortComponentAttributes::mutable_mapping_label() {
+  
+  // @@protoc_insertion_point(field_mutable:dmi.PortComponentAttributes.mapping_label)
+  return mapping_label_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline ::std::string* PortComponentAttributes::release_mapping_label() {
+  // @@protoc_insertion_point(field_release:dmi.PortComponentAttributes.mapping_label)
+  
+  return mapping_label_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline void PortComponentAttributes::set_allocated_mapping_label(::std::string* mapping_label) {
+  if (mapping_label != nullptr) {
+    
+  } else {
+    
+  }
+  mapping_label_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), mapping_label);
+  // @@protoc_insertion_point(field_set_allocated:dmi.PortComponentAttributes.mapping_label)
+}
+
+// .dmi.PonIdConfig pon_id_config = 6;
+inline bool PortComponentAttributes::has_pon_id_config() const {
+  return this != internal_default_instance() && pon_id_config_ != nullptr;
+}
+inline void PortComponentAttributes::clear_pon_id_config() {
+  if (GetArenaNoVirtual() == nullptr && pon_id_config_ != nullptr) {
+    delete pon_id_config_;
+  }
+  pon_id_config_ = nullptr;
+}
+inline const ::dmi::PonIdConfig& PortComponentAttributes::pon_id_config() const {
+  const ::dmi::PonIdConfig* p = pon_id_config_;
+  // @@protoc_insertion_point(field_get:dmi.PortComponentAttributes.pon_id_config)
+  return p != nullptr ? *p : *reinterpret_cast<const ::dmi::PonIdConfig*>(
+      &::dmi::_PonIdConfig_default_instance_);
+}
+inline ::dmi::PonIdConfig* PortComponentAttributes::release_pon_id_config() {
+  // @@protoc_insertion_point(field_release:dmi.PortComponentAttributes.pon_id_config)
+  
+  ::dmi::PonIdConfig* temp = pon_id_config_;
+  pon_id_config_ = nullptr;
+  return temp;
+}
+inline ::dmi::PonIdConfig* PortComponentAttributes::mutable_pon_id_config() {
+  
+  if (pon_id_config_ == nullptr) {
+    auto* p = CreateMaybeMessage<::dmi::PonIdConfig>(GetArenaNoVirtual());
+    pon_id_config_ = p;
+  }
+  // @@protoc_insertion_point(field_mutable:dmi.PortComponentAttributes.pon_id_config)
+  return pon_id_config_;
+}
+inline void PortComponentAttributes::set_allocated_pon_id_config(::dmi::PonIdConfig* pon_id_config) {
+  ::google::protobuf::Arena* message_arena = GetArenaNoVirtual();
+  if (message_arena == nullptr) {
+    delete pon_id_config_;
+  }
+  if (pon_id_config) {
+    ::google::protobuf::Arena* submessage_arena = nullptr;
+    if (message_arena != submessage_arena) {
+      pon_id_config = ::google::protobuf::internal::GetOwnedMessage(
+          message_arena, pon_id_config, submessage_arena);
+    }
+    
+  } else {
+    
+  }
+  pon_id_config_ = pon_id_config;
+  // @@protoc_insertion_point(field_set_allocated:dmi.PortComponentAttributes.pon_id_config)
+}
+
+// -------------------------------------------------------------------
+
+// PortComponentChangeAttributes
+
+// .dmi.PonIdConfig pon_id_config = 1;
+inline bool PortComponentChangeAttributes::has_pon_id_config() const {
+  return this != internal_default_instance() && pon_id_config_ != nullptr;
+}
+inline void PortComponentChangeAttributes::clear_pon_id_config() {
+  if (GetArenaNoVirtual() == nullptr && pon_id_config_ != nullptr) {
+    delete pon_id_config_;
+  }
+  pon_id_config_ = nullptr;
+}
+inline const ::dmi::PonIdConfig& PortComponentChangeAttributes::pon_id_config() const {
+  const ::dmi::PonIdConfig* p = pon_id_config_;
+  // @@protoc_insertion_point(field_get:dmi.PortComponentChangeAttributes.pon_id_config)
+  return p != nullptr ? *p : *reinterpret_cast<const ::dmi::PonIdConfig*>(
+      &::dmi::_PonIdConfig_default_instance_);
+}
+inline ::dmi::PonIdConfig* PortComponentChangeAttributes::release_pon_id_config() {
+  // @@protoc_insertion_point(field_release:dmi.PortComponentChangeAttributes.pon_id_config)
+  
+  ::dmi::PonIdConfig* temp = pon_id_config_;
+  pon_id_config_ = nullptr;
+  return temp;
+}
+inline ::dmi::PonIdConfig* PortComponentChangeAttributes::mutable_pon_id_config() {
+  
+  if (pon_id_config_ == nullptr) {
+    auto* p = CreateMaybeMessage<::dmi::PonIdConfig>(GetArenaNoVirtual());
+    pon_id_config_ = p;
+  }
+  // @@protoc_insertion_point(field_mutable:dmi.PortComponentChangeAttributes.pon_id_config)
+  return pon_id_config_;
+}
+inline void PortComponentChangeAttributes::set_allocated_pon_id_config(::dmi::PonIdConfig* pon_id_config) {
+  ::google::protobuf::Arena* message_arena = GetArenaNoVirtual();
+  if (message_arena == nullptr) {
+    delete pon_id_config_;
+  }
+  if (pon_id_config) {
+    ::google::protobuf::Arena* submessage_arena = nullptr;
+    if (message_arena != submessage_arena) {
+      pon_id_config = ::google::protobuf::internal::GetOwnedMessage(
+          message_arena, pon_id_config, submessage_arena);
+    }
+    
+  } else {
+    
+  }
+  pon_id_config_ = pon_id_config;
+  // @@protoc_insertion_point(field_set_allocated:dmi.PortComponentChangeAttributes.pon_id_config)
+}
+
+// -------------------------------------------------------------------
+
+// PonIdConfig
+
+// bytes pon_id = 1;
+inline void PonIdConfig::clear_pon_id() {
+  pon_id_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline const ::std::string& PonIdConfig::pon_id() const {
+  // @@protoc_insertion_point(field_get:dmi.PonIdConfig.pon_id)
+  return pon_id_.GetNoArena();
+}
+inline void PonIdConfig::set_pon_id(const ::std::string& value) {
+  
+  pon_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
+  // @@protoc_insertion_point(field_set:dmi.PonIdConfig.pon_id)
+}
+#if LANG_CXX11
+inline void PonIdConfig::set_pon_id(::std::string&& value) {
+  
+  pon_id_.SetNoArena(
+    &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
+  // @@protoc_insertion_point(field_set_rvalue:dmi.PonIdConfig.pon_id)
+}
+#endif
+inline void PonIdConfig::set_pon_id(const char* value) {
+  GOOGLE_DCHECK(value != nullptr);
+  
+  pon_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
+  // @@protoc_insertion_point(field_set_char:dmi.PonIdConfig.pon_id)
+}
+inline void PonIdConfig::set_pon_id(const void* value, size_t size) {
+  
+  pon_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+      ::std::string(reinterpret_cast<const char*>(value), size));
+  // @@protoc_insertion_point(field_set_pointer:dmi.PonIdConfig.pon_id)
+}
+inline ::std::string* PonIdConfig::mutable_pon_id() {
+  
+  // @@protoc_insertion_point(field_mutable:dmi.PonIdConfig.pon_id)
+  return pon_id_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline ::std::string* PonIdConfig::release_pon_id() {
+  // @@protoc_insertion_point(field_release:dmi.PonIdConfig.pon_id)
+  
+  return pon_id_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline void PonIdConfig::set_allocated_pon_id(::std::string* pon_id) {
+  if (pon_id != nullptr) {
+    
+  } else {
+    
+  }
+  pon_id_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), pon_id);
+  // @@protoc_insertion_point(field_set_allocated:dmi.PonIdConfig.pon_id)
+}
+
+// uint32 pon_id_transmit_periodicity = 2;
+inline void PonIdConfig::clear_pon_id_transmit_periodicity() {
+  pon_id_transmit_periodicity_ = 0u;
+}
+inline ::google::protobuf::uint32 PonIdConfig::pon_id_transmit_periodicity() const {
+  // @@protoc_insertion_point(field_get:dmi.PonIdConfig.pon_id_transmit_periodicity)
+  return pon_id_transmit_periodicity_;
+}
+inline void PonIdConfig::set_pon_id_transmit_periodicity(::google::protobuf::uint32 value) {
+  
+  pon_id_transmit_periodicity_ = value;
+  // @@protoc_insertion_point(field_set:dmi.PonIdConfig.pon_id_transmit_periodicity)
+}
+
 // -------------------------------------------------------------------
 
 // ContainerComponentAttributes
@@ -5097,6 +5628,56 @@
   // @@protoc_insertion_point(field_set:dmi.ModifiableComponent.admin_state)
 }
 
+// .dmi.PortComponentChangeAttributes port_attr = 50;
+inline bool ModifiableComponent::has_port_attr() const {
+  return specific_case() == kPortAttr;
+}
+inline void ModifiableComponent::set_has_port_attr() {
+  _oneof_case_[0] = kPortAttr;
+}
+inline void ModifiableComponent::clear_port_attr() {
+  if (has_port_attr()) {
+    delete specific_.port_attr_;
+    clear_has_specific();
+  }
+}
+inline ::dmi::PortComponentChangeAttributes* ModifiableComponent::release_port_attr() {
+  // @@protoc_insertion_point(field_release:dmi.ModifiableComponent.port_attr)
+  if (has_port_attr()) {
+    clear_has_specific();
+      ::dmi::PortComponentChangeAttributes* temp = specific_.port_attr_;
+    specific_.port_attr_ = nullptr;
+    return temp;
+  } else {
+    return nullptr;
+  }
+}
+inline const ::dmi::PortComponentChangeAttributes& ModifiableComponent::port_attr() const {
+  // @@protoc_insertion_point(field_get:dmi.ModifiableComponent.port_attr)
+  return has_port_attr()
+      ? *specific_.port_attr_
+      : *reinterpret_cast< ::dmi::PortComponentChangeAttributes*>(&::dmi::_PortComponentChangeAttributes_default_instance_);
+}
+inline ::dmi::PortComponentChangeAttributes* ModifiableComponent::mutable_port_attr() {
+  if (!has_port_attr()) {
+    clear_specific();
+    set_has_port_attr();
+    specific_.port_attr_ = CreateMaybeMessage< ::dmi::PortComponentChangeAttributes >(
+        GetArenaNoVirtual());
+  }
+  // @@protoc_insertion_point(field_mutable:dmi.ModifiableComponent.port_attr)
+  return specific_.port_attr_;
+}
+
+inline bool ModifiableComponent::has_specific() const {
+  return specific_case() != SPECIFIC_NOT_SET;
+}
+inline void ModifiableComponent::clear_has_specific() {
+  _oneof_case_[0] = SPECIFIC_NOT_SET;
+}
+inline ModifiableComponent::SpecificCase ModifiableComponent::specific_case() const {
+  return ModifiableComponent::SpecificCase(_oneof_case_[0]);
+}
 #ifdef __GNUC__
   #pragma GCC diagnostic pop
 #endif  // __GNUC__
@@ -5122,6 +5703,10 @@
 
 // -------------------------------------------------------------------
 
+// -------------------------------------------------------------------
+
+// -------------------------------------------------------------------
+
 
 // @@protoc_insertion_point(namespace_scope)
 
diff --git a/cpp/dmi/hw_management_service.pb.cc b/cpp/dmi/hw_management_service.pb.cc
index be75597..eda5b7b 100644
--- a/cpp/dmi/hw_management_service.pb.cc
+++ b/cpp/dmi/hw_management_service.pb.cc
@@ -18,7 +18,7 @@
 
 extern PROTOBUF_INTERNAL_EXPORT_dmi_2fhw_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_Uuid_dmi_2fhw_2eproto;
 extern PROTOBUF_INTERNAL_EXPORT_dmi_2fhw_2eproto ::google::protobuf::internal::SCCInfo<2> scc_info_Hardware_dmi_2fhw_2eproto;
-extern PROTOBUF_INTERNAL_EXPORT_dmi_2fhw_2eproto ::google::protobuf::internal::SCCInfo<2> scc_info_ModifiableComponent_dmi_2fhw_2eproto;
+extern PROTOBUF_INTERNAL_EXPORT_dmi_2fhw_2eproto ::google::protobuf::internal::SCCInfo<3> scc_info_ModifiableComponent_dmi_2fhw_2eproto;
 extern PROTOBUF_INTERNAL_EXPORT_dmi_2fhw_2eproto ::google::protobuf::internal::SCCInfo<9> scc_info_Component_dmi_2fhw_2eproto;
 extern PROTOBUF_INTERNAL_EXPORT_dmi_2fhw_5fmanagement_5fservice_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_EntitiesLogLevel_dmi_2fhw_5fmanagement_5fservice_2eproto;
 extern PROTOBUF_INTERNAL_EXPORT_dmi_2fhw_5fmanagement_5fservice_2eproto ::google::protobuf::internal::SCCInfo<2> scc_info_ManagedDeviceInfo_dmi_2fhw_5fmanagement_5fservice_2eproto;
diff --git a/dmi.pb b/dmi.pb
index 96a47eb..1ee531b 100644
--- a/dmi.pb
+++ b/dmi.pb
Binary files differ
diff --git a/go/dmi/hw.pb.go b/go/dmi/hw.pb.go
index 195169b..1c442d5 100644
--- a/go/dmi/hw.pb.go
+++ b/go/dmi/hw.pb.go
@@ -596,7 +596,7 @@
 }
 
 func (PsuComponentAttributes_SupportedVoltage) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_d7c33d745c4ab367, []int{7, 0}
+	return fileDescriptor_d7c33d745c4ab367, []int{9, 0}
 }
 
 type TransceiverComponentsAttributes_FormFactor int32
@@ -660,7 +660,7 @@
 }
 
 func (TransceiverComponentsAttributes_FormFactor) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_d7c33d745c4ab367, []int{8, 0}
+	return fileDescriptor_d7c33d745c4ab367, []int{10, 0}
 }
 
 type TransceiverComponentsAttributes_Type int32
@@ -703,7 +703,7 @@
 }
 
 func (TransceiverComponentsAttributes_Type) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_d7c33d745c4ab367, []int{8, 1}
+	return fileDescriptor_d7c33d745c4ab367, []int{10, 1}
 }
 
 type Uuid struct {
@@ -1007,13 +1007,18 @@
 }
 
 type PortComponentAttributes struct {
-	ConnectorType        PortComponentAttributes_ConnectorType `protobuf:"varint,1,opt,name=connector_type,json=connectorType,proto3,enum=dmi.PortComponentAttributes_ConnectorType" json:"connector_type,omitempty"`
-	Speed                PortComponentAttributes_Speed         `protobuf:"varint,2,opt,name=speed,proto3,enum=dmi.PortComponentAttributes_Speed" json:"speed,omitempty"`
-	Protocol             PortComponentAttributes_Protocol      `protobuf:"varint,3,opt,name=protocol,proto3,enum=dmi.PortComponentAttributes_Protocol" json:"protocol,omitempty"`
-	PhysicalLabel        string                                `protobuf:"bytes,4,opt,name=physical_label,json=physicalLabel,proto3" json:"physical_label,omitempty"`
-	XXX_NoUnkeyedLiteral struct{}                              `json:"-"`
-	XXX_unrecognized     []byte                                `json:"-"`
-	XXX_sizecache        int32                                 `json:"-"`
+	ConnectorType PortComponentAttributes_ConnectorType `protobuf:"varint,1,opt,name=connector_type,json=connectorType,proto3,enum=dmi.PortComponentAttributes_ConnectorType" json:"connector_type,omitempty"`
+	Speed         PortComponentAttributes_Speed         `protobuf:"varint,2,opt,name=speed,proto3,enum=dmi.PortComponentAttributes_Speed" json:"speed,omitempty"`
+	Protocol      PortComponentAttributes_Protocol      `protobuf:"varint,3,opt,name=protocol,proto3,enum=dmi.PortComponentAttributes_Protocol" json:"protocol,omitempty"`
+	PhysicalLabel string                                `protobuf:"bytes,4,opt,name=physical_label,json=physicalLabel,proto3" json:"physical_label,omitempty"`
+	// The mapping_label can be used to map ports between the DMI interface and other systems like VOLTHA
+	// The value of the mapping_label should be exactly the same as generated for the same port by the other
+	// system
+	MappingLabel         string       `protobuf:"bytes,5,opt,name=mapping_label,json=mappingLabel,proto3" json:"mapping_label,omitempty"`
+	PonIdConfig          *PonIdConfig `protobuf:"bytes,6,opt,name=pon_id_config,json=ponIdConfig,proto3" json:"pon_id_config,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}     `json:"-"`
+	XXX_unrecognized     []byte       `json:"-"`
+	XXX_sizecache        int32        `json:"-"`
 }
 
 func (m *PortComponentAttributes) Reset()         { *m = PortComponentAttributes{} }
@@ -1069,6 +1074,109 @@
 	return ""
 }
 
+func (m *PortComponentAttributes) GetMappingLabel() string {
+	if m != nil {
+		return m.MappingLabel
+	}
+	return ""
+}
+
+func (m *PortComponentAttributes) GetPonIdConfig() *PonIdConfig {
+	if m != nil {
+		return m.PonIdConfig
+	}
+	return nil
+}
+
+type PortComponentChangeAttributes struct {
+	PonIdConfig          *PonIdConfig `protobuf:"bytes,1,opt,name=pon_id_config,json=ponIdConfig,proto3" json:"pon_id_config,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}     `json:"-"`
+	XXX_unrecognized     []byte       `json:"-"`
+	XXX_sizecache        int32        `json:"-"`
+}
+
+func (m *PortComponentChangeAttributes) Reset()         { *m = PortComponentChangeAttributes{} }
+func (m *PortComponentChangeAttributes) String() string { return proto.CompactTextString(m) }
+func (*PortComponentChangeAttributes) ProtoMessage()    {}
+func (*PortComponentChangeAttributes) Descriptor() ([]byte, []int) {
+	return fileDescriptor_d7c33d745c4ab367, []int{6}
+}
+
+func (m *PortComponentChangeAttributes) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PortComponentChangeAttributes.Unmarshal(m, b)
+}
+func (m *PortComponentChangeAttributes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PortComponentChangeAttributes.Marshal(b, m, deterministic)
+}
+func (m *PortComponentChangeAttributes) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PortComponentChangeAttributes.Merge(m, src)
+}
+func (m *PortComponentChangeAttributes) XXX_Size() int {
+	return xxx_messageInfo_PortComponentChangeAttributes.Size(m)
+}
+func (m *PortComponentChangeAttributes) XXX_DiscardUnknown() {
+	xxx_messageInfo_PortComponentChangeAttributes.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PortComponentChangeAttributes proto.InternalMessageInfo
+
+func (m *PortComponentChangeAttributes) GetPonIdConfig() *PonIdConfig {
+	if m != nil {
+		return m.PonIdConfig
+	}
+	return nil
+}
+
+type PonIdConfig struct {
+	// The pon_id and pon_id_transmit_periodicity attributes are valid only for ports of type GPON, XGPON and XGSPON
+	// For GPON pon_id is a 7 byte value
+	// For XGS-PON, it's a 32 bit value, should be encoded in the first 4 bytes of pon_id in network byte order
+	PonId                    []byte   `protobuf:"bytes,1,opt,name=pon_id,json=ponId,proto3" json:"pon_id,omitempty"`
+	PonIdTransmitPeriodicity uint32   `protobuf:"varint,2,opt,name=pon_id_transmit_periodicity,json=ponIdTransmitPeriodicity,proto3" json:"pon_id_transmit_periodicity,omitempty"`
+	XXX_NoUnkeyedLiteral     struct{} `json:"-"`
+	XXX_unrecognized         []byte   `json:"-"`
+	XXX_sizecache            int32    `json:"-"`
+}
+
+func (m *PonIdConfig) Reset()         { *m = PonIdConfig{} }
+func (m *PonIdConfig) String() string { return proto.CompactTextString(m) }
+func (*PonIdConfig) ProtoMessage()    {}
+func (*PonIdConfig) Descriptor() ([]byte, []int) {
+	return fileDescriptor_d7c33d745c4ab367, []int{7}
+}
+
+func (m *PonIdConfig) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PonIdConfig.Unmarshal(m, b)
+}
+func (m *PonIdConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PonIdConfig.Marshal(b, m, deterministic)
+}
+func (m *PonIdConfig) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PonIdConfig.Merge(m, src)
+}
+func (m *PonIdConfig) XXX_Size() int {
+	return xxx_messageInfo_PonIdConfig.Size(m)
+}
+func (m *PonIdConfig) XXX_DiscardUnknown() {
+	xxx_messageInfo_PonIdConfig.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PonIdConfig proto.InternalMessageInfo
+
+func (m *PonIdConfig) GetPonId() []byte {
+	if m != nil {
+		return m.PonId
+	}
+	return nil
+}
+
+func (m *PonIdConfig) GetPonIdTransmitPeriodicity() uint32 {
+	if m != nil {
+		return m.PonIdTransmitPeriodicity
+	}
+	return 0
+}
+
 type ContainerComponentAttributes struct {
 	PhysicalLabel        string   `protobuf:"bytes,1,opt,name=physical_label,json=physicalLabel,proto3" json:"physical_label,omitempty"`
 	XXX_NoUnkeyedLiteral struct{} `json:"-"`
@@ -1080,7 +1188,7 @@
 func (m *ContainerComponentAttributes) String() string { return proto.CompactTextString(m) }
 func (*ContainerComponentAttributes) ProtoMessage()    {}
 func (*ContainerComponentAttributes) Descriptor() ([]byte, []int) {
-	return fileDescriptor_d7c33d745c4ab367, []int{6}
+	return fileDescriptor_d7c33d745c4ab367, []int{8}
 }
 
 func (m *ContainerComponentAttributes) XXX_Unmarshal(b []byte) error {
@@ -1119,7 +1227,7 @@
 func (m *PsuComponentAttributes) String() string { return proto.CompactTextString(m) }
 func (*PsuComponentAttributes) ProtoMessage()    {}
 func (*PsuComponentAttributes) Descriptor() ([]byte, []int) {
-	return fileDescriptor_d7c33d745c4ab367, []int{7}
+	return fileDescriptor_d7c33d745c4ab367, []int{9}
 }
 
 func (m *PsuComponentAttributes) XXX_Unmarshal(b []byte) error {
@@ -1166,7 +1274,7 @@
 func (m *TransceiverComponentsAttributes) String() string { return proto.CompactTextString(m) }
 func (*TransceiverComponentsAttributes) ProtoMessage()    {}
 func (*TransceiverComponentsAttributes) Descriptor() ([]byte, []int) {
-	return fileDescriptor_d7c33d745c4ab367, []int{8}
+	return fileDescriptor_d7c33d745c4ab367, []int{10}
 }
 
 func (m *TransceiverComponentsAttributes) XXX_Unmarshal(b []byte) error {
@@ -1279,7 +1387,7 @@
 func (m *Component) String() string { return proto.CompactTextString(m) }
 func (*Component) ProtoMessage()    {}
 func (*Component) Descriptor() ([]byte, []int) {
-	return fileDescriptor_d7c33d745c4ab367, []int{9}
+	return fileDescriptor_d7c33d745c4ab367, []int{11}
 }
 
 func (m *Component) XXX_Unmarshal(b []byte) error {
@@ -1530,7 +1638,7 @@
 func (m *Hardware) String() string { return proto.CompactTextString(m) }
 func (*Hardware) ProtoMessage()    {}
 func (*Hardware) Descriptor() ([]byte, []int) {
-	return fileDescriptor_d7c33d745c4ab367, []int{10}
+	return fileDescriptor_d7c33d745c4ab367, []int{12}
 }
 
 func (m *Hardware) XXX_Unmarshal(b []byte) error {
@@ -1576,24 +1684,29 @@
 type ModifiableComponent struct {
 	// The name has to be unique for each component within the hardware and implementations need to
 	// ascertain this when modifying the name
-	Name                 string              `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
-	Class                ComponentType       `protobuf:"varint,2,opt,name=class,proto3,enum=dmi.ComponentType" json:"class,omitempty"`
-	Parent               *Component          `protobuf:"bytes,3,opt,name=parent,proto3" json:"parent,omitempty"`
-	ParentRelPos         int32               `protobuf:"varint,4,opt,name=parent_rel_pos,json=parentRelPos,proto3" json:"parent_rel_pos,omitempty"`
-	Alias                string              `protobuf:"bytes,5,opt,name=alias,proto3" json:"alias,omitempty"`
-	AssetId              string              `protobuf:"bytes,6,opt,name=asset_id,json=assetId,proto3" json:"asset_id,omitempty"`
-	Uri                  *Uri                `protobuf:"bytes,7,opt,name=uri,proto3" json:"uri,omitempty"`
-	AdminState           ComponentAdminState `protobuf:"varint,8,opt,name=admin_state,json=adminState,proto3,enum=dmi.ComponentAdminState" json:"admin_state,omitempty"`
-	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
-	XXX_unrecognized     []byte              `json:"-"`
-	XXX_sizecache        int32               `json:"-"`
+	Name         string              `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	Class        ComponentType       `protobuf:"varint,2,opt,name=class,proto3,enum=dmi.ComponentType" json:"class,omitempty"`
+	Parent       *Component          `protobuf:"bytes,3,opt,name=parent,proto3" json:"parent,omitempty"`
+	ParentRelPos int32               `protobuf:"varint,4,opt,name=parent_rel_pos,json=parentRelPos,proto3" json:"parent_rel_pos,omitempty"`
+	Alias        string              `protobuf:"bytes,5,opt,name=alias,proto3" json:"alias,omitempty"`
+	AssetId      string              `protobuf:"bytes,6,opt,name=asset_id,json=assetId,proto3" json:"asset_id,omitempty"`
+	Uri          *Uri                `protobuf:"bytes,7,opt,name=uri,proto3" json:"uri,omitempty"`
+	AdminState   ComponentAdminState `protobuf:"varint,8,opt,name=admin_state,json=adminState,proto3,enum=dmi.ComponentAdminState" json:"admin_state,omitempty"`
+	// The attribute 'specific' can be populated for specific class of components
+	//
+	// Types that are valid to be assigned to Specific:
+	//	*ModifiableComponent_PortAttr
+	Specific             isModifiableComponent_Specific `protobuf_oneof:"specific"`
+	XXX_NoUnkeyedLiteral struct{}                       `json:"-"`
+	XXX_unrecognized     []byte                         `json:"-"`
+	XXX_sizecache        int32                          `json:"-"`
 }
 
 func (m *ModifiableComponent) Reset()         { *m = ModifiableComponent{} }
 func (m *ModifiableComponent) String() string { return proto.CompactTextString(m) }
 func (*ModifiableComponent) ProtoMessage()    {}
 func (*ModifiableComponent) Descriptor() ([]byte, []int) {
-	return fileDescriptor_d7c33d745c4ab367, []int{11}
+	return fileDescriptor_d7c33d745c4ab367, []int{13}
 }
 
 func (m *ModifiableComponent) XXX_Unmarshal(b []byte) error {
@@ -1670,6 +1783,37 @@
 	return ComponentAdminState_COMP_ADMIN_STATE_UNDEFINED
 }
 
+type isModifiableComponent_Specific interface {
+	isModifiableComponent_Specific()
+}
+
+type ModifiableComponent_PortAttr struct {
+	PortAttr *PortComponentChangeAttributes `protobuf:"bytes,50,opt,name=port_attr,json=portAttr,proto3,oneof"`
+}
+
+func (*ModifiableComponent_PortAttr) isModifiableComponent_Specific() {}
+
+func (m *ModifiableComponent) GetSpecific() isModifiableComponent_Specific {
+	if m != nil {
+		return m.Specific
+	}
+	return nil
+}
+
+func (m *ModifiableComponent) GetPortAttr() *PortComponentChangeAttributes {
+	if x, ok := m.GetSpecific().(*ModifiableComponent_PortAttr); ok {
+		return x.PortAttr
+	}
+	return nil
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*ModifiableComponent) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*ModifiableComponent_PortAttr)(nil),
+	}
+}
+
 func init() {
 	proto.RegisterEnum("dmi.ComponentType", ComponentType_name, ComponentType_value)
 	proto.RegisterEnum("dmi.ComponentAdminState", ComponentAdminState_name, ComponentAdminState_value)
@@ -1692,6 +1836,8 @@
 	proto.RegisterType((*ComponentState)(nil), "dmi.ComponentState")
 	proto.RegisterType((*ComponentSensorData)(nil), "dmi.ComponentSensorData")
 	proto.RegisterType((*PortComponentAttributes)(nil), "dmi.PortComponentAttributes")
+	proto.RegisterType((*PortComponentChangeAttributes)(nil), "dmi.PortComponentChangeAttributes")
+	proto.RegisterType((*PonIdConfig)(nil), "dmi.PonIdConfig")
 	proto.RegisterType((*ContainerComponentAttributes)(nil), "dmi.ContainerComponentAttributes")
 	proto.RegisterType((*PsuComponentAttributes)(nil), "dmi.PsuComponentAttributes")
 	proto.RegisterType((*TransceiverComponentsAttributes)(nil), "dmi.TransceiverComponentsAttributes")
@@ -1703,169 +1849,176 @@
 func init() { proto.RegisterFile("dmi/hw.proto", fileDescriptor_d7c33d745c4ab367) }
 
 var fileDescriptor_d7c33d745c4ab367 = []byte{
-	// 2612 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x58, 0xcd, 0x8e, 0xdb, 0xc8,
-	0x11, 0xb6, 0xfe, 0xa5, 0xd2, 0xcf, 0xb4, 0x7b, 0xfc, 0xa3, 0x1d, 0xdb, 0xbb, 0xb3, 0xca, 0xee,
-	0x62, 0x76, 0x92, 0x9d, 0x19, 0xcb, 0x76, 0xe0, 0xcd, 0x22, 0x08, 0x38, 0x14, 0x35, 0xe2, 0x5a,
-	0x22, 0xb9, 0x4d, 0x6a, 0xec, 0xd9, 0x0b, 0xc1, 0x91, 0xa8, 0x19, 0x02, 0x92, 0x28, 0x90, 0xd4,
-	0xac, 0x0d, 0xe4, 0x14, 0xe4, 0x92, 0x53, 0x5e, 0x22, 0x08, 0x36, 0x97, 0x00, 0x41, 0x72, 0xcc,
-	0x21, 0x97, 0xbc, 0x40, 0x6e, 0x79, 0x86, 0xbc, 0x44, 0xd0, 0xdd, 0xa4, 0x44, 0x51, 0xf4, 0x4f,
-	0x80, 0xdc, 0xba, 0xbf, 0xaf, 0xaa, 0xba, 0xba, 0xba, 0xab, 0xba, 0x48, 0xa8, 0x8d, 0x67, 0xce,
-	0xf1, 0xf5, 0x0f, 0x47, 0x0b, 0xcf, 0x0d, 0x5c, 0x9c, 0x1b, 0xcf, 0x9c, 0xbd, 0x4f, 0xae, 0x5c,
-	0xf7, 0x6a, 0x6a, 0x1f, 0x33, 0xe8, 0x72, 0x39, 0x39, 0x0e, 0x9c, 0x99, 0xed, 0x07, 0xd6, 0x6c,
-	0xc1, 0xa5, 0x5a, 0x7b, 0x90, 0x1f, 0x2e, 0x9d, 0x31, 0xc6, 0x90, 0x5f, 0x2e, 0x9d, 0x71, 0x33,
-	0xb3, 0x9f, 0x39, 0xa8, 0x10, 0x36, 0x6e, 0xfd, 0x14, 0xa0, 0x67, 0x79, 0xe3, 0x1f, 0x2c, 0xcf,
-	0x96, 0x3b, 0xf8, 0x51, 0x4c, 0xa2, 0xda, 0xae, 0x1c, 0x8d, 0x67, 0xce, 0x11, 0x55, 0x0d, 0x85,
-	0xef, 0x43, 0x6e, 0xe8, 0x39, 0x18, 0x41, 0x6e, 0xe9, 0x39, 0xa1, 0x19, 0x3a, 0x6c, 0xfd, 0x36,
-	0x07, 0x0d, 0xd1, 0x9d, 0x2d, 0xdc, 0xb9, 0x3d, 0x0f, 0xf4, 0xc0, 0x0a, 0x6c, 0xdc, 0x03, 0xec,
-	0xd3, 0x81, 0x39, 0xb5, 0xfc, 0xc0, 0x1c, 0x5d, 0x5b, 0xf3, 0x2b, 0x3b, 0x32, 0xbc, 0x77, 0xc4,
-	0x5d, 0x3e, 0x8a, 0x5c, 0x3e, 0x32, 0x22, 0x97, 0x09, 0x62, 0x5a, 0x7d, 0xcb, 0x0f, 0x44, 0xae,
-	0x83, 0xbf, 0x86, 0xaa, 0x35, 0x9e, 0x39, 0x73, 0x93, 0x31, 0xcd, 0xec, 0x7e, 0xe6, 0xa0, 0xd1,
-	0x6e, 0x32, 0xdf, 0x56, 0x6b, 0x0a, 0x54, 0x80, 0x2d, 0x4c, 0xc0, 0x5a, 0x8d, 0xf1, 0xcf, 0x01,
-	0xdc, 0x85, 0xed, 0x85, 0x9a, 0x39, 0xa6, 0x79, 0x7f, 0x53, 0x53, 0x5d, 0xd8, 0x1e, 0x57, 0xac,
-	0xb8, 0xd1, 0x90, 0x2e, 0xb9, 0xf4, 0xad, 0x2b, 0x3b, 0x54, 0xcc, 0xa7, 0x2d, 0x39, 0xa4, 0x02,
-	0xe1, 0x92, 0xcb, 0xd5, 0x98, 0x79, 0x3b, 0xb5, 0xbc, 0x59, 0xa8, 0x5a, 0x48, 0xf5, 0x96, 0x0a,
-	0x44, 0xde, 0xae, 0xc6, 0xf8, 0x57, 0x50, 0xf7, 0x03, 0x6b, 0x3e, 0xbe, 0x7c, 0x13, 0x2a, 0x17,
-	0x99, 0xf2, 0xde, 0xa6, 0xb2, 0xce, 0x45, 0xb8, 0x7a, 0xcd, 0x8f, 0xcd, 0x5a, 0xff, 0xc9, 0xc2,
-	0xee, 0x5a, 0xce, 0x9e, 0xfb, 0xae, 0xd7, 0xb1, 0x02, 0x0b, 0xdf, 0x81, 0xc2, 0x8d, 0x35, 0x5d,
-	0xda, 0x2c, 0xfc, 0x05, 0xc2, 0x27, 0xf8, 0x0b, 0xc8, 0x07, 0x6f, 0x16, 0x51, 0x40, 0x31, 0x5b,
-	0x85, 0x8a, 0x9f, 0x53, 0xd6, 0x78, 0xb3, 0xb0, 0x09, 0xe3, 0xf1, 0xe7, 0x50, 0xf0, 0x47, 0xd6,
-	0x34, 0x8a, 0xdf, 0x0e, 0x13, 0x64, 0x42, 0x3a, 0x85, 0x09, 0x67, 0xf1, 0x43, 0xa8, 0x2c, 0x3c,
-	0x7b, 0xe4, 0xf8, 0x8e, 0x3b, 0x67, 0x11, 0x2b, 0x90, 0x35, 0x80, 0xbf, 0x84, 0x22, 0xdd, 0xd3,
-	0xd2, 0x0f, 0x23, 0x72, 0x9b, 0x59, 0xe1, 0x3e, 0xea, 0x8c, 0x20, 0xa1, 0x00, 0xfe, 0x09, 0xd4,
-	0x97, 0x73, 0x27, 0xf0, 0xcd, 0xb1, 0xe3, 0x2f, 0xa6, 0xd6, 0x1b, 0x16, 0x86, 0x0a, 0xa9, 0x31,
-	0xb0, 0xc3, 0x31, 0xfc, 0x1c, 0x2a, 0xab, 0x6b, 0xde, 0x2c, 0xbd, 0xf7, 0x56, 0xad, 0x85, 0xf1,
-	0x21, 0xdc, 0x66, 0xfb, 0x37, 0x97, 0x8b, 0x31, 0xbd, 0x9f, 0x1e, 0x8d, 0x74, 0x79, 0x3f, 0x73,
-	0x50, 0x27, 0x3b, 0x8c, 0x18, 0x32, 0x9c, 0xd0, 0x13, 0x79, 0x00, 0x95, 0xb1, 0x15, 0x58, 0x26,
-	0x8b, 0x53, 0x85, 0xb9, 0x51, 0xa6, 0x00, 0x8d, 0x4e, 0xeb, 0x2f, 0x05, 0xb8, 0xaf, 0xb9, 0x5e,
-	0xb0, 0x3e, 0xd6, 0x20, 0xf0, 0x9c, 0xcb, 0x65, 0x60, 0xfb, 0xf8, 0x3b, 0x68, 0x8c, 0xdc, 0xf9,
-	0xdc, 0x1e, 0x05, 0xae, 0xc7, 0xb5, 0x33, 0x6c, 0xdb, 0x87, 0x6c, 0xdb, 0x6f, 0xd1, 0x3a, 0x12,
-	0x23, 0x15, 0x16, 0xfd, 0xfa, 0x28, 0x3e, 0xc5, 0xcf, 0xa1, 0xe0, 0x2f, 0x6c, 0x7b, 0x1c, 0x9e,
-	0x57, 0xeb, 0x9d, 0x96, 0x74, 0x2a, 0x49, 0xb8, 0x02, 0x16, 0xa0, 0xcc, 0x42, 0x32, 0x72, 0xa7,
-	0xe1, 0x19, 0x7e, 0xfe, 0x4e, 0x65, 0x2d, 0x14, 0x26, 0x2b, 0x35, 0xfc, 0x39, 0x34, 0x16, 0xd7,
-	0x6f, 0x7c, 0x67, 0x64, 0x4d, 0xcd, 0xa9, 0x75, 0x69, 0x4f, 0xd9, 0x09, 0x57, 0x48, 0x3d, 0x42,
-	0xfb, 0x14, 0x6c, 0x2d, 0xa0, 0xbe, 0xb1, 0x07, 0xfc, 0x10, 0x9a, 0xa2, 0xaa, 0x28, 0x92, 0x68,
-	0xa8, 0xc4, 0x34, 0x2e, 0x34, 0xc9, 0x1c, 0x2a, 0x1d, 0xa9, 0x2b, 0x2b, 0x52, 0x07, 0xdd, 0xc2,
-	0x65, 0xc8, 0x93, 0x6f, 0x9f, 0x3e, 0x43, 0x19, 0x5c, 0x83, 0x72, 0x57, 0x3e, 0x95, 0x88, 0xd9,
-	0x17, 0x51, 0x16, 0xef, 0x40, 0x95, 0xcf, 0x74, 0xd1, 0xd4, 0x44, 0x94, 0xc3, 0x75, 0xa8, 0x70,
-	0x60, 0xa0, 0xa9, 0x28, 0x8f, 0x2b, 0x50, 0x20, 0x7a, 0xfb, 0x49, 0x1b, 0x15, 0x5a, 0x7f, 0xce,
-	0x40, 0x81, 0x6d, 0x16, 0xef, 0xc2, 0x8e, 0xae, 0x49, 0x52, 0x67, 0x63, 0x85, 0x2a, 0x94, 0x3a,
-	0x17, 0x8a, 0x30, 0x90, 0x45, 0x94, 0xa1, 0x56, 0xce, 0xe4, 0x33, 0xe1, 0x54, 0x36, 0xcc, 0xc7,
-	0x28, 0x8b, 0x1b, 0x00, 0xab, 0xe9, 0x09, 0xca, 0xc5, 0xe7, 0xed, 0x67, 0x28, 0x1f, 0x9f, 0x3f,
-	0x3d, 0x41, 0x05, 0xea, 0xd5, 0x5a, 0xfe, 0x04, 0x15, 0xe3, 0xc0, 0xd3, 0x93, 0x13, 0x54, 0xc2,
-	0x08, 0x6a, 0x03, 0x29, 0xb2, 0x70, 0x72, 0x82, 0xca, 0x71, 0xe4, 0x71, 0xfb, 0xd9, 0x09, 0xaa,
-	0xb4, 0x7e, 0x0d, 0xe5, 0x28, 0xbe, 0xf8, 0x1e, 0x60, 0x8d, 0xa8, 0x86, 0x2a, 0xaa, 0xfd, 0x0d,
-	0xaf, 0x6b, 0x50, 0x96, 0x8c, 0x9e, 0x44, 0x14, 0xc9, 0x40, 0x19, 0x1a, 0xa5, 0x33, 0x4d, 0x55,
-	0x50, 0x96, 0xee, 0xfb, 0x15, 0x1b, 0xe6, 0x30, 0x40, 0xf1, 0xd5, 0x99, 0x4e, 0xc7, 0x2c, 0x1c,
-	0x67, 0x5d, 0x41, 0x37, 0x50, 0x81, 0xc2, 0xba, 0x44, 0x64, 0xa1, 0x8f, 0x8a, 0x54, 0x4f, 0xa2,
-	0x02, 0x25, 0x3a, 0x3a, 0x95, 0x0d, 0x1d, 0x95, 0x5b, 0x12, 0x3c, 0x14, 0xdd, 0x79, 0x60, 0x39,
-	0x73, 0xdb, 0x4b, 0xbb, 0xb7, 0xdb, 0xe7, 0x9c, 0x49, 0x3b, 0xe7, 0x7f, 0x66, 0xe0, 0x9e, 0xe6,
-	0x2f, 0xd3, 0x2c, 0x5c, 0xc0, 0x6d, 0x7f, 0xb9, 0x58, 0xb8, 0x5e, 0x60, 0x8f, 0xcd, 0x1b, 0x77,
-	0x1a, 0x58, 0x57, 0xd1, 0xe5, 0xff, 0x19, 0xbf, 0x75, 0xa9, 0x7a, 0x47, 0x7a, 0xa4, 0x74, 0xce,
-	0x75, 0x08, 0xf2, 0x13, 0x48, 0x4b, 0x03, 0x94, 0x94, 0xc2, 0x9f, 0xc0, 0x03, 0x7d, 0xa8, 0x69,
-	0x2a, 0x31, 0xa4, 0x8e, 0x79, 0xae, 0xf6, 0x0d, 0xe1, 0x6c, 0xf3, 0x8e, 0x95, 0x20, 0x77, 0xfe,
-	0xf4, 0x39, 0x0f, 0xe3, 0x79, 0xfb, 0xc9, 0x09, 0xca, 0xb2, 0xd1, 0xe3, 0xc7, 0xcf, 0x50, 0xae,
-	0xf5, 0xaf, 0x02, 0x7c, 0x62, 0x78, 0xd6, 0xdc, 0x1f, 0xd9, 0xce, 0x4d, 0x2c, 0x22, 0x7e, 0x6c,
-	0x43, 0x1a, 0x54, 0x27, 0xae, 0x37, 0x33, 0x27, 0x16, 0xbd, 0xd5, 0xe1, 0x56, 0x8e, 0xd9, 0x56,
-	0xde, 0xa3, 0x7a, 0xd4, 0x75, 0xbd, 0x59, 0x97, 0xa9, 0x11, 0x98, 0xac, 0xc6, 0xb8, 0x07, 0x10,
-	0x50, 0x4d, 0x33, 0x56, 0x7e, 0xbf, 0xfc, 0x20, 0x83, 0xac, 0x2e, 0x54, 0x98, 0x32, 0x4b, 0xaf,
-	0x4f, 0xa1, 0x36, 0xb3, 0x5e, 0xd3, 0x42, 0x19, 0x58, 0xf3, 0x11, 0xaf, 0xd0, 0x75, 0x52, 0x9d,
-	0x59, 0xaf, 0x3b, 0x21, 0x84, 0x7f, 0x09, 0x38, 0x2e, 0x62, 0xf2, 0x52, 0x9e, 0x4f, 0x2f, 0xe5,
-	0x28, 0xa6, 0xc9, 0x10, 0x5a, 0x8c, 0xbd, 0xd7, 0xe6, 0x0f, 0xd6, 0x8d, 0x3d, 0xb5, 0xe7, 0x57,
-	0xc1, 0x75, 0xb3, 0xb0, 0x9f, 0x3b, 0xa8, 0x93, 0x9a, 0xf7, 0xfa, 0xe5, 0x0a, 0xa3, 0x42, 0xc1,
-	0x86, 0x50, 0x91, 0x0b, 0x05, 0x71, 0xa1, 0x5f, 0x00, 0x5a, 0x4b, 0x84, 0x6e, 0x94, 0xd2, 0xdd,
-	0xd8, 0x59, 0x0b, 0x32, 0xa0, 0xf5, 0x8f, 0x0c, 0xc0, 0x3a, 0x98, 0xf8, 0x3e, 0xec, 0x76, 0x55,
-	0x32, 0x30, 0xbb, 0x02, 0xab, 0x2b, 0x43, 0xe5, 0x85, 0xa2, 0xbe, 0x54, 0x78, 0x41, 0xf9, 0x4e,
-	0xef, 0x6a, 0x3c, 0xd7, 0xe9, 0xc8, 0xd4, 0xfa, 0x43, 0x1d, 0x65, 0x69, 0x5e, 0xd0, 0x69, 0xfb,
-	0x39, 0xca, 0xd1, 0x1b, 0x41, 0x65, 0xf2, 0x34, 0xcd, 0x56, 0x22, 0x05, 0x0a, 0xbf, 0xea, 0x6a,
-	0x3c, 0x6f, 0xc4, 0xae, 0xf6, 0x94, 0xe7, 0x8d, 0xd8, 0xd5, 0xda, 0xa8, 0xcc, 0x46, 0x9a, 0xf0,
-	0x02, 0x55, 0x70, 0x11, 0xb2, 0xaf, 0xda, 0x08, 0x68, 0xd2, 0xa9, 0x34, 0x47, 0x51, 0x95, 0x6a,
-	0x8a, 0x5d, 0x0d, 0xd5, 0xa8, 0x41, 0x2a, 0x6f, 0x0a, 0xa2, 0x8a, 0xea, 0xab, 0x59, 0x47, 0x54,
-	0x51, 0xa3, 0x75, 0x0d, 0x79, 0x76, 0x64, 0x08, 0x6a, 0x61, 0x1d, 0x8c, 0x9c, 0xfe, 0x1f, 0xb3,
-	0x9d, 0xb9, 0xa2, 0x2a, 0xa8, 0x40, 0x8b, 0x9b, 0x72, 0x66, 0x6a, 0xaa, 0xd2, 0x8e, 0x67, 0x7b,
-	0xeb, 0xdf, 0x25, 0xa8, 0xac, 0x6e, 0x0f, 0x6d, 0xfa, 0xe6, 0xd6, 0xcc, 0x8e, 0x9a, 0x3e, 0x3a,
-	0xc6, 0x07, 0x50, 0x18, 0x4d, 0x2d, 0xdf, 0xdf, 0x78, 0xfa, 0x57, 0x2a, 0xec, 0x92, 0x71, 0x01,
-	0xbc, 0x0f, 0xd5, 0xb1, 0xed, 0x8f, 0x3c, 0x67, 0x11, 0xd0, 0x67, 0x3d, 0xc7, 0x8c, 0xc4, 0x21,
-	0x7c, 0x0f, 0x8a, 0x0b, 0xcb, 0xb3, 0xe7, 0x41, 0xf8, 0x22, 0x84, 0x33, 0xfc, 0x19, 0x34, 0xf8,
-	0xc8, 0xf4, 0xec, 0xa9, 0xb9, 0x70, 0xf9, 0xc3, 0x5f, 0x20, 0x35, 0x8e, 0x12, 0x7b, 0xaa, 0xb9,
-	0x3e, 0x3e, 0x84, 0xf2, 0xe8, 0xda, 0x99, 0x8e, 0x3d, 0x7b, 0xce, 0x2e, 0x4d, 0xb5, 0xdd, 0xd8,
-	0x74, 0x86, 0xac, 0x78, 0x7a, 0xd9, 0xaf, 0xc3, 0x56, 0xd5, 0xf4, 0xec, 0x1b, 0x76, 0x79, 0x2a,
-	0xa4, 0x1a, 0x61, 0xc4, 0xbe, 0xa1, 0x22, 0x13, 0xc7, 0x9b, 0xad, 0x44, 0xca, 0x5c, 0x24, 0xc2,
-	0x42, 0x11, 0xdf, 0x9d, 0x04, 0x2b, 0x11, 0xfe, 0xaa, 0x57, 0x23, 0x8c, 0x8a, 0x3c, 0x02, 0xf0,
-	0x6d, 0xcf, 0xb1, 0xa6, 0xe6, 0x7c, 0x39, 0x6b, 0x02, 0x13, 0xa8, 0x70, 0x44, 0x59, 0xce, 0xf0,
-	0x47, 0x50, 0x9e, 0x4d, 0xae, 0x4c, 0x16, 0xd5, 0x2a, 0x23, 0x4b, 0xb3, 0xc9, 0x95, 0x42, 0x03,
-	0xfb, 0x08, 0x60, 0xe6, 0x8e, 0xed, 0x29, 0x27, 0x6b, 0x5c, 0x93, 0x21, 0x8c, 0xbe, 0x03, 0x05,
-	0x6b, 0xea, 0x58, 0x7e, 0xb3, 0xce, 0x18, 0x3e, 0xa1, 0xf6, 0x2c, 0xdf, 0xb7, 0x03, 0xd3, 0x19,
-	0x37, 0x1b, 0xdc, 0x1e, 0x9b, 0xcb, 0x63, 0x7c, 0x17, 0x8a, 0x8e, 0x6f, 0x4e, 0xbc, 0x65, 0x73,
-	0x67, 0x3f, 0x73, 0x50, 0x26, 0x05, 0xc7, 0xef, 0x7a, 0x4b, 0xfc, 0x8c, 0x7b, 0x40, 0xdb, 0x94,
-	0x26, 0x7a, 0x6f, 0xef, 0x43, 0xbd, 0xeb, 0xd0, 0x6e, 0x66, 0x8f, 0xf7, 0xed, 0xb7, 0x99, 0x46,
-	0x99, 0x37, 0xf7, 0x9e, 0xc3, 0x3a, 0xf8, 0x55, 0xe7, 0x8f, 0x53, 0x3b, 0x7f, 0xfc, 0x25, 0x14,
-	0x78, 0x4b, 0xba, 0xcb, 0xf8, 0xdd, 0xad, 0x96, 0x34, 0xa0, 0x7d, 0x60, 0xd4, 0x00, 0xfb, 0xac,
-	0xad, 0xa3, 0xfe, 0x59, 0xcd, 0x3b, 0xec, 0x54, 0x13, 0x0d, 0xf0, 0xba, 0x37, 0x25, 0xe0, 0xaf,
-	0xfb, 0xd4, 0x6f, 0xa0, 0x42, 0xab, 0xbb, 0x69, 0x05, 0x81, 0xd7, 0x6c, 0xb3, 0x95, 0x1e, 0xbe,
-	0xab, 0x53, 0xe9, 0xdd, 0x22, 0x65, 0xaa, 0x40, 0x11, 0xfc, 0x2d, 0x6b, 0xb9, 0xf8, 0xd3, 0xc6,
-	0x2d, 0x3c, 0x61, 0x16, 0x3e, 0x0d, 0x97, 0x7e, 0xfb, 0xab, 0xd7, 0xbb, 0xc5, 0x7a, 0x2d, 0xce,
-	0x33, 0x5b, 0xcf, 0xa1, 0xbc, 0xf0, 0x97, 0xdc, 0xca, 0x53, 0x66, 0xe5, 0xc1, 0x3b, 0xde, 0xae,
-	0xde, 0x2d, 0x52, 0x5a, 0xf8, 0x4b, 0xa6, 0xf9, 0x1d, 0xa0, 0x60, 0x5d, 0xc4, 0xb9, 0x85, 0x67,
-	0xcc, 0xc2, 0x67, 0x1f, 0x52, 0xe1, 0x7b, 0xb7, 0xc8, 0x4e, 0x4c, 0x9f, 0x12, 0xa7, 0x00, 0x65,
-	0x7f, 0x61, 0x8f, 0x9c, 0x89, 0x33, 0x6a, 0xfd, 0x98, 0x81, 0x72, 0xf4, 0xbd, 0x86, 0xbf, 0x81,
-	0x6a, 0xec, 0xe3, 0xea, 0x03, 0xbe, 0xad, 0x60, 0xba, 0xfa, 0xac, 0xc2, 0x2d, 0xc8, 0x7b, 0xae,
-	0x1b, 0xb0, 0x12, 0xb0, 0x9d, 0x75, 0x8c, 0x5b, 0x2d, 0x70, 0xe9, 0xba, 0x81, 0x3d, 0x66, 0xd9,
-	0xff, 0x01, 0x0b, 0x9c, 0x32, 0xe9, 0xd6, 0x9f, 0xb2, 0xb0, 0x3b, 0x70, 0xc7, 0xce, 0xc4, 0xb1,
-	0x2e, 0xa7, 0xf6, 0xff, 0xab, 0x20, 0x7d, 0xb1, 0x2a, 0x37, 0xb9, 0x54, 0xc7, 0xdf, 0x5e, 0x7e,
-	0xf2, 0x29, 0xe5, 0x67, 0x95, 0x90, 0x85, 0xb7, 0x25, 0x64, 0x71, 0x33, 0x21, 0xc3, 0x14, 0x2a,
-	0xa5, 0xa5, 0x50, 0xe2, 0x3b, 0xb5, 0xfc, 0xe1, 0xdf, 0xa9, 0x87, 0x7f, 0xcb, 0xd1, 0xc6, 0x39,
-	0xb6, 0x5d, 0xde, 0x38, 0x0f, 0x34, 0x55, 0x91, 0x14, 0x63, 0xbb, 0x71, 0xde, 0x83, 0x7b, 0x5b,
-	0x2c, 0x7f, 0x4e, 0x32, 0x29, 0x9c, 0xd8, 0x13, 0x74, 0x5d, 0xa6, 0xcf, 0xe0, 0xb6, 0xd5, 0x53,
-	0x41, 0x7c, 0xa1, 0xf5, 0x05, 0x45, 0x42, 0xb9, 0x14, 0x56, 0x54, 0x15, 0x43, 0x90, 0x15, 0x89,
-	0xa0, 0x3c, 0xed, 0xb4, 0x12, 0xac, 0xa6, 0xbe, 0xa4, 0x3d, 0xfa, 0x50, 0xd3, 0xfa, 0x17, 0xa8,
-	0x40, 0xbb, 0xd9, 0x84, 0x40, 0x57, 0x50, 0x50, 0x11, 0x7f, 0x04, 0x77, 0x13, 0xb8, 0x2e, 0x29,
-	0xba, 0x4a, 0x50, 0x29, 0x85, 0x1a, 0xa8, 0x9d, 0x61, 0x5f, 0x42, 0x65, 0xfa, 0xc6, 0x6f, 0x2d,
-	0x47, 0x0c, 0x54, 0x49, 0x59, 0x46, 0xd4, 0x86, 0x08, 0x52, 0xf6, 0x7d, 0x2a, 0x18, 0x86, 0x44,
-	0x2e, 0x50, 0x35, 0x85, 0xd3, 0x0d, 0x95, 0x08, 0x67, 0x12, 0xaa, 0xa5, 0xf9, 0x20, 0x0d, 0x54,
-	0x72, 0x81, 0xea, 0xf8, 0x63, 0xd8, 0x4b, 0x50, 0x06, 0x11, 0x14, 0x5d, 0x94, 0xe4, 0x73, 0x89,
-	0xa0, 0xc6, 0xe1, 0x5f, 0x33, 0xb1, 0xef, 0xed, 0xf5, 0xd1, 0x46, 0x7a, 0xa6, 0xd0, 0x19, 0xc8,
-	0x8a, 0xa9, 0x1b, 0x82, 0xb1, 0x79, 0x7c, 0x61, 0xa0, 0x13, 0x7c, 0x74, 0x80, 0x0f, 0xe0, 0xfe,
-	0x16, 0xdb, 0x57, 0xc5, 0x17, 0x52, 0x07, 0x65, 0x71, 0x0b, 0x3e, 0xde, 0x22, 0xf5, 0xde, 0xd0,
-	0x30, 0x64, 0xe5, 0xcc, 0xec, 0x50, 0x03, 0x39, 0xfc, 0x08, 0x3e, 0x4a, 0x31, 0x1f, 0x9a, 0xc8,
-	0x1f, 0xfe, 0x98, 0x01, 0xbc, 0xfd, 0xfb, 0x63, 0xa5, 0xa5, 0x6a, 0xf4, 0x50, 0xb7, 0x7c, 0x8e,
-	0xbc, 0xda, 0xa0, 0x23, 0x97, 0xa3, 0x0d, 0xc5, 0xc8, 0x8e, 0xac, 0x0b, 0xa7, 0x7d, 0xe6, 0x73,
-	0x8a, 0xaa, 0xa4, 0x70, 0x32, 0x97, 0x46, 0x1a, 0x92, 0x4e, 0xb7, 0x83, 0xf2, 0x87, 0x7f, 0x8c,
-	0x07, 0x78, 0xfd, 0xc3, 0x65, 0x15, 0xe0, 0xa1, 0x4e, 0xdb, 0xfd, 0xb7, 0x07, 0x78, 0x93, 0x8f,
-	0xbc, 0x0d, 0x4f, 0x7c, 0x83, 0x95, 0x3b, 0x7d, 0x29, 0xe6, 0x6a, 0x9c, 0x12, 0x44, 0x43, 0x3e,
-	0xa7, 0xf9, 0x91, 0xa6, 0x77, 0x3a, 0xd4, 0x2f, 0x50, 0xfe, 0xf0, 0xf7, 0xf1, 0x3f, 0x2f, 0xeb,
-	0xdf, 0x3b, 0xeb, 0x9b, 0xd0, 0x17, 0xc8, 0xe0, 0x5d, 0x37, 0x61, 0x83, 0x8f, 0x1c, 0xfd, 0x14,
-	0x1e, 0xa5, 0x6a, 0x13, 0x93, 0x48, 0x9a, 0x20, 0x13, 0x94, 0x5d, 0x9f, 0x75, 0x4c, 0x44, 0x24,
-	0xb2, 0x21, 0x8b, 0x42, 0x1f, 0xe5, 0xa2, 0x8b, 0xbf, 0x41, 0x0f, 0x84, 0x6f, 0x55, 0x9a, 0xd0,
-	0xa9, 0x9c, 0xac, 0xa8, 0x04, 0x15, 0x52, 0xfd, 0x7a, 0x29, 0x10, 0x85, 0x1e, 0x4b, 0x71, 0x7d,
-	0x09, 0x63, 0xac, 0xac, 0x74, 0x24, 0x43, 0x22, 0x03, 0x59, 0x11, 0x0c, 0x09, 0x95, 0x0e, 0xff,
-	0x9e, 0x81, 0xbb, 0xa9, 0xff, 0xac, 0xf0, 0x3e, 0x3c, 0x64, 0xda, 0xba, 0x21, 0x28, 0x9d, 0xd3,
-	0x8b, 0x94, 0xa8, 0x44, 0x51, 0x4b, 0x4a, 0x24, 0x4a, 0x5c, 0x82, 0xef, 0xa9, 0x46, 0xec, 0x04,
-	0x37, 0x39, 0x51, 0xed, 0xd3, 0xcb, 0x76, 0x00, 0x9f, 0xa5, 0x90, 0x1a, 0x51, 0xcf, 0xe5, 0x0e,
-	0x4d, 0x20, 0x5d, 0x22, 0xe7, 0xb2, 0x28, 0xa1, 0xfc, 0xe1, 0xef, 0x72, 0x50, 0xdf, 0xf8, 0x19,
-	0x86, 0x9b, 0x70, 0xe7, 0x5c, 0xe8, 0x0f, 0xa5, 0xed, 0x6a, 0x7c, 0x07, 0x50, 0x8c, 0xe1, 0x5f,
-	0x05, 0x19, 0x5a, 0xa7, 0x36, 0xe4, 0xb9, 0xf3, 0x59, 0x5a, 0xd8, 0x62, 0x38, 0xfd, 0x64, 0xd5,
-	0x4d, 0x41, 0x44, 0xb9, 0x54, 0xa2, 0x23, 0xa2, 0x7c, 0xc2, 0x92, 0x30, 0xd0, 0x24, 0x22, 0xd1,
-	0x2f, 0x96, 0xcd, 0x75, 0x5f, 0x0a, 0x86, 0xa1, 0xa3, 0x62, 0x02, 0xed, 0x49, 0xc4, 0xf8, 0x1e,
-	0x95, 0x12, 0x36, 0x44, 0xa9, 0xaf, 0xcb, 0x43, 0x1d, 0x95, 0xe9, 0x9d, 0x8e, 0xe1, 0x9a, 0x44,
-	0x44, 0x5a, 0xeb, 0x48, 0x0f, 0x55, 0x30, 0x86, 0x46, 0x8c, 0x22, 0xda, 0x00, 0x41, 0x02, 0x13,
-	0x07, 0x03, 0x5e, 0x5c, 0x63, 0x98, 0x41, 0x86, 0x46, 0xcf, 0x64, 0x00, 0xaa, 0x25, 0x96, 0x0d,
-	0xcd, 0xa3, 0x3a, 0xbe, 0x0b, 0xb7, 0x63, 0xf8, 0x80, 0xde, 0x1c, 0x1d, 0x35, 0x12, 0xbe, 0x9f,
-	0x5e, 0x18, 0x92, 0x8e, 0x76, 0x0e, 0xff, 0x90, 0x03, 0x58, 0x7f, 0x1d, 0xae, 0x5d, 0xd6, 0x45,
-	0xa1, 0xbf, 0x79, 0x12, 0x2b, 0xb3, 0x9c, 0xba, 0x50, 0x45, 0x43, 0x45, 0x99, 0x24, 0xfc, 0xbd,
-	0xa4, 0x19, 0x2a, 0xca, 0xae, 0x57, 0xe3, 0xb0, 0x60, 0x18, 0x2a, 0xca, 0x25, 0x85, 0xbb, 0xd2,
-	0xc0, 0x50, 0x51, 0x3e, 0x29, 0xac, 0xc9, 0xa2, 0x1a, 0x3f, 0x02, 0x8e, 0x2a, 0x82, 0xa2, 0xa2,
-	0x62, 0xd2, 0xc4, 0x40, 0x16, 0x89, 0x8a, 0x4a, 0xdb, 0x70, 0xbf, 0x2f, 0xa3, 0x72, 0x12, 0x1e,
-	0x2a, 0xb2, 0xa1, 0xa3, 0x4a, 0xd2, 0xf4, 0x0b, 0xb9, 0xaf, 0x22, 0x48, 0xa2, 0x03, 0xe9, 0x4c,
-	0x40, 0xd5, 0x24, 0x7a, 0x26, 0x9f, 0x09, 0xa8, 0x96, 0x44, 0x0d, 0x89, 0x08, 0xa8, 0xbe, 0xb5,
-	0x11, 0xc9, 0x10, 0x50, 0x03, 0xef, 0xc2, 0x4e, 0x1c, 0x95, 0x5e, 0x09, 0x68, 0x67, 0x3b, 0x6e,
-	0x86, 0x21, 0x20, 0xb4, 0x1d, 0x65, 0x0a, 0xdf, 0x3e, 0xfc, 0x4d, 0x06, 0x6a, 0xf1, 0x1f, 0xba,
-	0x34, 0x15, 0xf9, 0x4b, 0xcf, 0xf2, 0x6c, 0xa8, 0x27, 0x93, 0x66, 0x93, 0x54, 0x5f, 0xa0, 0x0c,
-	0x2d, 0x67, 0x49, 0x15, 0xe1, 0x5c, 0x90, 0xfb, 0xf4, 0xb5, 0x40, 0x59, 0x5a, 0x3a, 0x36, 0x69,
-	0x45, 0x55, 0xe8, 0xc3, 0x21, 0x18, 0xb2, 0xaa, 0xd0, 0x82, 0x77, 0xfa, 0xcd, 0xf7, 0x5f, 0x5f,
-	0x39, 0xc1, 0xf5, 0xf2, 0xf2, 0x68, 0xe4, 0xce, 0x8e, 0xdd, 0x85, 0x3d, 0x1f, 0xb9, 0xde, 0xf8,
-	0x78, 0x6c, 0xdf, 0x38, 0x23, 0xfb, 0xab, 0x99, 0x35, 0xb7, 0xae, 0xec, 0x99, 0x3d, 0x0f, 0xbe,
-	0x72, 0xe6, 0x81, 0xed, 0x4d, 0xac, 0x91, 0x7d, 0x7c, 0xf3, 0xe4, 0xf8, 0xca, 0x3d, 0x1e, 0xcf,
-	0x9c, 0xcb, 0x22, 0x6b, 0x69, 0x9f, 0xfc, 0x37, 0x00, 0x00, 0xff, 0xff, 0x50, 0x7f, 0x9b, 0x1f,
-	0x65, 0x19, 0x00, 0x00,
+	// 2736 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x58, 0x4f, 0x6f, 0xe3, 0xc6,
+	0x15, 0x5f, 0xfd, 0x97, 0x9e, 0x24, 0x7b, 0x76, 0xf6, 0x9f, 0xe2, 0xdd, 0x4d, 0x1c, 0x35, 0x09,
+	0x1c, 0xb7, 0xb1, 0xbd, 0x5a, 0x6f, 0xb1, 0x69, 0x10, 0x14, 0x34, 0x45, 0x59, 0xcc, 0x4a, 0x24,
+	0x33, 0xa4, 0xbc, 0xeb, 0x5c, 0x08, 0x5a, 0xa2, 0x6d, 0x02, 0x92, 0x48, 0x90, 0x94, 0xb3, 0x0b,
+	0xf4, 0x54, 0xf4, 0x52, 0xa0, 0x40, 0xbf, 0x44, 0x51, 0xe4, 0xd4, 0x4b, 0x7b, 0xec, 0xa1, 0x97,
+	0x7e, 0x81, 0xde, 0xfa, 0x19, 0xfa, 0x05, 0x7a, 0x2c, 0x66, 0x86, 0x94, 0x28, 0x8a, 0xbb, 0xd9,
+	0x00, 0xbd, 0xcd, 0xbc, 0xdf, 0xef, 0xbd, 0x79, 0x7c, 0xf3, 0xe6, 0xcd, 0x1b, 0x42, 0x63, 0x32,
+	0x73, 0x0e, 0xaf, 0xbf, 0x3f, 0xf0, 0x7c, 0x37, 0x74, 0x71, 0x61, 0x32, 0x73, 0x76, 0x3e, 0xba,
+	0x72, 0xdd, 0xab, 0xa9, 0x7d, 0xc8, 0x44, 0x17, 0x8b, 0xcb, 0xc3, 0xd0, 0x99, 0xd9, 0x41, 0x68,
+	0xcd, 0x3c, 0xce, 0x6a, 0xef, 0x40, 0x71, 0xb4, 0x70, 0x26, 0x18, 0x43, 0x71, 0xb1, 0x70, 0x26,
+	0xad, 0xdc, 0x6e, 0x6e, 0xaf, 0x46, 0xd8, 0xb8, 0xfd, 0x73, 0x80, 0xbe, 0xe5, 0x4f, 0xbe, 0xb7,
+	0x7c, 0x5b, 0xee, 0xe2, 0xc7, 0x09, 0x46, 0xbd, 0x53, 0x3b, 0x98, 0xcc, 0x9c, 0x03, 0xaa, 0x1a,
+	0x91, 0x1f, 0x40, 0x61, 0xe4, 0x3b, 0x18, 0x41, 0x61, 0xe1, 0x3b, 0x91, 0x19, 0x3a, 0x6c, 0xff,
+	0xae, 0x00, 0x5b, 0xa2, 0x3b, 0xf3, 0xdc, 0xb9, 0x3d, 0x0f, 0xf5, 0xd0, 0x0a, 0x6d, 0xdc, 0x07,
+	0x1c, 0xd0, 0x81, 0x39, 0xb5, 0x82, 0xd0, 0x1c, 0x5f, 0x5b, 0xf3, 0x2b, 0x3b, 0x36, 0xbc, 0x73,
+	0xc0, 0x5d, 0x3e, 0x88, 0x5d, 0x3e, 0x30, 0x62, 0x97, 0x09, 0x62, 0x5a, 0x03, 0x2b, 0x08, 0x45,
+	0xae, 0x83, 0xbf, 0x84, 0xba, 0x35, 0x99, 0x39, 0x73, 0x93, 0x21, 0xad, 0xfc, 0x6e, 0x6e, 0x6f,
+	0xab, 0xd3, 0x62, 0xbe, 0x2d, 0xd7, 0x14, 0x28, 0x81, 0x2d, 0x4c, 0xc0, 0x5a, 0x8e, 0xf1, 0x2f,
+	0x01, 0x5c, 0xcf, 0xf6, 0x23, 0xcd, 0x02, 0xd3, 0x7c, 0xb0, 0xae, 0xa9, 0x7a, 0xb6, 0xcf, 0x15,
+	0x6b, 0x6e, 0x3c, 0xa4, 0x4b, 0x2e, 0x02, 0xeb, 0xca, 0x8e, 0x14, 0x8b, 0x59, 0x4b, 0x8e, 0x28,
+	0x21, 0x5a, 0x72, 0xb1, 0x1c, 0x33, 0x6f, 0xa7, 0x96, 0x3f, 0x8b, 0x54, 0x4b, 0x99, 0xde, 0x52,
+	0x42, 0xec, 0xed, 0x72, 0x8c, 0x7f, 0x0d, 0xcd, 0x20, 0xb4, 0xe6, 0x93, 0x8b, 0x37, 0x91, 0x72,
+	0x99, 0x29, 0xef, 0xac, 0x2b, 0xeb, 0x9c, 0xc2, 0xd5, 0x1b, 0x41, 0x62, 0xd6, 0xfe, 0x4f, 0x1e,
+	0xee, 0xac, 0x78, 0xf6, 0x3c, 0x70, 0xfd, 0xae, 0x15, 0x5a, 0xf8, 0x2e, 0x94, 0x6e, 0xac, 0xe9,
+	0xc2, 0x66, 0xe1, 0x2f, 0x11, 0x3e, 0xc1, 0x9f, 0x41, 0x31, 0x7c, 0xe3, 0xc5, 0x01, 0xc5, 0x6c,
+	0x15, 0x4a, 0x3f, 0xa3, 0xa8, 0xf1, 0xc6, 0xb3, 0x09, 0xc3, 0xf1, 0xa7, 0x50, 0x0a, 0xc6, 0xd6,
+	0x34, 0x8e, 0xdf, 0x36, 0x23, 0x32, 0x92, 0x4e, 0xc5, 0x84, 0xa3, 0xf8, 0x11, 0xd4, 0x3c, 0xdf,
+	0x1e, 0x3b, 0x81, 0xe3, 0xce, 0x59, 0xc4, 0x4a, 0x64, 0x25, 0xc0, 0x9f, 0x43, 0x99, 0x7e, 0xd3,
+	0x22, 0x88, 0x22, 0x72, 0x9b, 0x59, 0xe1, 0x3e, 0xea, 0x0c, 0x20, 0x11, 0x01, 0xff, 0x0c, 0x9a,
+	0x8b, 0xb9, 0x13, 0x06, 0xe6, 0xc4, 0x09, 0xbc, 0xa9, 0xf5, 0x86, 0x85, 0xa1, 0x46, 0x1a, 0x4c,
+	0xd8, 0xe5, 0x32, 0xfc, 0x1c, 0x6a, 0xcb, 0x34, 0x6f, 0x55, 0x7e, 0x34, 0xab, 0x56, 0x64, 0xbc,
+	0x0f, 0xb7, 0xd9, 0xf7, 0x9b, 0x0b, 0x6f, 0x42, 0xf3, 0xd3, 0xa7, 0x91, 0xae, 0xee, 0xe6, 0xf6,
+	0x9a, 0x64, 0x9b, 0x01, 0x23, 0x26, 0x27, 0x74, 0x47, 0x1e, 0x42, 0x6d, 0x62, 0x85, 0x96, 0xc9,
+	0xe2, 0x54, 0x63, 0x6e, 0x54, 0xa9, 0x80, 0x46, 0xa7, 0xfd, 0x87, 0x32, 0x3c, 0xd0, 0x5c, 0x3f,
+	0x5c, 0x6d, 0x6b, 0x18, 0xfa, 0xce, 0xc5, 0x22, 0xb4, 0x03, 0xfc, 0x2d, 0x6c, 0x8d, 0xdd, 0xf9,
+	0xdc, 0x1e, 0x87, 0xae, 0xcf, 0xb5, 0x73, 0xec, 0xb3, 0xf7, 0xd9, 0x67, 0xbf, 0x45, 0xeb, 0x40,
+	0x8c, 0x55, 0x58, 0xf4, 0x9b, 0xe3, 0xe4, 0x14, 0x3f, 0x87, 0x52, 0xe0, 0xd9, 0xf6, 0x24, 0xda,
+	0xaf, 0xf6, 0x3b, 0x2d, 0xe9, 0x94, 0x49, 0xb8, 0x02, 0x16, 0xa0, 0xca, 0x42, 0x32, 0x76, 0xa7,
+	0xd1, 0x1e, 0x7e, 0xfa, 0x4e, 0x65, 0x2d, 0x22, 0x93, 0xa5, 0x1a, 0xfe, 0x14, 0xb6, 0xbc, 0xeb,
+	0x37, 0x81, 0x33, 0xb6, 0xa6, 0xe6, 0xd4, 0xba, 0xb0, 0xa7, 0x6c, 0x87, 0x6b, 0xa4, 0x19, 0x4b,
+	0x07, 0x54, 0x48, 0xb7, 0x6e, 0x66, 0x79, 0x9e, 0x33, 0xbf, 0x8a, 0x58, 0x25, 0xbe, 0x75, 0x91,
+	0x90, 0x93, 0x8e, 0xa1, 0xe9, 0xb9, 0x73, 0xd3, 0x99, 0x98, 0x63, 0x77, 0x7e, 0xe9, 0x5c, 0xb1,
+	0xfd, 0xad, 0x77, 0x50, 0xe4, 0xd3, 0x5c, 0x9e, 0x88, 0x4c, 0x4e, 0xea, 0xde, 0x6a, 0xd2, 0xf6,
+	0xa0, 0xb9, 0x16, 0x1e, 0xfc, 0x08, 0x5a, 0xa2, 0xaa, 0x28, 0x92, 0x68, 0xa8, 0xc4, 0x34, 0xce,
+	0x35, 0xc9, 0x1c, 0x29, 0x5d, 0xa9, 0x27, 0x2b, 0x52, 0x17, 0xdd, 0xc2, 0x55, 0x28, 0x92, 0x6f,
+	0x8e, 0x9f, 0xa1, 0x1c, 0x6e, 0x40, 0xb5, 0x27, 0x9f, 0x48, 0xc4, 0x1c, 0x88, 0x28, 0x8f, 0xb7,
+	0xa1, 0xce, 0x67, 0xba, 0x68, 0x6a, 0x22, 0x2a, 0xe0, 0x26, 0xd4, 0xb8, 0x60, 0xa8, 0xa9, 0xa8,
+	0x88, 0x6b, 0x50, 0x22, 0x7a, 0xe7, 0x69, 0x07, 0x95, 0xda, 0x7f, 0xc9, 0x41, 0x89, 0xc5, 0x11,
+	0xdf, 0x81, 0x6d, 0x5d, 0x93, 0xa4, 0xee, 0xda, 0x0a, 0x75, 0xa8, 0x74, 0xcf, 0x15, 0x61, 0x28,
+	0x8b, 0x28, 0x47, 0xad, 0x9c, 0xca, 0xa7, 0xc2, 0x89, 0x6c, 0x98, 0x4f, 0x50, 0x1e, 0x6f, 0x01,
+	0x2c, 0xa7, 0x47, 0xa8, 0x90, 0x9c, 0x77, 0x9e, 0xa1, 0x62, 0x72, 0x7e, 0x7c, 0x84, 0x4a, 0xd4,
+	0xab, 0x15, 0xff, 0x08, 0x95, 0x93, 0x82, 0xe3, 0xa3, 0x23, 0x54, 0xc1, 0x08, 0x1a, 0x43, 0x29,
+	0xb6, 0x70, 0x74, 0x84, 0xaa, 0x49, 0xc9, 0x93, 0xce, 0xb3, 0x23, 0x54, 0x6b, 0xff, 0x06, 0xaa,
+	0xf1, 0xd6, 0xe1, 0xfb, 0x80, 0x35, 0xa2, 0x1a, 0xaa, 0xa8, 0x0e, 0xd6, 0xbc, 0x6e, 0x40, 0x55,
+	0x32, 0xfa, 0x12, 0x51, 0x24, 0x03, 0xe5, 0x68, 0x94, 0x4e, 0x35, 0x55, 0x41, 0x79, 0xfa, 0xdd,
+	0xaf, 0xd8, 0xb0, 0x80, 0x01, 0xca, 0xaf, 0x4e, 0x75, 0x3a, 0x66, 0xe1, 0x38, 0xed, 0x09, 0xba,
+	0x81, 0x4a, 0x54, 0xac, 0x4b, 0x44, 0x16, 0x06, 0xa8, 0x4c, 0xf5, 0x24, 0x4a, 0xa8, 0xd0, 0xd1,
+	0x89, 0x6c, 0xe8, 0xa8, 0xda, 0x1e, 0xc1, 0xe3, 0xb5, 0x84, 0xe2, 0xe5, 0x3b, 0x71, 0x26, 0x36,
+	0xf6, 0x3d, 0xf7, 0x3e, 0xfb, 0x3e, 0x86, 0x7a, 0x02, 0xc3, 0xf7, 0xa0, 0xcc, 0x8d, 0x30, 0xed,
+	0x06, 0x29, 0x31, 0x2e, 0xfe, 0x1a, 0x1e, 0x46, 0xb6, 0x43, 0xdf, 0x9a, 0x07, 0x33, 0x27, 0x34,
+	0x3d, 0xdb, 0x77, 0xdc, 0x89, 0x33, 0x76, 0xc2, 0x37, 0xec, 0xc8, 0x34, 0x49, 0x8b, 0x71, 0x8d,
+	0x88, 0xa0, 0xad, 0xf0, 0xb6, 0x04, 0x8f, 0x44, 0x77, 0x1e, 0x5a, 0xce, 0xdc, 0xf6, 0xb3, 0x8e,
+	0xf3, 0x66, 0xfa, 0xe7, 0x32, 0xd2, 0xbf, 0xfd, 0xcf, 0x1c, 0xdc, 0xd7, 0x82, 0x45, 0x96, 0x85,
+	0x73, 0xb8, 0x1d, 0x2c, 0x3c, 0xcf, 0xf5, 0x43, 0x7b, 0x62, 0xde, 0xb8, 0xd3, 0xd0, 0xba, 0x8a,
+	0x6b, 0xc2, 0x2f, 0x78, 0x00, 0x32, 0xf5, 0x0e, 0xf4, 0x58, 0xe9, 0x8c, 0xeb, 0x10, 0x14, 0xa4,
+	0x24, 0x6d, 0x0d, 0x50, 0x9a, 0x85, 0x3f, 0x82, 0x87, 0xfa, 0x48, 0xd3, 0x54, 0x62, 0x48, 0x5d,
+	0xf3, 0x4c, 0x1d, 0x18, 0xc2, 0xe9, 0xfa, 0xf9, 0xa8, 0x40, 0xe1, 0xec, 0xf8, 0x39, 0x4f, 0x81,
+	0xb3, 0xce, 0xd3, 0x23, 0x94, 0x67, 0xa3, 0x27, 0x4f, 0x9e, 0xa1, 0x42, 0xfb, 0x5f, 0x25, 0xf8,
+	0x88, 0x85, 0x69, 0x6c, 0x3b, 0x37, 0x89, 0x88, 0x04, 0x89, 0x0f, 0xd2, 0xa0, 0x7e, 0xe9, 0xfa,
+	0x33, 0xf3, 0xd2, 0xa2, 0x27, 0x32, 0xfa, 0x94, 0x43, 0xf6, 0x29, 0x3f, 0xa2, 0x7a, 0xd0, 0x73,
+	0xfd, 0x59, 0x8f, 0xa9, 0x11, 0xb8, 0x5c, 0x8e, 0x71, 0x1f, 0x80, 0x6d, 0x9e, 0x99, 0xb8, 0x95,
+	0x3e, 0x7f, 0x2f, 0x83, 0xac, 0x5c, 0xd6, 0x98, 0x32, 0x2b, 0x0d, 0x1f, 0x43, 0x63, 0x66, 0xbd,
+	0xa6, 0xf7, 0x47, 0x68, 0xcd, 0xc7, 0xfc, 0xe2, 0x6a, 0x92, 0xfa, 0xcc, 0x7a, 0xdd, 0x8d, 0x44,
+	0xf8, 0x6b, 0xc0, 0x49, 0x8a, 0xc9, 0x6f, 0xb8, 0x62, 0xf6, 0x0d, 0x87, 0x12, 0x9a, 0x4c, 0x42,
+	0x0b, 0x9d, 0xff, 0xda, 0xfc, 0xde, 0xba, 0xb1, 0xa7, 0xf6, 0xfc, 0x2a, 0xbc, 0x6e, 0x95, 0x76,
+	0x0b, 0x7b, 0x4d, 0xd2, 0xf0, 0x5f, 0xbf, 0x5c, 0xca, 0x28, 0x29, 0x5c, 0x23, 0x95, 0x39, 0x29,
+	0x4c, 0x92, 0x7e, 0x05, 0x68, 0xc5, 0x88, 0xdc, 0xa8, 0x64, 0xbb, 0xb1, 0xbd, 0x22, 0x32, 0x41,
+	0xfb, 0x1f, 0x39, 0x80, 0x55, 0x30, 0xf1, 0x03, 0xb8, 0xd3, 0x53, 0xc9, 0xd0, 0xec, 0x09, 0xac,
+	0x26, 0x8e, 0x94, 0x17, 0x8a, 0xfa, 0x52, 0xe1, 0xc5, 0xf0, 0x5b, 0xbd, 0xa7, 0xf1, 0x3a, 0x45,
+	0x47, 0xa6, 0x36, 0x18, 0xe9, 0x28, 0x4f, 0xcf, 0x34, 0x9d, 0x76, 0x9e, 0xa3, 0x02, 0xcd, 0x08,
+	0xca, 0x29, 0xd2, 0x12, 0xb1, 0xa4, 0x94, 0xa8, 0xf8, 0x55, 0x4f, 0xe3, 0x67, 0x5e, 0xec, 0x69,
+	0xc7, 0xfc, 0xcc, 0x8b, 0x3d, 0xad, 0x83, 0xaa, 0x6c, 0xa4, 0x09, 0x2f, 0x50, 0x0d, 0x97, 0x21,
+	0xff, 0xaa, 0x83, 0x80, 0x16, 0x0c, 0x95, 0xd6, 0x17, 0x54, 0xa7, 0x9a, 0x62, 0x4f, 0x43, 0x0d,
+	0x6a, 0x90, 0xf2, 0x4d, 0x41, 0x54, 0x51, 0x73, 0x39, 0xeb, 0x8a, 0x2a, 0xda, 0x6a, 0x5f, 0x43,
+	0x91, 0x6d, 0x19, 0x82, 0x46, 0x54, 0xc3, 0x63, 0xa7, 0x7f, 0x62, 0xa5, 0x62, 0xae, 0xa8, 0x0a,
+	0x2a, 0xd1, 0xc2, 0xac, 0x9c, 0x9a, 0x9a, 0xaa, 0x74, 0x92, 0x95, 0xaa, 0xfd, 0xef, 0x0a, 0xd4,
+	0x96, 0xd9, 0x43, 0x7b, 0xe1, 0xb9, 0x35, 0xb3, 0xe3, 0x5e, 0x98, 0x8e, 0xf1, 0x1e, 0x94, 0xc6,
+	0x53, 0x2b, 0x08, 0xd6, 0x3a, 0xa2, 0xa5, 0x0a, 0x4b, 0x32, 0x4e, 0xc0, 0xbb, 0x50, 0x9f, 0xd8,
+	0xc1, 0xd8, 0x77, 0xbc, 0x90, 0x76, 0x3b, 0x05, 0x66, 0x24, 0x29, 0xc2, 0xf7, 0xa1, 0xec, 0x59,
+	0xbe, 0x3d, 0x0f, 0xa3, 0x8b, 0x32, 0x9a, 0xe1, 0x4f, 0x60, 0x8b, 0x8f, 0x4c, 0xdf, 0x9e, 0x9a,
+	0x9e, 0xcb, 0xfb, 0xa1, 0x12, 0x69, 0x70, 0x29, 0xb1, 0xa7, 0x9a, 0x1b, 0xe0, 0x7d, 0xa8, 0x8e,
+	0xaf, 0x9d, 0xe9, 0xc4, 0xb7, 0xe7, 0x2c, 0x69, 0xea, 0x9d, 0xad, 0x75, 0x67, 0xc8, 0x12, 0xa7,
+	0xc9, 0x7e, 0x1d, 0x75, 0xf0, 0xa6, 0x6f, 0xdf, 0xb0, 0xe4, 0xa9, 0x91, 0x7a, 0x2c, 0x23, 0xf6,
+	0x0d, 0xa5, 0x5c, 0x3a, 0xfe, 0x6c, 0x49, 0xa9, 0x72, 0x4a, 0x2c, 0x8b, 0x28, 0x81, 0x7b, 0x19,
+	0x2e, 0x29, 0xbc, 0xd9, 0xa9, 0xc7, 0x32, 0x4a, 0x79, 0x0c, 0x10, 0xd8, 0xbe, 0x63, 0x4d, 0xcd,
+	0xf9, 0x62, 0xd6, 0x02, 0x46, 0xa8, 0x71, 0x89, 0xb2, 0x98, 0xe1, 0x0f, 0xa0, 0x3a, 0xbb, 0xbc,
+	0x32, 0x59, 0x54, 0xeb, 0x0c, 0xac, 0xcc, 0x2e, 0xaf, 0x14, 0x1a, 0xd8, 0xc7, 0x00, 0x33, 0x77,
+	0x62, 0x4f, 0x39, 0xd8, 0xe0, 0x9a, 0x4c, 0xc2, 0xe0, 0xbb, 0x50, 0xb2, 0xa6, 0x8e, 0x15, 0xb4,
+	0x9a, 0x0c, 0xe1, 0x13, 0x6a, 0xcf, 0x0a, 0x02, 0x3b, 0xa4, 0xb5, 0x7e, 0x8b, 0xdb, 0x63, 0x73,
+	0x79, 0x42, 0x2f, 0x01, 0x27, 0x30, 0x2f, 0xfd, 0x45, 0x6b, 0x7b, 0x37, 0xb7, 0x57, 0x25, 0x25,
+	0x27, 0xe8, 0xf9, 0x0b, 0xfc, 0x8c, 0x7b, 0x40, 0xbb, 0xb7, 0x16, 0xfa, 0xd1, 0x96, 0x90, 0x7a,
+	0xd7, 0xa5, 0x4d, 0xde, 0x0e, 0x7f, 0xce, 0xdc, 0x66, 0x1a, 0x55, 0xfe, 0xe6, 0xf1, 0x1d, 0xf6,
+	0xb0, 0x59, 0x3e, 0x88, 0x70, 0xe6, 0x83, 0x08, 0x7f, 0x0e, 0x25, 0xde, 0xa9, 0xdf, 0x61, 0xf8,
+	0x9d, 0x8d, 0x4e, 0x3d, 0xa4, 0xed, 0x71, 0xfc, 0x2e, 0x08, 0x58, 0xb7, 0x4b, 0xfd, 0xb3, 0x5a,
+	0x77, 0xd9, 0xae, 0xa6, 0xde, 0x05, 0xab, 0x96, 0x9d, 0x40, 0xb0, 0x6a, 0xdf, 0xbf, 0x82, 0x1a,
+	0xad, 0xee, 0xa6, 0x15, 0x86, 0x7e, 0xab, 0xc3, 0x56, 0x7a, 0xf4, 0xae, 0x06, 0xae, 0x7f, 0x8b,
+	0x54, 0xa9, 0x02, 0x95, 0xe0, 0x6f, 0x58, 0x27, 0xca, 0xaf, 0x36, 0x6e, 0xe1, 0x29, 0xb3, 0xf0,
+	0x71, 0xb4, 0xf4, 0xdb, 0x6f, 0xbd, 0xfe, 0x2d, 0xd6, 0x82, 0x72, 0x9c, 0xd9, 0x7a, 0x0e, 0x55,
+	0x2f, 0x58, 0x70, 0x2b, 0xc7, 0xcc, 0xca, 0xc3, 0x77, 0xdc, 0x5d, 0xfd, 0x5b, 0xa4, 0xe2, 0x05,
+	0x0b, 0xa6, 0xf9, 0x2d, 0xa0, 0x70, 0x55, 0xc4, 0xb9, 0x85, 0x67, 0xcc, 0xc2, 0x27, 0xef, 0x53,
+	0xe1, 0xfb, 0xb7, 0xc8, 0x76, 0x42, 0x9f, 0x02, 0x27, 0x00, 0xd5, 0xc0, 0xb3, 0xc7, 0xce, 0xa5,
+	0x33, 0x6e, 0xff, 0x90, 0x83, 0x6a, 0xfc, 0x8c, 0xc5, 0x5f, 0x41, 0x3d, 0xf1, 0xe6, 0x7c, 0x8f,
+	0x27, 0x27, 0x4c, 0x97, 0xaf, 0x4d, 0xdc, 0x86, 0xa2, 0xef, 0xba, 0x21, 0x2b, 0x01, 0x9b, 0xa7,
+	0x8e, 0x61, 0xcb, 0x05, 0x2e, 0x5c, 0x37, 0xb4, 0x27, 0xec, 0xf4, 0xbf, 0xc7, 0x02, 0x27, 0x8c,
+	0xdd, 0xfe, 0x6f, 0x1e, 0xee, 0x0c, 0xdd, 0x89, 0x73, 0xe9, 0x58, 0x17, 0x53, 0xfb, 0xff, 0x55,
+	0x90, 0x3e, 0x5b, 0x96, 0x9b, 0x42, 0xa6, 0xe3, 0x6f, 0x2f, 0x3f, 0xc5, 0x8c, 0xf2, 0xb3, 0x3c,
+	0x90, 0xa5, 0xb7, 0x1d, 0xc8, 0xf2, 0xfa, 0x81, 0x8c, 0x8e, 0x50, 0x25, 0xeb, 0x08, 0xa5, 0x9e,
+	0xef, 0xd5, 0x9f, 0xf0, 0x7c, 0x17, 0x36, 0x13, 0x3f, 0xe3, 0xd9, 0x93, 0x6e, 0x34, 0x93, 0xe9,
+	0x9f, 0xcc, 0x92, 0xfd, 0xbf, 0x15, 0xe8, 0x1b, 0x22, 0x11, 0x3d, 0xfe, 0x86, 0x18, 0x6a, 0xaa,
+	0x22, 0x29, 0xc6, 0xe6, 0x1b, 0x62, 0x07, 0xee, 0x6f, 0xa0, 0xfc, 0x76, 0xca, 0x65, 0x60, 0x62,
+	0x5f, 0xd0, 0x75, 0x99, 0xde, 0xaa, 0x9b, 0x56, 0x4f, 0x04, 0xf1, 0x85, 0x36, 0x10, 0x14, 0x09,
+	0x15, 0x32, 0x50, 0x51, 0x55, 0x0c, 0x41, 0x56, 0x24, 0x82, 0x8a, 0xb4, 0x71, 0x4b, 0xa1, 0x9a,
+	0xfa, 0x92, 0x3e, 0x57, 0x46, 0x9a, 0x36, 0x38, 0x47, 0x25, 0xda, 0xd8, 0xa7, 0x08, 0x3d, 0x41,
+	0x41, 0x65, 0xfc, 0x01, 0xdc, 0x4b, 0xc9, 0x75, 0x49, 0xd1, 0x55, 0x82, 0x2a, 0x19, 0xd0, 0x50,
+	0xed, 0x8e, 0x06, 0x12, 0xaa, 0xd2, 0x96, 0x61, 0x63, 0x39, 0x62, 0xa0, 0x5a, 0xc6, 0x32, 0xa2,
+	0x36, 0x42, 0x90, 0xf1, 0xdd, 0x27, 0x82, 0x61, 0x48, 0xe4, 0x1c, 0xd5, 0x33, 0x30, 0xdd, 0x50,
+	0x89, 0x70, 0x2a, 0xa1, 0x46, 0x96, 0x0f, 0xd2, 0x50, 0x25, 0xe7, 0xa8, 0x89, 0x3f, 0x84, 0x9d,
+	0x14, 0x64, 0x10, 0x41, 0xd1, 0x45, 0x49, 0x3e, 0x93, 0x08, 0xda, 0xda, 0xff, 0x6b, 0x2e, 0xf1,
+	0x57, 0x63, 0x95, 0x29, 0xb1, 0x9e, 0x29, 0x74, 0x87, 0xb2, 0x62, 0xea, 0x86, 0x60, 0xac, 0x6f,
+	0x5f, 0x14, 0xe8, 0x14, 0x1e, 0x6f, 0xe0, 0x43, 0x78, 0xb0, 0x81, 0x0e, 0x54, 0xf1, 0x85, 0xd4,
+	0x45, 0x79, 0xdc, 0x86, 0x0f, 0x37, 0x40, 0xbd, 0x3f, 0x32, 0x0c, 0x59, 0x39, 0x35, 0xbb, 0xd4,
+	0x40, 0x01, 0x3f, 0x86, 0x0f, 0x32, 0xcc, 0x47, 0x26, 0x8a, 0xfb, 0x3f, 0xe4, 0x00, 0x6f, 0xfe,
+	0x64, 0x5a, 0x6a, 0xa9, 0x1a, 0xdd, 0xd4, 0x0d, 0x9f, 0x63, 0xaf, 0xd6, 0xe0, 0xd8, 0xe5, 0xf8,
+	0x83, 0x12, 0x60, 0x57, 0xd6, 0x85, 0x93, 0x01, 0xf3, 0x39, 0x43, 0x55, 0x52, 0x38, 0x58, 0xc8,
+	0x02, 0x0d, 0x49, 0xa7, 0x9f, 0x83, 0x8a, 0xfb, 0x7f, 0x4e, 0x06, 0x78, 0xf5, 0x5b, 0x6b, 0x19,
+	0xe0, 0x91, 0x4e, 0x5f, 0x0f, 0x6f, 0x0f, 0xf0, 0x3a, 0x1e, 0x7b, 0x1b, 0xed, 0xf8, 0x1a, 0x2a,
+	0x77, 0x07, 0x52, 0xc2, 0xd5, 0x24, 0x24, 0x88, 0x86, 0x7c, 0x46, 0xcf, 0x47, 0x96, 0xde, 0xc9,
+	0x48, 0x3f, 0x47, 0xc5, 0xfd, 0x3f, 0x26, 0xff, 0x6f, 0xad, 0x7e, 0xa2, 0xad, 0x32, 0x61, 0x20,
+	0x90, 0xe1, 0xbb, 0x32, 0x61, 0x0d, 0x8f, 0x1d, 0xfd, 0x18, 0x1e, 0x67, 0x6a, 0x13, 0x93, 0x48,
+	0x9a, 0x20, 0x13, 0x94, 0x5f, 0xed, 0x75, 0x82, 0x22, 0x12, 0xd9, 0x90, 0x45, 0x61, 0x80, 0x0a,
+	0x71, 0xe2, 0xaf, 0xc1, 0x43, 0xe1, 0x1b, 0x95, 0x1e, 0xe8, 0x4c, 0x4c, 0x56, 0x54, 0x82, 0x4a,
+	0x99, 0x7e, 0xbd, 0x14, 0x88, 0x42, 0xb7, 0xa5, 0xbc, 0x4a, 0xc2, 0x04, 0x2a, 0x2b, 0x5d, 0xc9,
+	0x90, 0xc8, 0x50, 0x56, 0x04, 0x43, 0x42, 0x95, 0xfd, 0xbf, 0xe7, 0xe0, 0x5e, 0xe6, 0x9f, 0x41,
+	0xbc, 0x0b, 0x8f, 0x98, 0xb6, 0x6e, 0x08, 0x4a, 0xf7, 0xe4, 0x3c, 0x23, 0x2a, 0x71, 0xd4, 0xd2,
+	0x8c, 0x54, 0x89, 0x4b, 0xe1, 0x7d, 0xd5, 0x48, 0xec, 0xe0, 0x3a, 0x26, 0xaa, 0x03, 0x9a, 0x6c,
+	0x7b, 0xf0, 0x49, 0x06, 0xa8, 0x11, 0xf5, 0x4c, 0xee, 0xd2, 0x03, 0xa4, 0x4b, 0xe4, 0x4c, 0x16,
+	0x25, 0x54, 0xdc, 0xff, 0x7d, 0x01, 0x9a, 0x6b, 0xbf, 0x1c, 0x71, 0x0b, 0xee, 0x9e, 0x09, 0x83,
+	0x91, 0xb4, 0x59, 0x8d, 0xef, 0x02, 0x4a, 0x20, 0xfc, 0x91, 0x91, 0xa3, 0x75, 0x6a, 0x8d, 0xcf,
+	0x9d, 0xcf, 0xd3, 0xc2, 0x96, 0x90, 0xd3, 0x17, 0xb0, 0x6e, 0x0a, 0x22, 0x2a, 0x64, 0x02, 0x5d,
+	0x11, 0x15, 0x53, 0x96, 0x84, 0xa1, 0x26, 0x11, 0x89, 0x3e, 0x80, 0xd6, 0xd7, 0x7d, 0x29, 0x18,
+	0x86, 0x8e, 0xca, 0x29, 0x69, 0x5f, 0x22, 0xc6, 0x77, 0xa8, 0x92, 0xb2, 0x21, 0x4a, 0x03, 0x5d,
+	0x1e, 0xe9, 0xa8, 0x4a, 0x73, 0x3a, 0x21, 0xd7, 0x24, 0x22, 0xd2, 0x5a, 0x47, 0xfa, 0xa8, 0x86,
+	0x31, 0x6c, 0x25, 0x20, 0xa2, 0x0d, 0x11, 0xa4, 0x64, 0xe2, 0x70, 0xc8, 0x8b, 0x6b, 0x42, 0x66,
+	0x90, 0x91, 0xd1, 0x37, 0x99, 0x00, 0x35, 0x52, 0xcb, 0x46, 0xe6, 0x51, 0x13, 0xdf, 0x83, 0xdb,
+	0x09, 0xf9, 0x90, 0x66, 0x8e, 0x8e, 0xb6, 0x52, 0xbe, 0x9f, 0x9c, 0x1b, 0x92, 0x8e, 0xb6, 0xf7,
+	0xff, 0x54, 0x00, 0x58, 0x3d, 0x36, 0x57, 0x2e, 0xeb, 0xa2, 0x30, 0x58, 0xdf, 0x89, 0xa5, 0x59,
+	0x0e, 0x9d, 0xab, 0xa2, 0xa1, 0xa2, 0x5c, 0x5a, 0xfc, 0x9d, 0xa4, 0x19, 0x2a, 0xca, 0xaf, 0x56,
+	0xe3, 0x62, 0xc1, 0x30, 0x54, 0x54, 0x48, 0x93, 0x7b, 0xd2, 0xd0, 0x50, 0x51, 0x31, 0x4d, 0xd6,
+	0x64, 0x51, 0x4d, 0x6e, 0x01, 0x97, 0x2a, 0x82, 0xa2, 0xa2, 0x72, 0xda, 0xc4, 0x50, 0x16, 0x89,
+	0x8a, 0x2a, 0x9b, 0xe2, 0xc1, 0x40, 0x46, 0xd5, 0xb4, 0x78, 0xa4, 0xc8, 0x86, 0x8e, 0x6a, 0x69,
+	0xd3, 0x2f, 0xe4, 0x81, 0x8a, 0x20, 0x2d, 0x1d, 0x4a, 0xa7, 0x02, 0xaa, 0xa7, 0xa5, 0xa7, 0xf2,
+	0xa9, 0x80, 0x1a, 0x69, 0xa9, 0x21, 0x11, 0x01, 0x35, 0x37, 0x3e, 0x44, 0x32, 0x04, 0xb4, 0x85,
+	0xef, 0xc0, 0x76, 0x52, 0x2a, 0xbd, 0x12, 0xd0, 0xf6, 0x66, 0xdc, 0x0c, 0x43, 0x40, 0x68, 0x33,
+	0xca, 0x54, 0x7c, 0x7b, 0xff, 0xb7, 0x39, 0x68, 0x24, 0x7f, 0x9b, 0xd3, 0xa3, 0xc8, 0x6f, 0x7a,
+	0x76, 0xce, 0x46, 0x7a, 0xfa, 0xd0, 0xac, 0x83, 0xea, 0x0b, 0x94, 0xa3, 0xe5, 0x2c, 0xad, 0x22,
+	0x9c, 0x09, 0xf2, 0x80, 0xde, 0x16, 0x28, 0x4f, 0x4b, 0xc7, 0x3a, 0xac, 0xa8, 0x0a, 0xbd, 0x38,
+	0x04, 0x43, 0x56, 0x15, 0x5a, 0xf0, 0x4e, 0xbe, 0xfa, 0xee, 0xcb, 0x2b, 0x27, 0xbc, 0x5e, 0x5c,
+	0x1c, 0x8c, 0xdd, 0xd9, 0xa1, 0xeb, 0xd9, 0xf3, 0xb1, 0xeb, 0x4f, 0x0e, 0x27, 0xf6, 0x8d, 0x33,
+	0xb6, 0xbf, 0x98, 0x59, 0x73, 0xeb, 0xca, 0x9e, 0xd9, 0xf3, 0xf0, 0x0b, 0x67, 0x1e, 0xda, 0xfe,
+	0xa5, 0x35, 0xb6, 0x0f, 0x6f, 0x9e, 0x1e, 0x5e, 0xb9, 0x87, 0x93, 0x99, 0x73, 0x51, 0x66, 0x1d,
+	0xf2, 0xd3, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0x6e, 0x21, 0x4b, 0xb6, 0xcb, 0x1a, 0x00, 0x00,
 }
diff --git a/protos/dmi/hw.proto b/protos/dmi/hw.proto
index edc5bb9..d31f441 100644
--- a/protos/dmi/hw.proto
+++ b/protos/dmi/hw.proto
@@ -186,6 +186,23 @@
     Speed speed = 2;
     Protocol protocol = 3;
     string physical_label = 4;
+    // The mapping_label can be used to map ports between the DMI interface and other systems like VOLTHA
+    // The value of the mapping_label should be exactly the same as generated for the same port by the other
+    // system
+    string mapping_label = 5;
+    PonIdConfig pon_id_config = 6;
+}
+
+message PortComponentChangeAttributes {
+    PonIdConfig pon_id_config = 1;
+}
+
+message PonIdConfig {
+    // The pon_id and pon_id_transmit_periodicity attributes are valid only for ports of type GPON, XGPON and XGSPON
+    // For GPON pon_id is a 7 byte value
+    // For XGS-PON, it's a 32 bit value, should be encoded in the first 4 bytes of pon_id in network byte order
+    bytes pon_id = 1;
+    uint32 pon_id_transmit_periodicity = 2; // The value is in seconds and defaults to 1 second
 }
 
 message ContainerComponentAttributes{
@@ -299,4 +316,8 @@
     string asset_id = 6;
     Uri uri = 7;
     ComponentAdminState admin_state = 8;
+    // The attribute 'specific' can be populated for specific class of components
+    oneof specific {
+        PortComponentChangeAttributes port_attr = 50;
+    }
 }
diff --git a/python/dmi/hw_pb2.py b/python/dmi/hw_pb2.py
index 72549c1..c8113ad 100644
--- a/python/dmi/hw_pb2.py
+++ b/python/dmi/hw_pb2.py
@@ -21,7 +21,7 @@
   syntax='proto3',
   serialized_options=b'Z9github.com/opencord/device-management-interface/v3/go/dmi',
   create_key=_descriptor._internal_create_key,
-  serialized_pb=b'\n\x0c\x64mi/hw.proto\x12\x03\x64mi\x1a\x1fgoogle/protobuf/timestamp.proto\"\x14\n\x04Uuid\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"%\n\nHardwareID\x12\x17\n\x04uuid\x18\x01 \x01(\x0b\x32\t.dmi.Uuid\"\x12\n\x03Uri\x12\x0b\n\x03uri\x18\x01 \x01(\t\"\xb5\x02\n\x0e\x43omponentState\x12\x36\n\x12state_last_changed\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12-\n\x0b\x61\x64min_state\x18\x02 \x01(\x0e\x32\x18.dmi.ComponentAdminState\x12+\n\noper_state\x18\x03 \x01(\x0e\x32\x17.dmi.ComponentOperState\x12-\n\x0busage_state\x18\x04 \x01(\x0e\x32\x18.dmi.ComponentUsageState\x12-\n\x0b\x61larm_state\x18\x05 \x01(\x0e\x32\x18.dmi.ComponentAlarmState\x12\x31\n\rstandby_state\x18\x06 \x01(\x0e\x32\x1a.dmi.ComponentStandbyState\"\x90\x02\n\x13\x43omponentSensorData\x12\r\n\x05value\x18\x01 \x01(\x05\x12 \n\x04type\x18\x02 \x01(\x0e\x32\x12.dmi.DataValueType\x12\x1e\n\x05scale\x18\x03 \x01(\x0e\x32\x0f.dmi.ValueScale\x12\x11\n\tprecision\x18\x04 \x01(\x05\x12!\n\x06status\x18\x05 \x01(\x0e\x32\x11.dmi.SensorStatus\x12\x15\n\runits_display\x18\x06 \x01(\t\x12-\n\ttimestamp\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x19\n\x11value_update_rate\x18\x08 \x01(\r\x12\x11\n\tdata_type\x18\t \x01(\t\"\x82\x05\n\x17PortComponentAttributes\x12\x42\n\x0e\x63onnector_type\x18\x01 \x01(\x0e\x32*.dmi.PortComponentAttributes.ConnectorType\x12\x31\n\x05speed\x18\x02 \x01(\x0e\x32\".dmi.PortComponentAttributes.Speed\x12\x37\n\x08protocol\x18\x03 \x01(\x0e\x32%.dmi.PortComponentAttributes.Protocol\x12\x16\n\x0ephysical_label\x18\x04 \x01(\t\"p\n\rConnectorType\x12\x1c\n\x18\x43ONNECTOR_TYPE_UNDEFINED\x10\x00\x12\x08\n\x04RJ45\x10\x01\x12\x0c\n\x08\x46IBER_LC\x10\x02\x12\x0f\n\x0b\x46IBER_SC_PC\x10\x03\x12\r\n\tFIBER_MPO\x10\x04\x12\t\n\x05RS232\x10\x05\"\xae\x01\n\x05Speed\x12\x13\n\x0fSPEED_UNDEFINED\x10\x00\x12\x0b\n\x07\x44YNAMIC\x10\x01\x12\r\n\tGIGABIT_1\x10\x02\x12\x0e\n\nGIGABIT_10\x10\x03\x12\x0e\n\nGIGABIT_25\x10\x04\x12\x0e\n\nGIGABIT_40\x10\x05\x12\x0f\n\x0bGIGABIT_100\x10\x06\x12\x0f\n\x0bGIGABIT_400\x10\x07\x12\x10\n\x0cMEGABIT_2500\x10\x08\x12\x10\n\x0cMEGABIT_1250\x10\t\"|\n\x08Protocol\x12\x16\n\x12PROTOCOL_UNDEFINED\x10\x00\x12\x0c\n\x08\x45THERNET\x10\x01\x12\x08\n\x04GPON\x10\x02\x12\t\n\x05XGPON\x10\x03\x12\n\n\x06XGSPON\x10\x04\x12\t\n\x05GFAST\x10\x05\x12\n\n\x06SERIAL\x10\x06\x12\x08\n\x04\x45PON\x10\x07\x12\x08\n\x04\x42ITS\x10\x08\"6\n\x1c\x43ontainerComponentAttributes\x12\x16\n\x0ephysical_label\x18\x01 \x01(\t\"\xb3\x01\n\x16PsuComponentAttributes\x12G\n\x11supported_voltage\x18\x01 \x01(\x0e\x32,.dmi.PsuComponentAttributes.SupportedVoltage\"P\n\x10SupportedVoltage\x12\x1f\n\x1bSUPPORTED_VOLTAGE_UNDEFINED\x10\x00\x12\x07\n\x03V48\x10\x01\x12\x08\n\x04V230\x10\x02\x12\x08\n\x04V115\x10\x03\"\xef\x04\n\x1fTransceiverComponentsAttributes\x12\x44\n\x0b\x66orm_factor\x18\x01 \x01(\x0e\x32/.dmi.TransceiverComponentsAttributes.FormFactor\x12=\n\ntrans_type\x18\x02 \x01(\x0e\x32).dmi.TransceiverComponentsAttributes.Type\x12\x14\n\x0cmax_distance\x18\x03 \x01(\r\x12+\n\x12max_distance_scale\x18\x04 \x01(\x0e\x32\x0f.dmi.ValueScale\x12\x15\n\rrx_wavelength\x18\x05 \x03(\r\x12\x15\n\rtx_wavelength\x18\x06 \x03(\r\x12)\n\x10wavelength_scale\x18\x07 \x01(\x0e\x32\x0f.dmi.ValueScale\"\xc0\x01\n\nFormFactor\x12\x17\n\x13\x46ORM_FACTOR_UNKNOWN\x10\x00\x12\x08\n\x04QSFP\x10\x01\x12\r\n\tQSFP_PLUS\x10\x02\x12\n\n\x06QSFP28\x10\x03\x12\x07\n\x03SFP\x10\x04\x12\x0c\n\x08SFP_PLUS\x10\x05\x12\x07\n\x03XFP\x10\x06\x12\x08\n\x04\x43\x46P4\x10\x07\x12\x08\n\x04\x43\x46P2\x10\x08\x12\x08\n\x04\x43PAK\x10\t\x12\x06\n\x02X2\x10\n\x12\t\n\x05OTHER\x10\x0b\x12\x07\n\x03\x43\x46P\x10\x0c\x12\x0c\n\x08\x43\x46P2_ACO\x10\r\x12\x0c\n\x08\x43\x46P2_DCO\x10\x0e\"h\n\x04Type\x12\x10\n\x0cTYPE_UNKNOWN\x10\x00\x12\x0c\n\x08\x45THERNET\x10\x01\x12\x08\n\x04GPON\x10\x02\x12\t\n\x05XGPON\x10\x03\x12\n\n\x06XGSPON\x10\x04\x12\x08\n\x04\x43PON\x10\x05\x12\x0b\n\x07NG_PON2\x10\x06\x12\x08\n\x04\x45PON\x10\x07\"\xe8\x05\n\tComponent\x12\x0c\n\x04name\x18\x01 \x01(\t\x12!\n\x05\x63lass\x18\x02 \x01(\x0e\x32\x12.dmi.ComponentType\x12\x13\n\x0b\x64\x65scription\x18\x03 \x01(\t\x12\x0e\n\x06parent\x18\x04 \x01(\t\x12\x16\n\x0eparent_rel_pos\x18\x05 \x01(\x05\x12 \n\x08\x63hildren\x18\x06 \x03(\x0b\x32\x0e.dmi.Component\x12\x14\n\x0chardware_rev\x18\x07 \x01(\t\x12\x14\n\x0c\x66irmware_rev\x18\x08 \x01(\t\x12\x14\n\x0csoftware_rev\x18\t \x01(\t\x12\x12\n\nserial_num\x18\n \x01(\t\x12\x10\n\x08mfg_name\x18\x0b \x01(\t\x12\x12\n\nmodel_name\x18\x0c \x01(\t\x12\r\n\x05\x61lias\x18\r \x01(\t\x12\x10\n\x08\x61sset_id\x18\x0e \x01(\t\x12\x0e\n\x06is_fru\x18\x0f \x01(\x08\x12,\n\x08mfg_date\x18\x10 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x15\n\x03uri\x18\x11 \x01(\x0b\x32\x08.dmi.Uri\x12\x17\n\x04uuid\x18\x12 \x01(\x0b\x32\t.dmi.Uuid\x12\"\n\x05state\x18\x13 \x01(\x0b\x32\x13.dmi.ComponentState\x12-\n\x0bsensor_data\x18\x14 \x03(\x0b\x32\x18.dmi.ComponentSensorData\x12\x31\n\tport_attr\x18\x32 \x01(\x0b\x32\x1c.dmi.PortComponentAttributesH\x00\x12;\n\x0e\x63ontainer_attr\x18\x33 \x01(\x0b\x32!.dmi.ContainerComponentAttributesH\x00\x12/\n\x08psu_attr\x18\x34 \x01(\x0b\x32\x1b.dmi.PsuComponentAttributesH\x00\x12@\n\x10transceiver_attr\x18\x35 \x01(\x0b\x32$.dmi.TransceiverComponentsAttributesH\x00\x42\n\n\x08specific\"\x8a\x01\n\x08Hardware\x12/\n\x0blast_change\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x1c\n\x04root\x18\x02 \x01(\x0b\x32\x0e.dmi.Component\x12/\n\x0blast_booted\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"\xe5\x01\n\x13ModifiableComponent\x12\x0c\n\x04name\x18\x01 \x01(\t\x12!\n\x05\x63lass\x18\x02 \x01(\x0e\x32\x12.dmi.ComponentType\x12\x1e\n\x06parent\x18\x03 \x01(\x0b\x32\x0e.dmi.Component\x12\x16\n\x0eparent_rel_pos\x18\x04 \x01(\x05\x12\r\n\x05\x61lias\x18\x05 \x01(\t\x12\x10\n\x08\x61sset_id\x18\x06 \x01(\t\x12\x15\n\x03uri\x18\x07 \x01(\x0b\x32\x08.dmi.Uri\x12-\n\x0b\x61\x64min_state\x18\x08 \x01(\x0e\x32\x18.dmi.ComponentAdminState*\xb4\x03\n\rComponentType\x12\x1c\n\x18\x43OMPONENT_TYPE_UNDEFINED\x10\x00\x12\x1a\n\x16\x43OMPONENT_TYPE_UNKNOWN\x10\x01\x12\x1a\n\x16\x43OMPONENT_TYPE_CHASSIS\x10\x02\x12\x1c\n\x18\x43OMPONENT_TYPE_BACKPLANE\x10\x03\x12\x1c\n\x18\x43OMPONENT_TYPE_CONTAINER\x10\x04\x12\x1f\n\x1b\x43OMPONENT_TYPE_POWER_SUPPLY\x10\x05\x12\x16\n\x12\x43OMPONENT_TYPE_FAN\x10\x06\x12\x19\n\x15\x43OMPONENT_TYPE_SENSOR\x10\x07\x12\x19\n\x15\x43OMPONENT_TYPE_MODULE\x10\x08\x12\x17\n\x13\x43OMPONENT_TYPE_PORT\x10\t\x12\x16\n\x12\x43OMPONENT_TYPE_CPU\x10\n\x12\x1a\n\x16\x43OMPONENT_TYPE_BATTERY\x10\x0b\x12\x1a\n\x16\x43OMPONENT_TYPE_STORAGE\x10\x0c\x12\x19\n\x15\x43OMPONENT_TYPE_MEMORY\x10\r\x12\x1e\n\x1a\x43OMPONENT_TYPE_TRANSCEIVER\x10\x0e*\xb3\x01\n\x13\x43omponentAdminState\x12\x1e\n\x1a\x43OMP_ADMIN_STATE_UNDEFINED\x10\x00\x12\x1c\n\x18\x43OMP_ADMIN_STATE_UNKNOWN\x10\x01\x12\x1b\n\x17\x43OMP_ADMIN_STATE_LOCKED\x10\x02\x12\"\n\x1e\x43OMP_ADMIN_STATE_SHUTTING_DOWN\x10\x03\x12\x1d\n\x19\x43OMP_ADMIN_STATE_UNLOCKED\x10\x04*\xa8\x01\n\x12\x43omponentOperState\x12\x1d\n\x19\x43OMP_OPER_STATE_UNDEFINED\x10\x00\x12\x1b\n\x17\x43OMP_OPER_STATE_UNKNOWN\x10\x01\x12\x1c\n\x18\x43OMP_OPER_STATE_DISABLED\x10\x02\x12\x1b\n\x17\x43OMP_OPER_STATE_ENABLED\x10\x03\x12\x1b\n\x17\x43OMP_OPER_STATE_TESTING\x10\x04*\xa6\x01\n\x13\x43omponentUsageState\x12\x1e\n\x1a\x43OMP_USAGE_STATE_UNDEFINED\x10\x00\x12\x1c\n\x18\x43OMP_USAGE_STATE_UNKNOWN\x10\x01\x12\x19\n\x15\x43OMP_USAGE_STATE_IDLE\x10\x02\x12\x1b\n\x17\x43OMP_USAGE_STATE_ACTIVE\x10\x03\x12\x19\n\x15\x43OMP_USAGE_STATE_BUSY\x10\x04*\x8f\x02\n\x13\x43omponentAlarmState\x12\x1e\n\x1a\x43OMP_ALARM_STATE_UNDEFINED\x10\x00\x12\x1c\n\x18\x43OMP_ALARM_STATE_UNKNOWN\x10\x01\x12!\n\x1d\x43OMP_ALARM_STATE_UNDER_REPAIR\x10\x02\x12\x1d\n\x19\x43OMP_ALARM_STATE_CRITICAL\x10\x03\x12\x1a\n\x16\x43OMP_ALARM_STATE_MAJOR\x10\x04\x12\x1a\n\x16\x43OMP_ALARM_STATE_MINOR\x10\x05\x12\x1c\n\x18\x43OMP_ALARM_STATE_WARNING\x10\x06\x12\"\n\x1e\x43OMP_ALARM_STATE_INDETERMINATE\x10\x07*\xbc\x01\n\x15\x43omponentStandbyState\x12 \n\x1c\x43OMP_STANDBY_STATE_UNDEFINED\x10\x00\x12\x1e\n\x1a\x43OMP_STANDBY_STATE_UNKNOWN\x10\x01\x12\x1a\n\x16\x43OMP_STANDBY_STATE_HOT\x10\x02\x12\x1b\n\x17\x43OMP_STANDBY_STATE_COLD\x10\x03\x12(\n$COMP_STANDBY_STATE_PROVIDING_SERVICE\x10\x04*\x89\x03\n\rDataValueType\x12\x18\n\x14VALUE_TYPE_UNDEFINED\x10\x00\x12\x14\n\x10VALUE_TYPE_OTHER\x10\x01\x12\x16\n\x12VALUE_TYPE_UNKNOWN\x10\x02\x12\x17\n\x13VALUE_TYPE_VOLTS_AC\x10\x03\x12\x17\n\x13VALUE_TYPE_VOLTS_DC\x10\x04\x12\x16\n\x12VALUE_TYPE_AMPERES\x10\x05\x12\x14\n\x10VALUE_TYPE_WATTS\x10\x06\x12\x14\n\x10VALUE_TYPE_HERTZ\x10\x07\x12\x16\n\x12VALUE_TYPE_CELSIUS\x10\x08\x12\x19\n\x15VALUE_TYPE_PERCENT_RH\x10\t\x12\x12\n\x0eVALUE_TYPE_RPM\x10\n\x12\x12\n\x0eVALUE_TYPE_CMM\x10\x0b\x12\x1a\n\x16VALUE_TYPE_TRUTH_VALUE\x10\x0c\x12\x16\n\x12VALUE_TYPE_PERCENT\x10\r\x12\x15\n\x11VALUE_TYPE_METERS\x10\x0e\x12\x14\n\x10VALUE_TYPE_BYTES\x10\x0f*\xa4\x03\n\nValueScale\x12\x19\n\x15VALUE_SCALE_UNDEFINED\x10\x00\x12\x15\n\x11VALUE_SCALE_YOCTO\x10\x01\x12\x15\n\x11VALUE_SCALE_ZEPTO\x10\x02\x12\x14\n\x10VALUE_SCALE_ATTO\x10\x03\x12\x15\n\x11VALUE_SCALE_FEMTO\x10\x04\x12\x14\n\x10VALUE_SCALE_PICO\x10\x05\x12\x14\n\x10VALUE_SCALE_NANO\x10\x06\x12\x15\n\x11VALUE_SCALE_MICRO\x10\x07\x12\x15\n\x11VALUE_SCALE_MILLI\x10\x08\x12\x15\n\x11VALUE_SCALE_UNITS\x10\t\x12\x14\n\x10VALUE_SCALE_KILO\x10\n\x12\x14\n\x10VALUE_SCALE_MEGA\x10\x0b\x12\x14\n\x10VALUE_SCALE_GIGA\x10\x0c\x12\x14\n\x10VALUE_SCALE_TERA\x10\r\x12\x14\n\x10VALUE_SCALE_PETA\x10\x0e\x12\x13\n\x0fVALUE_SCALE_EXA\x10\x0f\x12\x15\n\x11VALUE_SCALE_ZETTA\x10\x10\x12\x15\n\x11VALUE_SCALE_YOTTA\x10\x11*\x82\x01\n\x0cSensorStatus\x12\x1b\n\x17SENSOR_STATUS_UNDEFINED\x10\x00\x12\x14\n\x10SENSOR_STATUS_OK\x10\x01\x12\x1d\n\x19SENSOR_STATUS_UNAVAILABLE\x10\x02\x12 \n\x1cSENSOR_STATUS_NONOPERATIONAL\x10\x03\x42;Z9github.com/opencord/device-management-interface/v3/go/dmib\x06proto3'
+  serialized_pb=b'\n\x0c\x64mi/hw.proto\x12\x03\x64mi\x1a\x1fgoogle/protobuf/timestamp.proto\"\x14\n\x04Uuid\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"%\n\nHardwareID\x12\x17\n\x04uuid\x18\x01 \x01(\x0b\x32\t.dmi.Uuid\"\x12\n\x03Uri\x12\x0b\n\x03uri\x18\x01 \x01(\t\"\xb5\x02\n\x0e\x43omponentState\x12\x36\n\x12state_last_changed\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12-\n\x0b\x61\x64min_state\x18\x02 \x01(\x0e\x32\x18.dmi.ComponentAdminState\x12+\n\noper_state\x18\x03 \x01(\x0e\x32\x17.dmi.ComponentOperState\x12-\n\x0busage_state\x18\x04 \x01(\x0e\x32\x18.dmi.ComponentUsageState\x12-\n\x0b\x61larm_state\x18\x05 \x01(\x0e\x32\x18.dmi.ComponentAlarmState\x12\x31\n\rstandby_state\x18\x06 \x01(\x0e\x32\x1a.dmi.ComponentStandbyState\"\x90\x02\n\x13\x43omponentSensorData\x12\r\n\x05value\x18\x01 \x01(\x05\x12 \n\x04type\x18\x02 \x01(\x0e\x32\x12.dmi.DataValueType\x12\x1e\n\x05scale\x18\x03 \x01(\x0e\x32\x0f.dmi.ValueScale\x12\x11\n\tprecision\x18\x04 \x01(\x05\x12!\n\x06status\x18\x05 \x01(\x0e\x32\x11.dmi.SensorStatus\x12\x15\n\runits_display\x18\x06 \x01(\t\x12-\n\ttimestamp\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x19\n\x11value_update_rate\x18\x08 \x01(\r\x12\x11\n\tdata_type\x18\t \x01(\t\"\xc2\x05\n\x17PortComponentAttributes\x12\x42\n\x0e\x63onnector_type\x18\x01 \x01(\x0e\x32*.dmi.PortComponentAttributes.ConnectorType\x12\x31\n\x05speed\x18\x02 \x01(\x0e\x32\".dmi.PortComponentAttributes.Speed\x12\x37\n\x08protocol\x18\x03 \x01(\x0e\x32%.dmi.PortComponentAttributes.Protocol\x12\x16\n\x0ephysical_label\x18\x04 \x01(\t\x12\x15\n\rmapping_label\x18\x05 \x01(\t\x12\'\n\rpon_id_config\x18\x06 \x01(\x0b\x32\x10.dmi.PonIdConfig\"p\n\rConnectorType\x12\x1c\n\x18\x43ONNECTOR_TYPE_UNDEFINED\x10\x00\x12\x08\n\x04RJ45\x10\x01\x12\x0c\n\x08\x46IBER_LC\x10\x02\x12\x0f\n\x0b\x46IBER_SC_PC\x10\x03\x12\r\n\tFIBER_MPO\x10\x04\x12\t\n\x05RS232\x10\x05\"\xae\x01\n\x05Speed\x12\x13\n\x0fSPEED_UNDEFINED\x10\x00\x12\x0b\n\x07\x44YNAMIC\x10\x01\x12\r\n\tGIGABIT_1\x10\x02\x12\x0e\n\nGIGABIT_10\x10\x03\x12\x0e\n\nGIGABIT_25\x10\x04\x12\x0e\n\nGIGABIT_40\x10\x05\x12\x0f\n\x0bGIGABIT_100\x10\x06\x12\x0f\n\x0bGIGABIT_400\x10\x07\x12\x10\n\x0cMEGABIT_2500\x10\x08\x12\x10\n\x0cMEGABIT_1250\x10\t\"|\n\x08Protocol\x12\x16\n\x12PROTOCOL_UNDEFINED\x10\x00\x12\x0c\n\x08\x45THERNET\x10\x01\x12\x08\n\x04GPON\x10\x02\x12\t\n\x05XGPON\x10\x03\x12\n\n\x06XGSPON\x10\x04\x12\t\n\x05GFAST\x10\x05\x12\n\n\x06SERIAL\x10\x06\x12\x08\n\x04\x45PON\x10\x07\x12\x08\n\x04\x42ITS\x10\x08\"H\n\x1dPortComponentChangeAttributes\x12\'\n\rpon_id_config\x18\x01 \x01(\x0b\x32\x10.dmi.PonIdConfig\"B\n\x0bPonIdConfig\x12\x0e\n\x06pon_id\x18\x01 \x01(\x0c\x12#\n\x1bpon_id_transmit_periodicity\x18\x02 \x01(\r\"6\n\x1c\x43ontainerComponentAttributes\x12\x16\n\x0ephysical_label\x18\x01 \x01(\t\"\xb3\x01\n\x16PsuComponentAttributes\x12G\n\x11supported_voltage\x18\x01 \x01(\x0e\x32,.dmi.PsuComponentAttributes.SupportedVoltage\"P\n\x10SupportedVoltage\x12\x1f\n\x1bSUPPORTED_VOLTAGE_UNDEFINED\x10\x00\x12\x07\n\x03V48\x10\x01\x12\x08\n\x04V230\x10\x02\x12\x08\n\x04V115\x10\x03\"\xef\x04\n\x1fTransceiverComponentsAttributes\x12\x44\n\x0b\x66orm_factor\x18\x01 \x01(\x0e\x32/.dmi.TransceiverComponentsAttributes.FormFactor\x12=\n\ntrans_type\x18\x02 \x01(\x0e\x32).dmi.TransceiverComponentsAttributes.Type\x12\x14\n\x0cmax_distance\x18\x03 \x01(\r\x12+\n\x12max_distance_scale\x18\x04 \x01(\x0e\x32\x0f.dmi.ValueScale\x12\x15\n\rrx_wavelength\x18\x05 \x03(\r\x12\x15\n\rtx_wavelength\x18\x06 \x03(\r\x12)\n\x10wavelength_scale\x18\x07 \x01(\x0e\x32\x0f.dmi.ValueScale\"\xc0\x01\n\nFormFactor\x12\x17\n\x13\x46ORM_FACTOR_UNKNOWN\x10\x00\x12\x08\n\x04QSFP\x10\x01\x12\r\n\tQSFP_PLUS\x10\x02\x12\n\n\x06QSFP28\x10\x03\x12\x07\n\x03SFP\x10\x04\x12\x0c\n\x08SFP_PLUS\x10\x05\x12\x07\n\x03XFP\x10\x06\x12\x08\n\x04\x43\x46P4\x10\x07\x12\x08\n\x04\x43\x46P2\x10\x08\x12\x08\n\x04\x43PAK\x10\t\x12\x06\n\x02X2\x10\n\x12\t\n\x05OTHER\x10\x0b\x12\x07\n\x03\x43\x46P\x10\x0c\x12\x0c\n\x08\x43\x46P2_ACO\x10\r\x12\x0c\n\x08\x43\x46P2_DCO\x10\x0e\"h\n\x04Type\x12\x10\n\x0cTYPE_UNKNOWN\x10\x00\x12\x0c\n\x08\x45THERNET\x10\x01\x12\x08\n\x04GPON\x10\x02\x12\t\n\x05XGPON\x10\x03\x12\n\n\x06XGSPON\x10\x04\x12\x08\n\x04\x43PON\x10\x05\x12\x0b\n\x07NG_PON2\x10\x06\x12\x08\n\x04\x45PON\x10\x07\"\xe8\x05\n\tComponent\x12\x0c\n\x04name\x18\x01 \x01(\t\x12!\n\x05\x63lass\x18\x02 \x01(\x0e\x32\x12.dmi.ComponentType\x12\x13\n\x0b\x64\x65scription\x18\x03 \x01(\t\x12\x0e\n\x06parent\x18\x04 \x01(\t\x12\x16\n\x0eparent_rel_pos\x18\x05 \x01(\x05\x12 \n\x08\x63hildren\x18\x06 \x03(\x0b\x32\x0e.dmi.Component\x12\x14\n\x0chardware_rev\x18\x07 \x01(\t\x12\x14\n\x0c\x66irmware_rev\x18\x08 \x01(\t\x12\x14\n\x0csoftware_rev\x18\t \x01(\t\x12\x12\n\nserial_num\x18\n \x01(\t\x12\x10\n\x08mfg_name\x18\x0b \x01(\t\x12\x12\n\nmodel_name\x18\x0c \x01(\t\x12\r\n\x05\x61lias\x18\r \x01(\t\x12\x10\n\x08\x61sset_id\x18\x0e \x01(\t\x12\x0e\n\x06is_fru\x18\x0f \x01(\x08\x12,\n\x08mfg_date\x18\x10 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x15\n\x03uri\x18\x11 \x01(\x0b\x32\x08.dmi.Uri\x12\x17\n\x04uuid\x18\x12 \x01(\x0b\x32\t.dmi.Uuid\x12\"\n\x05state\x18\x13 \x01(\x0b\x32\x13.dmi.ComponentState\x12-\n\x0bsensor_data\x18\x14 \x03(\x0b\x32\x18.dmi.ComponentSensorData\x12\x31\n\tport_attr\x18\x32 \x01(\x0b\x32\x1c.dmi.PortComponentAttributesH\x00\x12;\n\x0e\x63ontainer_attr\x18\x33 \x01(\x0b\x32!.dmi.ContainerComponentAttributesH\x00\x12/\n\x08psu_attr\x18\x34 \x01(\x0b\x32\x1b.dmi.PsuComponentAttributesH\x00\x12@\n\x10transceiver_attr\x18\x35 \x01(\x0b\x32$.dmi.TransceiverComponentsAttributesH\x00\x42\n\n\x08specific\"\x8a\x01\n\x08Hardware\x12/\n\x0blast_change\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x1c\n\x04root\x18\x02 \x01(\x0b\x32\x0e.dmi.Component\x12/\n\x0blast_booted\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"\xaa\x02\n\x13ModifiableComponent\x12\x0c\n\x04name\x18\x01 \x01(\t\x12!\n\x05\x63lass\x18\x02 \x01(\x0e\x32\x12.dmi.ComponentType\x12\x1e\n\x06parent\x18\x03 \x01(\x0b\x32\x0e.dmi.Component\x12\x16\n\x0eparent_rel_pos\x18\x04 \x01(\x05\x12\r\n\x05\x61lias\x18\x05 \x01(\t\x12\x10\n\x08\x61sset_id\x18\x06 \x01(\t\x12\x15\n\x03uri\x18\x07 \x01(\x0b\x32\x08.dmi.Uri\x12-\n\x0b\x61\x64min_state\x18\x08 \x01(\x0e\x32\x18.dmi.ComponentAdminState\x12\x37\n\tport_attr\x18\x32 \x01(\x0b\x32\".dmi.PortComponentChangeAttributesH\x00\x42\n\n\x08specific*\xb4\x03\n\rComponentType\x12\x1c\n\x18\x43OMPONENT_TYPE_UNDEFINED\x10\x00\x12\x1a\n\x16\x43OMPONENT_TYPE_UNKNOWN\x10\x01\x12\x1a\n\x16\x43OMPONENT_TYPE_CHASSIS\x10\x02\x12\x1c\n\x18\x43OMPONENT_TYPE_BACKPLANE\x10\x03\x12\x1c\n\x18\x43OMPONENT_TYPE_CONTAINER\x10\x04\x12\x1f\n\x1b\x43OMPONENT_TYPE_POWER_SUPPLY\x10\x05\x12\x16\n\x12\x43OMPONENT_TYPE_FAN\x10\x06\x12\x19\n\x15\x43OMPONENT_TYPE_SENSOR\x10\x07\x12\x19\n\x15\x43OMPONENT_TYPE_MODULE\x10\x08\x12\x17\n\x13\x43OMPONENT_TYPE_PORT\x10\t\x12\x16\n\x12\x43OMPONENT_TYPE_CPU\x10\n\x12\x1a\n\x16\x43OMPONENT_TYPE_BATTERY\x10\x0b\x12\x1a\n\x16\x43OMPONENT_TYPE_STORAGE\x10\x0c\x12\x19\n\x15\x43OMPONENT_TYPE_MEMORY\x10\r\x12\x1e\n\x1a\x43OMPONENT_TYPE_TRANSCEIVER\x10\x0e*\xb3\x01\n\x13\x43omponentAdminState\x12\x1e\n\x1a\x43OMP_ADMIN_STATE_UNDEFINED\x10\x00\x12\x1c\n\x18\x43OMP_ADMIN_STATE_UNKNOWN\x10\x01\x12\x1b\n\x17\x43OMP_ADMIN_STATE_LOCKED\x10\x02\x12\"\n\x1e\x43OMP_ADMIN_STATE_SHUTTING_DOWN\x10\x03\x12\x1d\n\x19\x43OMP_ADMIN_STATE_UNLOCKED\x10\x04*\xa8\x01\n\x12\x43omponentOperState\x12\x1d\n\x19\x43OMP_OPER_STATE_UNDEFINED\x10\x00\x12\x1b\n\x17\x43OMP_OPER_STATE_UNKNOWN\x10\x01\x12\x1c\n\x18\x43OMP_OPER_STATE_DISABLED\x10\x02\x12\x1b\n\x17\x43OMP_OPER_STATE_ENABLED\x10\x03\x12\x1b\n\x17\x43OMP_OPER_STATE_TESTING\x10\x04*\xa6\x01\n\x13\x43omponentUsageState\x12\x1e\n\x1a\x43OMP_USAGE_STATE_UNDEFINED\x10\x00\x12\x1c\n\x18\x43OMP_USAGE_STATE_UNKNOWN\x10\x01\x12\x19\n\x15\x43OMP_USAGE_STATE_IDLE\x10\x02\x12\x1b\n\x17\x43OMP_USAGE_STATE_ACTIVE\x10\x03\x12\x19\n\x15\x43OMP_USAGE_STATE_BUSY\x10\x04*\x8f\x02\n\x13\x43omponentAlarmState\x12\x1e\n\x1a\x43OMP_ALARM_STATE_UNDEFINED\x10\x00\x12\x1c\n\x18\x43OMP_ALARM_STATE_UNKNOWN\x10\x01\x12!\n\x1d\x43OMP_ALARM_STATE_UNDER_REPAIR\x10\x02\x12\x1d\n\x19\x43OMP_ALARM_STATE_CRITICAL\x10\x03\x12\x1a\n\x16\x43OMP_ALARM_STATE_MAJOR\x10\x04\x12\x1a\n\x16\x43OMP_ALARM_STATE_MINOR\x10\x05\x12\x1c\n\x18\x43OMP_ALARM_STATE_WARNING\x10\x06\x12\"\n\x1e\x43OMP_ALARM_STATE_INDETERMINATE\x10\x07*\xbc\x01\n\x15\x43omponentStandbyState\x12 \n\x1c\x43OMP_STANDBY_STATE_UNDEFINED\x10\x00\x12\x1e\n\x1a\x43OMP_STANDBY_STATE_UNKNOWN\x10\x01\x12\x1a\n\x16\x43OMP_STANDBY_STATE_HOT\x10\x02\x12\x1b\n\x17\x43OMP_STANDBY_STATE_COLD\x10\x03\x12(\n$COMP_STANDBY_STATE_PROVIDING_SERVICE\x10\x04*\x89\x03\n\rDataValueType\x12\x18\n\x14VALUE_TYPE_UNDEFINED\x10\x00\x12\x14\n\x10VALUE_TYPE_OTHER\x10\x01\x12\x16\n\x12VALUE_TYPE_UNKNOWN\x10\x02\x12\x17\n\x13VALUE_TYPE_VOLTS_AC\x10\x03\x12\x17\n\x13VALUE_TYPE_VOLTS_DC\x10\x04\x12\x16\n\x12VALUE_TYPE_AMPERES\x10\x05\x12\x14\n\x10VALUE_TYPE_WATTS\x10\x06\x12\x14\n\x10VALUE_TYPE_HERTZ\x10\x07\x12\x16\n\x12VALUE_TYPE_CELSIUS\x10\x08\x12\x19\n\x15VALUE_TYPE_PERCENT_RH\x10\t\x12\x12\n\x0eVALUE_TYPE_RPM\x10\n\x12\x12\n\x0eVALUE_TYPE_CMM\x10\x0b\x12\x1a\n\x16VALUE_TYPE_TRUTH_VALUE\x10\x0c\x12\x16\n\x12VALUE_TYPE_PERCENT\x10\r\x12\x15\n\x11VALUE_TYPE_METERS\x10\x0e\x12\x14\n\x10VALUE_TYPE_BYTES\x10\x0f*\xa4\x03\n\nValueScale\x12\x19\n\x15VALUE_SCALE_UNDEFINED\x10\x00\x12\x15\n\x11VALUE_SCALE_YOCTO\x10\x01\x12\x15\n\x11VALUE_SCALE_ZEPTO\x10\x02\x12\x14\n\x10VALUE_SCALE_ATTO\x10\x03\x12\x15\n\x11VALUE_SCALE_FEMTO\x10\x04\x12\x14\n\x10VALUE_SCALE_PICO\x10\x05\x12\x14\n\x10VALUE_SCALE_NANO\x10\x06\x12\x15\n\x11VALUE_SCALE_MICRO\x10\x07\x12\x15\n\x11VALUE_SCALE_MILLI\x10\x08\x12\x15\n\x11VALUE_SCALE_UNITS\x10\t\x12\x14\n\x10VALUE_SCALE_KILO\x10\n\x12\x14\n\x10VALUE_SCALE_MEGA\x10\x0b\x12\x14\n\x10VALUE_SCALE_GIGA\x10\x0c\x12\x14\n\x10VALUE_SCALE_TERA\x10\r\x12\x14\n\x10VALUE_SCALE_PETA\x10\x0e\x12\x13\n\x0fVALUE_SCALE_EXA\x10\x0f\x12\x15\n\x11VALUE_SCALE_ZETTA\x10\x10\x12\x15\n\x11VALUE_SCALE_YOTTA\x10\x11*\x82\x01\n\x0cSensorStatus\x12\x1b\n\x17SENSOR_STATUS_UNDEFINED\x10\x00\x12\x14\n\x10SENSOR_STATUS_OK\x10\x01\x12\x1d\n\x19SENSOR_STATUS_UNAVAILABLE\x10\x02\x12 \n\x1cSENSOR_STATUS_NONOPERATIONAL\x10\x03\x42;Z9github.com/opencord/device-management-interface/v3/go/dmib\x06proto3'
   ,
   dependencies=[google_dot_protobuf_dot_timestamp__pb2.DESCRIPTOR,])
 
@@ -110,8 +110,8 @@
   ],
   containing_type=None,
   serialized_options=None,
-  serialized_start=3352,
-  serialized_end=3788,
+  serialized_start=3627,
+  serialized_end=4063,
 )
 _sym_db.RegisterEnumDescriptor(_COMPONENTTYPE)
 
@@ -151,8 +151,8 @@
   ],
   containing_type=None,
   serialized_options=None,
-  serialized_start=3791,
-  serialized_end=3970,
+  serialized_start=4066,
+  serialized_end=4245,
 )
 _sym_db.RegisterEnumDescriptor(_COMPONENTADMINSTATE)
 
@@ -192,8 +192,8 @@
   ],
   containing_type=None,
   serialized_options=None,
-  serialized_start=3973,
-  serialized_end=4141,
+  serialized_start=4248,
+  serialized_end=4416,
 )
 _sym_db.RegisterEnumDescriptor(_COMPONENTOPERSTATE)
 
@@ -233,8 +233,8 @@
   ],
   containing_type=None,
   serialized_options=None,
-  serialized_start=4144,
-  serialized_end=4310,
+  serialized_start=4419,
+  serialized_end=4585,
 )
 _sym_db.RegisterEnumDescriptor(_COMPONENTUSAGESTATE)
 
@@ -289,8 +289,8 @@
   ],
   containing_type=None,
   serialized_options=None,
-  serialized_start=4313,
-  serialized_end=4584,
+  serialized_start=4588,
+  serialized_end=4859,
 )
 _sym_db.RegisterEnumDescriptor(_COMPONENTALARMSTATE)
 
@@ -330,8 +330,8 @@
   ],
   containing_type=None,
   serialized_options=None,
-  serialized_start=4587,
-  serialized_end=4775,
+  serialized_start=4862,
+  serialized_end=5050,
 )
 _sym_db.RegisterEnumDescriptor(_COMPONENTSTANDBYSTATE)
 
@@ -426,8 +426,8 @@
   ],
   containing_type=None,
   serialized_options=None,
-  serialized_start=4778,
-  serialized_end=5171,
+  serialized_start=5053,
+  serialized_end=5446,
 )
 _sym_db.RegisterEnumDescriptor(_DATAVALUETYPE)
 
@@ -532,8 +532,8 @@
   ],
   containing_type=None,
   serialized_options=None,
-  serialized_start=5174,
-  serialized_end=5594,
+  serialized_start=5449,
+  serialized_end=5869,
 )
 _sym_db.RegisterEnumDescriptor(_VALUESCALE)
 
@@ -568,8 +568,8 @@
   ],
   containing_type=None,
   serialized_options=None,
-  serialized_start=5597,
-  serialized_end=5727,
+  serialized_start=5872,
+  serialized_end=6002,
 )
 _sym_db.RegisterEnumDescriptor(_SENSORSTATUS)
 
@@ -697,8 +697,8 @@
   ],
   containing_type=None,
   serialized_options=None,
-  serialized_start=950,
-  serialized_end=1062,
+  serialized_start=1014,
+  serialized_end=1126,
 )
 _sym_db.RegisterEnumDescriptor(_PORTCOMPONENTATTRIBUTES_CONNECTORTYPE)
 
@@ -762,8 +762,8 @@
   ],
   containing_type=None,
   serialized_options=None,
-  serialized_start=1065,
-  serialized_end=1239,
+  serialized_start=1129,
+  serialized_end=1303,
 )
 _sym_db.RegisterEnumDescriptor(_PORTCOMPONENTATTRIBUTES_SPEED)
 
@@ -822,8 +822,8 @@
   ],
   containing_type=None,
   serialized_options=None,
-  serialized_start=1241,
-  serialized_end=1365,
+  serialized_start=1305,
+  serialized_end=1429,
 )
 _sym_db.RegisterEnumDescriptor(_PORTCOMPONENTATTRIBUTES_PROTOCOL)
 
@@ -857,8 +857,8 @@
   ],
   containing_type=None,
   serialized_options=None,
-  serialized_start=1523,
-  serialized_end=1603,
+  serialized_start=1729,
+  serialized_end=1809,
 )
 _sym_db.RegisterEnumDescriptor(_PSUCOMPONENTATTRIBUTES_SUPPORTEDVOLTAGE)
 
@@ -947,8 +947,8 @@
   ],
   containing_type=None,
   serialized_options=None,
-  serialized_start=1931,
-  serialized_end=2123,
+  serialized_start=2137,
+  serialized_end=2329,
 )
 _sym_db.RegisterEnumDescriptor(_TRANSCEIVERCOMPONENTSATTRIBUTES_FORMFACTOR)
 
@@ -1002,8 +1002,8 @@
   ],
   containing_type=None,
   serialized_options=None,
-  serialized_start=2125,
-  serialized_end=2229,
+  serialized_start=2331,
+  serialized_end=2435,
 )
 _sym_db.RegisterEnumDescriptor(_TRANSCEIVERCOMPONENTSATTRIBUTES_TYPE)
 
@@ -1295,6 +1295,20 @@
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+    _descriptor.FieldDescriptor(
+      name='mapping_label', full_name='dmi.PortComponentAttributes.mapping_label', index=4,
+      number=5, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=b"".decode('utf-8'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+    _descriptor.FieldDescriptor(
+      name='pon_id_config', full_name='dmi.PortComponentAttributes.pon_id_config', index=5,
+      number=6, type=11, cpp_type=10, label=1,
+      has_default_value=False, default_value=None,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
   ],
   extensions=[
   ],
@@ -1311,7 +1325,78 @@
   oneofs=[
   ],
   serialized_start=723,
-  serialized_end=1365,
+  serialized_end=1429,
+)
+
+
+_PORTCOMPONENTCHANGEATTRIBUTES = _descriptor.Descriptor(
+  name='PortComponentChangeAttributes',
+  full_name='dmi.PortComponentChangeAttributes',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  create_key=_descriptor._internal_create_key,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='pon_id_config', full_name='dmi.PortComponentChangeAttributes.pon_id_config', index=0,
+      number=1, type=11, cpp_type=10, label=1,
+      has_default_value=False, default_value=None,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=1431,
+  serialized_end=1503,
+)
+
+
+_PONIDCONFIG = _descriptor.Descriptor(
+  name='PonIdConfig',
+  full_name='dmi.PonIdConfig',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  create_key=_descriptor._internal_create_key,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='pon_id', full_name='dmi.PonIdConfig.pon_id', index=0,
+      number=1, type=12, cpp_type=9, label=1,
+      has_default_value=False, default_value=b"",
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+    _descriptor.FieldDescriptor(
+      name='pon_id_transmit_periodicity', full_name='dmi.PonIdConfig.pon_id_transmit_periodicity', index=1,
+      number=2, type=13, cpp_type=3, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=1505,
+  serialized_end=1571,
 )
 
 
@@ -1342,8 +1427,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=1367,
-  serialized_end=1421,
+  serialized_start=1573,
+  serialized_end=1627,
 )
 
 
@@ -1375,8 +1460,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=1424,
-  serialized_end=1603,
+  serialized_start=1630,
+  serialized_end=1809,
 )
 
 
@@ -1451,8 +1536,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=1606,
-  serialized_end=2229,
+  serialized_start=1812,
+  serialized_end=2435,
 )
 
 
@@ -1649,8 +1734,8 @@
       create_key=_descriptor._internal_create_key,
     fields=[]),
   ],
-  serialized_start=2232,
-  serialized_end=2976,
+  serialized_start=2438,
+  serialized_end=3182,
 )
 
 
@@ -1695,8 +1780,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=2979,
-  serialized_end=3117,
+  serialized_start=3185,
+  serialized_end=3323,
 )
 
 
@@ -1764,6 +1849,13 @@
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+    _descriptor.FieldDescriptor(
+      name='port_attr', full_name='dmi.ModifiableComponent.port_attr', index=8,
+      number=50, type=11, cpp_type=10, label=1,
+      has_default_value=False, default_value=None,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
   ],
   extensions=[
   ],
@@ -1775,9 +1867,14 @@
   syntax='proto3',
   extension_ranges=[],
   oneofs=[
+    _descriptor.OneofDescriptor(
+      name='specific', full_name='dmi.ModifiableComponent.specific',
+      index=0, containing_type=None,
+      create_key=_descriptor._internal_create_key,
+    fields=[]),
   ],
-  serialized_start=3120,
-  serialized_end=3349,
+  serialized_start=3326,
+  serialized_end=3624,
 )
 
 _HARDWAREID.fields_by_name['uuid'].message_type = _UUID
@@ -1794,9 +1891,11 @@
 _PORTCOMPONENTATTRIBUTES.fields_by_name['connector_type'].enum_type = _PORTCOMPONENTATTRIBUTES_CONNECTORTYPE
 _PORTCOMPONENTATTRIBUTES.fields_by_name['speed'].enum_type = _PORTCOMPONENTATTRIBUTES_SPEED
 _PORTCOMPONENTATTRIBUTES.fields_by_name['protocol'].enum_type = _PORTCOMPONENTATTRIBUTES_PROTOCOL
+_PORTCOMPONENTATTRIBUTES.fields_by_name['pon_id_config'].message_type = _PONIDCONFIG
 _PORTCOMPONENTATTRIBUTES_CONNECTORTYPE.containing_type = _PORTCOMPONENTATTRIBUTES
 _PORTCOMPONENTATTRIBUTES_SPEED.containing_type = _PORTCOMPONENTATTRIBUTES
 _PORTCOMPONENTATTRIBUTES_PROTOCOL.containing_type = _PORTCOMPONENTATTRIBUTES
+_PORTCOMPONENTCHANGEATTRIBUTES.fields_by_name['pon_id_config'].message_type = _PONIDCONFIG
 _PSUCOMPONENTATTRIBUTES.fields_by_name['supported_voltage'].enum_type = _PSUCOMPONENTATTRIBUTES_SUPPORTEDVOLTAGE
 _PSUCOMPONENTATTRIBUTES_SUPPORTEDVOLTAGE.containing_type = _PSUCOMPONENTATTRIBUTES
 _TRANSCEIVERCOMPONENTSATTRIBUTES.fields_by_name['form_factor'].enum_type = _TRANSCEIVERCOMPONENTSATTRIBUTES_FORMFACTOR
@@ -1835,12 +1934,18 @@
 _MODIFIABLECOMPONENT.fields_by_name['parent'].message_type = _COMPONENT
 _MODIFIABLECOMPONENT.fields_by_name['uri'].message_type = _URI
 _MODIFIABLECOMPONENT.fields_by_name['admin_state'].enum_type = _COMPONENTADMINSTATE
+_MODIFIABLECOMPONENT.fields_by_name['port_attr'].message_type = _PORTCOMPONENTCHANGEATTRIBUTES
+_MODIFIABLECOMPONENT.oneofs_by_name['specific'].fields.append(
+  _MODIFIABLECOMPONENT.fields_by_name['port_attr'])
+_MODIFIABLECOMPONENT.fields_by_name['port_attr'].containing_oneof = _MODIFIABLECOMPONENT.oneofs_by_name['specific']
 DESCRIPTOR.message_types_by_name['Uuid'] = _UUID
 DESCRIPTOR.message_types_by_name['HardwareID'] = _HARDWAREID
 DESCRIPTOR.message_types_by_name['Uri'] = _URI
 DESCRIPTOR.message_types_by_name['ComponentState'] = _COMPONENTSTATE
 DESCRIPTOR.message_types_by_name['ComponentSensorData'] = _COMPONENTSENSORDATA
 DESCRIPTOR.message_types_by_name['PortComponentAttributes'] = _PORTCOMPONENTATTRIBUTES
+DESCRIPTOR.message_types_by_name['PortComponentChangeAttributes'] = _PORTCOMPONENTCHANGEATTRIBUTES
+DESCRIPTOR.message_types_by_name['PonIdConfig'] = _PONIDCONFIG
 DESCRIPTOR.message_types_by_name['ContainerComponentAttributes'] = _CONTAINERCOMPONENTATTRIBUTES
 DESCRIPTOR.message_types_by_name['PsuComponentAttributes'] = _PSUCOMPONENTATTRIBUTES
 DESCRIPTOR.message_types_by_name['TransceiverComponentsAttributes'] = _TRANSCEIVERCOMPONENTSATTRIBUTES
@@ -1900,6 +2005,20 @@
   })
 _sym_db.RegisterMessage(PortComponentAttributes)
 
+PortComponentChangeAttributes = _reflection.GeneratedProtocolMessageType('PortComponentChangeAttributes', (_message.Message,), {
+  'DESCRIPTOR' : _PORTCOMPONENTCHANGEATTRIBUTES,
+  '__module__' : 'dmi.hw_pb2'
+  # @@protoc_insertion_point(class_scope:dmi.PortComponentChangeAttributes)
+  })
+_sym_db.RegisterMessage(PortComponentChangeAttributes)
+
+PonIdConfig = _reflection.GeneratedProtocolMessageType('PonIdConfig', (_message.Message,), {
+  'DESCRIPTOR' : _PONIDCONFIG,
+  '__module__' : 'dmi.hw_pb2'
+  # @@protoc_insertion_point(class_scope:dmi.PonIdConfig)
+  })
+_sym_db.RegisterMessage(PonIdConfig)
+
 ContainerComponentAttributes = _reflection.GeneratedProtocolMessageType('ContainerComponentAttributes', (_message.Message,), {
   'DESCRIPTOR' : _CONTAINERCOMPONENTATTRIBUTES,
   '__module__' : 'dmi.hw_pb2'
