changes for olt reconnect , reboot redesing

Change-Id: I192c01f7672b62956b4b55e19b8cd0d33ca7cfae

fixes for device state handling

Change-Id: I6765b7b53b2c130c70ac37cad28373cec7397908

olt reconnect, reboot redesign changes

Change-Id: I2a4981bc815d0961ffbf7e36ba7cfb06243e8319
diff --git a/VERSION b/VERSION
index cf78d5b..df0228d 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-4.2.4
+4.2.5
diff --git a/go.mod b/go.mod
index 11a19f9..ad895fd 100644
--- a/go.mod
+++ b/go.mod
@@ -14,7 +14,7 @@
 	github.com/golang/protobuf v1.5.2
 	github.com/grpc-ecosystem/go-grpc-middleware v1.3.0
 	github.com/opencord/voltha-lib-go/v7 v7.1.8
-	github.com/opencord/voltha-protos/v5 v5.2.2
+	github.com/opencord/voltha-protos/v5 v5.2.5
 	github.com/stretchr/testify v1.7.0
 	go.etcd.io/etcd v3.3.25+incompatible
 	google.golang.org/grpc v1.44.0
diff --git a/go.sum b/go.sum
index f7c94be..e9d2eec 100644
--- a/go.sum
+++ b/go.sum
@@ -193,8 +193,9 @@
 github.com/onsi/gomega v1.14.0/go.mod h1:cIuvLEne0aoVhAgh/O6ac0Op8WWw9H6eYCriF+tEHG0=
 github.com/opencord/voltha-lib-go/v7 v7.1.8 h1:5k+1Ul+T+gmvM7GONbK1/+YrX4tizAc3REgHoFvug0I=
 github.com/opencord/voltha-lib-go/v7 v7.1.8/go.mod h1:lnwlFfhDVMBg2siCv1CajB1fvfAU9Cs8VbB64LQ8zVg=
-github.com/opencord/voltha-protos/v5 v5.2.2 h1:1Bcgl+Fmp00ZxlDrHZdcbjpMgOwX6TnZmOTrYm9SbR8=
 github.com/opencord/voltha-protos/v5 v5.2.2/go.mod h1:ZGcyW79kQKIo7AySo1LRu613E6uiozixrCF0yNB/4x8=
+github.com/opencord/voltha-protos/v5 v5.2.5 h1:FEvUwDMSOvoii1jXCD54HxfEZqb0Gl5dN8DFRd1mGXk=
+github.com/opencord/voltha-protos/v5 v5.2.5/go.mod h1:ZGcyW79kQKIo7AySo1LRu613E6uiozixrCF0yNB/4x8=
 github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
 github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs=
 github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc=
diff --git a/internal/pkg/config/config.go b/internal/pkg/config/config.go
index 576ae72..34cf2ec 100644
--- a/internal/pkg/config/config.go
+++ b/internal/pkg/config/config.go
@@ -47,86 +47,89 @@
 	defaultGrpcAddress                 = ":50060"
 	defaultCoreEndpoint                = ":55555"
 	//defaultGrpcTimeoutInterval is the time in seconds a grpc call will wait before returning error.
-	defaultGrpcTimeoutInterval   = 2 * time.Second
-	defaultCurrentReplica        = 1
-	defaultTotalReplicas         = 1
-	defaultTraceEnabled          = false
-	defaultTraceAgentAddress     = "127.0.0.1:6831"
-	defaultLogCorrelationEnabled = true
-	defaultOmccEncryption        = false
-	defaultEnableONUStats        = false
-	defaultEnableGEMStats        = false
-	defaultMinBackoffRetryDelay  = 500 * time.Millisecond
-	defaultMaxBackoffRetryDelay  = 10 * time.Second
-	defaultAdapterEndpoint       = "adapter-open-olt"
+	defaultGrpcTimeoutInterval                = 2 * time.Second
+	defaultCurrentReplica                     = 1
+	defaultTotalReplicas                      = 1
+	defaultTraceEnabled                       = false
+	defaultTraceAgentAddress                  = "127.0.0.1:6831"
+	defaultLogCorrelationEnabled              = true
+	defaultOmccEncryption                     = false
+	defaultEnableONUStats                     = false
+	defaultEnableGEMStats                     = false
+	defaultMinBackoffRetryDelay               = 500 * time.Millisecond
+	defaultMaxBackoffRetryDelay               = 10 * time.Second
+	defaultAdapterEndpoint                    = "adapter-open-olt"
+	defaultCheckOnuDevExistenceAtOnuDiscovery = false
 )
 
 // AdapterFlags represents the set of configurations used by the read-write adaptercore service
 type AdapterFlags struct {
 	// Command line parameters
-	AdapterName                 string
-	InstanceID                  string // NOTE what am I used for? why not cli but only ENV? TODO expose in the chart
-	KafkaClusterAddress         string
-	KVStoreType                 string
-	KVStoreTimeout              time.Duration
-	KVStoreAddress              string
-	RPCTimeout                  time.Duration
-	EventTopic                  string
-	LogLevel                    string
-	OnuNumber                   int
-	Banner                      bool
-	DisplayVersionOnly          bool
-	ProbeAddress                string
-	LiveProbeInterval           time.Duration
-	NotLiveProbeInterval        time.Duration
-	HeartbeatCheckInterval      time.Duration
-	HeartbeatFailReportInterval time.Duration
-	GrpcTimeoutInterval         time.Duration
-	GrpcAddress                 string
-	CoreEndpoint                string
-	CurrentReplica              int
-	TotalReplicas               int
-	TraceEnabled                bool
-	TraceAgentAddress           string
-	LogCorrelationEnabled       bool
-	OmccEncryption              bool
-	EnableONUStats              bool
-	EnableGEMStats              bool
-	MinBackoffRetryDelay        time.Duration
-	MaxBackoffRetryDelay        time.Duration
-	AdapterEndpoint             string
+	AdapterName                        string
+	InstanceID                         string // NOTE what am I used for? why not cli but only ENV? TODO expose in the chart
+	KafkaClusterAddress                string
+	KVStoreType                        string
+	KVStoreTimeout                     time.Duration
+	KVStoreAddress                     string
+	RPCTimeout                         time.Duration
+	EventTopic                         string
+	LogLevel                           string
+	OnuNumber                          int
+	Banner                             bool
+	DisplayVersionOnly                 bool
+	ProbeAddress                       string
+	LiveProbeInterval                  time.Duration
+	NotLiveProbeInterval               time.Duration
+	HeartbeatCheckInterval             time.Duration
+	HeartbeatFailReportInterval        time.Duration
+	GrpcTimeoutInterval                time.Duration
+	GrpcAddress                        string
+	CoreEndpoint                       string
+	CurrentReplica                     int
+	TotalReplicas                      int
+	TraceEnabled                       bool
+	TraceAgentAddress                  string
+	LogCorrelationEnabled              bool
+	OmccEncryption                     bool
+	EnableONUStats                     bool
+	EnableGEMStats                     bool
+	MinBackoffRetryDelay               time.Duration
+	MaxBackoffRetryDelay               time.Duration
+	AdapterEndpoint                    string
+	CheckOnuDevExistenceAtOnuDiscovery bool
 }
 
 // NewAdapterFlags returns a new RWCore config
 func NewAdapterFlags() *AdapterFlags {
 	var adapterFlags = AdapterFlags{ // Default values
-		InstanceID:                  defaultInstanceid,
-		KafkaClusterAddress:         defaultKafkaclusteraddress,
-		KVStoreType:                 defaultKvstoretype,
-		KVStoreTimeout:              defaultKvstoretimeout,
-		KVStoreAddress:              defaultKvstoreaddress,
-		EventTopic:                  defaultEventtopic,
-		LogLevel:                    defaultLoglevel,
-		OnuNumber:                   defaultOnunumber,
-		Banner:                      defaultBanner,
-		DisplayVersionOnly:          defaultDisplayVersionOnly,
-		ProbeAddress:                defaultProbeAddress,
-		LiveProbeInterval:           defaultLiveProbeInterval,
-		NotLiveProbeInterval:        defaultNotLiveProbeInterval,
-		HeartbeatCheckInterval:      defaultHeartbeatCheckInterval,
-		HeartbeatFailReportInterval: defaultHeartbeatFailReportInterval,
-		GrpcAddress:                 defaultGrpcAddress,
-		CoreEndpoint:                defaultCoreEndpoint,
-		GrpcTimeoutInterval:         defaultGrpcTimeoutInterval,
-		TraceEnabled:                defaultTraceEnabled,
-		TraceAgentAddress:           defaultTraceAgentAddress,
-		LogCorrelationEnabled:       defaultLogCorrelationEnabled,
-		OmccEncryption:              defaultOmccEncryption,
-		EnableONUStats:              defaultEnableONUStats,
-		EnableGEMStats:              defaultEnableGEMStats,
-		RPCTimeout:                  defaultRPCTimeout,
-		MinBackoffRetryDelay:        defaultMinBackoffRetryDelay,
-		MaxBackoffRetryDelay:        defaultMaxBackoffRetryDelay,
+		InstanceID:                         defaultInstanceid,
+		KafkaClusterAddress:                defaultKafkaclusteraddress,
+		KVStoreType:                        defaultKvstoretype,
+		KVStoreTimeout:                     defaultKvstoretimeout,
+		KVStoreAddress:                     defaultKvstoreaddress,
+		EventTopic:                         defaultEventtopic,
+		LogLevel:                           defaultLoglevel,
+		OnuNumber:                          defaultOnunumber,
+		Banner:                             defaultBanner,
+		DisplayVersionOnly:                 defaultDisplayVersionOnly,
+		ProbeAddress:                       defaultProbeAddress,
+		LiveProbeInterval:                  defaultLiveProbeInterval,
+		NotLiveProbeInterval:               defaultNotLiveProbeInterval,
+		HeartbeatCheckInterval:             defaultHeartbeatCheckInterval,
+		HeartbeatFailReportInterval:        defaultHeartbeatFailReportInterval,
+		GrpcAddress:                        defaultGrpcAddress,
+		CoreEndpoint:                       defaultCoreEndpoint,
+		GrpcTimeoutInterval:                defaultGrpcTimeoutInterval,
+		TraceEnabled:                       defaultTraceEnabled,
+		TraceAgentAddress:                  defaultTraceAgentAddress,
+		LogCorrelationEnabled:              defaultLogCorrelationEnabled,
+		OmccEncryption:                     defaultOmccEncryption,
+		EnableONUStats:                     defaultEnableONUStats,
+		EnableGEMStats:                     defaultEnableGEMStats,
+		RPCTimeout:                         defaultRPCTimeout,
+		MinBackoffRetryDelay:               defaultMinBackoffRetryDelay,
+		MaxBackoffRetryDelay:               defaultMaxBackoffRetryDelay,
+		CheckOnuDevExistenceAtOnuDiscovery: defaultCheckOnuDevExistenceAtOnuDiscovery,
 	}
 	return &adapterFlags
 }
@@ -279,6 +282,11 @@
 		defaultMaxBackoffRetryDelay,
 		"The maximum number of milliseconds to delay before a connection retry attempt")
 
+	flag.BoolVar(&(so.CheckOnuDevExistenceAtOnuDiscovery),
+		"check_onu_exist_on_discovery",
+		defaultCheckOnuDevExistenceAtOnuDiscovery,
+		"Whether to check for flows only or child device before honoring discovery?")
+
 	flag.Parse()
 	containerName := getContainerInfo()
 	if len(containerName) > 0 {
diff --git a/internal/pkg/core/device_handler.go b/internal/pkg/core/device_handler.go
index 2d3c7c5..500dbf1 100644
--- a/internal/pkg/core/device_handler.go
+++ b/internal/pkg/core/device_handler.go
@@ -21,6 +21,7 @@
 	"context"
 	"encoding/binary"
 	"encoding/hex"
+	"encoding/json"
 	"errors"
 	"fmt"
 	"net"
@@ -72,6 +73,7 @@
 	oltPortInfoTimeout     = 3
 
 	defaultPortSpeedMbps = 1000
+	heartbeatPath        = "heartbeat"
 )
 
 //DeviceHandler will interact with the OLT device.
@@ -93,6 +95,7 @@
 	groupMgr                *OpenOltGroupMgr
 	eventMgr                *OpenOltEventMgr
 	resourceMgr             []*rsrcMgr.OpenOltResourceMgr
+	kvStore                 *db.Backend // backend kv store connection handle
 
 	deviceInfo *oop.DeviceInfo
 
@@ -120,6 +123,7 @@
 	agentPreviouslyConnected   bool
 
 	isDeviceDeletionInProgress bool
+	heartbeatSignature         uint32
 }
 
 //OnuDevice represents ONU related info
@@ -185,6 +189,7 @@
 //NewDeviceHandler creates a new device handler
 func NewDeviceHandler(cc *vgrpc.Client, ep eventif.EventProxy, device *voltha.Device, adapter *OpenOLT, cm *config.ConfigManager, cfg *conf.AdapterFlags) *DeviceHandler {
 	var dh DeviceHandler
+	ctx := context.Background()
 	dh.cm = cm
 	dh.coreClient = cc
 	dh.EventProxy = ep
@@ -201,6 +206,13 @@
 	dh.perPonOnuIndicationChannel = make(map[uint32]onuIndicationChannels)
 	dh.childAdapterClients = make(map[string]*vgrpc.Client)
 	dh.cfg = cfg
+	kvStoreDevicePath := fmt.Sprintf(dh.cm.Backend.PathPrefix, "/%s/", dh.device.Id)
+	dh.kvStore = SetKVClient(ctx, dh.openOLT.KVStoreType, dh.openOLT.KVStoreAddress, dh.device.Id, kvStoreDevicePath)
+	if dh.kvStore == nil {
+		logger.Error(ctx, "Failed to setup KV store")
+		return nil
+	}
+
 	// Create a slice of buffered channels for handling concurrent mcast flow/group.
 	dh.incomingMcastFlowOrGroup = make([]chan McastFlowOrGroupControlBlock, MaxNumOfGroupHandlerChannels)
 	dh.stopMcastHandlerRoutine = make([]chan bool, MaxNumOfGroupHandlerChannels)
@@ -219,6 +231,33 @@
 	return &dh
 }
 
+func newKVClient(ctx context.Context, storeType string, address string, timeout time.Duration) (kvstore.Client, error) {
+	logger.Infow(ctx, "kv-store-type", log.Fields{"store": storeType})
+	switch storeType {
+	case "etcd":
+		return kvstore.NewEtcdClient(ctx, address, timeout, log.FatalLevel)
+	}
+	return nil, errors.New("unsupported-kv-store")
+}
+
+// SetKVClient sets the KV client and return a kv backend
+func SetKVClient(ctx context.Context, backend string, addr string, DeviceID string, basePathKvStore string) *db.Backend {
+	kvClient, err := newKVClient(ctx, backend, addr, rsrcMgr.KvstoreTimeout)
+	if err != nil {
+		logger.Fatalw(ctx, "Failed to init KV client\n", log.Fields{"err": err})
+		return nil
+	}
+
+	kvbackend := &db.Backend{
+		Client:     kvClient,
+		StoreType:  backend,
+		Address:    addr,
+		Timeout:    rsrcMgr.KvstoreTimeout,
+		PathPrefix: fmt.Sprintf(rsrcMgr.BasePathKvStore, basePathKvStore, DeviceID)}
+
+	return kvbackend
+}
+
 // start save the device to the data model
 func (dh *DeviceHandler) start(ctx context.Context) {
 	dh.lockDevice.Lock()
@@ -744,18 +783,6 @@
 	raisedTs := time.Now().Unix()
 	go dh.eventMgr.oltCommunicationEvent(ctx, dh.device, raisedTs)
 
-	//check adapter and agent reconcile status
-	//reboot olt if needed (olt disconnection case)
-	if dh.adapterPreviouslyConnected != dh.agentPreviouslyConnected {
-		logger.Warnw(ctx, "different-reconcile-status-between-adapter-and-agent-rebooting-device",
-			log.Fields{
-				"device-id":      dh.device.Id,
-				"adapter-status": dh.adapterPreviouslyConnected,
-				"agent-status":   dh.agentPreviouslyConnected,
-			})
-		_ = dh.RebootDevice(ctx, dh.device)
-	}
-
 	return nil
 }
 
@@ -839,6 +866,7 @@
 		}
 	}
 
+	logger.Debugw(ctx, "Dailing grpc", log.Fields{"device-id": dh.device.Id})
 	// Use Interceptors to automatically inject and publish Open Tracing Spans by this GRPC client
 	dh.clientCon, err = grpc.Dial(dh.device.GetHostAndPort(),
 		grpc.WithInsecure(),
@@ -905,13 +933,6 @@
 			return olterrors.NewErrAdapter("device-handler-initialization-failed", log.Fields{"device-id": dh.device.Id}, err).LogAt(log.ErrorLevel)
 		}
 
-		// Start reading indications
-		go func() {
-			if err = dh.readIndications(ctx); err != nil {
-				_ = olterrors.NewErrAdapter("indication-read-failure", log.Fields{"device-id": dh.device.Id}, err).LogAt(log.ErrorLevel)
-			}
-		}()
-
 		go startHeartbeatCheck(ctx, dh)
 
 		return nil
@@ -931,12 +952,6 @@
 		return olterrors.NewErrAdapter("device-handler-initialization-failed", log.Fields{"device-id": dh.device.Id}, err).LogAt(log.ErrorLevel)
 	}
 
-	// Start reading indications
-	go func() {
-		if err := dh.readIndications(ctx); err != nil {
-			_ = olterrors.NewErrAdapter("read-indications-failure", log.Fields{"device-id": dh.device.Id}, err).Log()
-		}
-	}()
 	go dh.updateLocalDevice(ctx)
 
 	if device.PmConfigs != nil {
@@ -1368,13 +1383,88 @@
 	return nil
 }
 
-func (dh *DeviceHandler) onuDiscIndication(ctx context.Context, onuDiscInd *oop.OnuDiscIndication) error {
+//getChildDevice function can be used in general to get child device, if not found in cache the function will
+//get from core and update the cache and return the child device.
+func (dh *DeviceHandler) getChildDevice(ctx context.Context, sn string, parentPortNo uint32) *OnuDevice {
+	var InCacheOnuDev *OnuDevice
+	dh.onus.Range(func(Onukey interface{}, onuInCache interface{}) bool {
+		if onuInCache.(*OnuDevice).serialNumber == sn {
+			InCacheOnuDev = onuInCache.(*OnuDevice)
+			return false
+		}
+		return true
+	})
+	//Got the onu device from cache return
+	if InCacheOnuDev != nil {
+		logger.Debugw(ctx, "Got child device from cache", log.Fields{"onudev": InCacheOnuDev.serialNumber})
+		return InCacheOnuDev
+	}
+	onuDevice, _ := dh.getChildDeviceFromCore(ctx, &ca.ChildDeviceFilter{
+		ParentId:     dh.device.Id,
+		SerialNumber: sn,
+		ParentPortNo: parentPortNo,
+	})
+	//No device found in core return nil
+	if onuDevice == nil {
+		return nil
+	}
+	onuID := onuDevice.ProxyAddress.OnuId
+	intfID := plt.PortNoToIntfID(parentPortNo, voltha.Port_PON_OLT)
+	onuKey := dh.formOnuKey(intfID, onuID)
+
+	onuDev := NewOnuDevice(onuDevice.Id, onuDevice.Type, onuDevice.SerialNumber, onuDevice.ProxyAddress.OnuId, intfID, onuDevice.ProxyAddress.DeviceId, false, onuDevice.AdapterEndpoint)
+	dh.onus.Store(onuKey, onuDev)
+	logger.Debugw(ctx, "got child device from core", log.Fields{"onudev": onuDevice})
+	return onuDev
+}
+
+func (dh *DeviceHandler) checkForResourceExistance(ctx context.Context, onuDiscInd *oop.OnuDiscIndication, sn string) (bool, error) {
 	channelID := onuDiscInd.GetIntfId()
 	parentPortNo := plt.IntfIDToPortNo(onuDiscInd.GetIntfId(), voltha.Port_PON_OLT)
+	tpInstExists := false
 
-	sn := dh.stringifySerialNumber(onuDiscInd.SerialNumber)
-	logger.Infow(ctx, "new-discovery-indication", log.Fields{"sn": sn})
+	//CheckOnuDevExistenceAtOnuDiscovery if true , a check will be made for the existence of the onu device. If the onu device
+	// still exists , the onu discovery will be ignored, else a check for active techprofiles for ONU is checked.
+	if !dh.openOLT.CheckOnuDevExistenceAtOnuDiscovery {
+		onuDev := dh.getChildDevice(ctx, sn, parentPortNo)
+		if onuDev != nil {
+			var onuGemInfo *rsrcMgr.OnuGemInfo
+			var err error
+			if onuGemInfo, err = dh.resourceMgr[channelID].GetOnuGemInfo(ctx, onuDev.onuID); err != nil {
+				logger.Warnw(ctx, "Unable to find onuGemInfo", log.Fields{"onuID": onuDev.onuID})
+				return false, err
+			}
+			if onuGemInfo != nil {
+				for _, uni := range onuGemInfo.UniPorts {
+					uniID := plt.UniIDFromPortNum(uni)
+					tpIDs := dh.resourceMgr[channelID].GetTechProfileIDForOnu(ctx, onuDev.onuID, uniID)
+					if len(tpIDs) != 0 {
+						logger.Warnw(ctx, "Techprofile present for ONU, ignoring onu discovery", log.Fields{"onuID": onuDev.onuID})
+						tpInstExists = true
+						break
+					}
+				}
+			}
+		}
+		return tpInstExists, nil
+	}
 
+	onuDevice, _ := dh.getChildDeviceFromCore(ctx, &ca.ChildDeviceFilter{
+		ParentId:     dh.device.Id,
+		SerialNumber: sn,
+		ParentPortNo: parentPortNo,
+	})
+	if onuDevice != nil {
+		logger.Infow(ctx, "Child device still present ignoring discovery indication", log.Fields{"sn": sn})
+		return true, nil
+	}
+	logger.Infow(ctx, "No device present in core , continuing with discovery", log.Fields{"sn": sn})
+
+	return false, nil
+
+}
+
+func (dh *DeviceHandler) processDiscONULOSClear(ctx context.Context, onuDiscInd *oop.OnuDiscIndication, sn string) bool {
 	var alarmInd oop.OnuAlarmIndication
 	raisedTs := time.Now().Unix()
 	if _, loaded := dh.discOnus.LoadOrStore(sn, true); loaded {
@@ -1405,9 +1495,29 @@
 		})
 
 		logger.Warnw(ctx, "onu-sn-is-already-being-processed", log.Fields{"sn": sn})
+		return true
+	}
+	return false
+}
+
+func (dh *DeviceHandler) onuDiscIndication(ctx context.Context, onuDiscInd *oop.OnuDiscIndication) error {
+	channelID := onuDiscInd.GetIntfId()
+	parentPortNo := plt.IntfIDToPortNo(onuDiscInd.GetIntfId(), voltha.Port_PON_OLT)
+
+	sn := dh.stringifySerialNumber(onuDiscInd.SerialNumber)
+	logger.Infow(ctx, "new-discovery-indication", log.Fields{"sn": sn})
+
+	tpInstExists, errtp := dh.checkForResourceExistance(ctx, onuDiscInd, sn)
+	if errtp != nil {
+		return errtp
+	}
+	if tpInstExists {
+		//ignore the discovery if tpinstance is present.
 		return nil
 	}
-
+	if onuBeingProcessed := dh.processDiscONULOSClear(ctx, onuDiscInd, sn); onuBeingProcessed {
+		return nil
+	}
 	var onuID uint32
 
 	// check the ONU is already know to the OLT
@@ -2283,6 +2393,7 @@
 
 	// start the heartbeat check towards the OLT.
 	var timerCheck *time.Timer
+	dh.heartbeatSignature = dh.getHeartbeatSignature(ctx)
 
 	for {
 		heartbeatTimer := time.NewTimer(dh.openOLT.HeartbeatCheckInterval)
@@ -2302,9 +2413,36 @@
 					}
 					timerCheck = nil
 				}
-				logger.Debugw(ctx, "heartbeat",
-					log.Fields{"signature": heartBeat,
-						"device-id": dh.device.Id})
+				if dh.heartbeatSignature == 0 || dh.heartbeatSignature == heartBeat.HeartbeatSignature {
+					if dh.heartbeatSignature == 0 {
+						// First time the signature will be 0, update the signture to DB when not found.
+						dh.updateHeartbeatSignature(ctx, heartBeat.HeartbeatSignature)
+						dh.heartbeatSignature = heartBeat.HeartbeatSignature
+					}
+					logger.Infow(ctx, "heartbeat signature", log.Fields{"sign": dh.heartbeatSignature})
+
+					dh.lockDevice.RLock()
+					// Stop the read indication only if it the routine is active
+					// The read indication would have already stopped due to failure on the gRPC stream following OLT going unreachable
+					// Sending message on the 'stopIndication' channel again will cause the readIndication routine to immediately stop
+					// on next execution of the readIndication routine.
+					if !dh.isReadIndicationRoutineActive {
+						// Start reading indications
+						go func() {
+							if err = dh.readIndications(ctx); err != nil {
+								_ = olterrors.NewErrAdapter("indication-read-failure", log.Fields{"device-id": dh.device.Id}, err).LogAt(log.ErrorLevel)
+							}
+						}()
+					}
+					dh.lockDevice.RUnlock()
+
+				} else {
+					logger.Warn(ctx, "Heartbeat signature changed, OLT is rebooted. Cleaningup resources.")
+					dh.updateHeartbeatSignature(ctx, heartBeat.HeartbeatSignature)
+					dh.heartbeatSignature = heartBeat.HeartbeatSignature
+					go dh.updateStateRebooted(ctx)
+				}
+
 			}
 			cancel()
 		case <-dh.stopHeartbeatCheck:
@@ -2327,7 +2465,7 @@
 		return
 	}
 
-	logger.Debugw(ctx, "update-state-unreachable", log.Fields{"device-id": dh.device.Id, "connect-status": device.ConnectStatus,
+	logger.Warnw(ctx, "update-state-unreachable", log.Fields{"device-id": dh.device.Id, "connect-status": device.ConnectStatus,
 		"admin-state": device.AdminState, "oper-status": device.OperStatus})
 	if device.ConnectStatus == voltha.ConnectStatus_REACHABLE {
 		if err = dh.updateDeviceStateInCore(ctx, &ca.DeviceStateFilter{
@@ -2337,14 +2475,15 @@
 		}); err != nil {
 			_ = olterrors.NewErrAdapter("device-state-update-failed", log.Fields{"device-id": dh.device.Id}, err).LogAt(log.ErrorLevel)
 		}
-
-		if err = dh.updatePortsStateInCore(ctx, &ca.PortStateFilter{
-			DeviceId:       dh.device.Id,
-			PortTypeFilter: 0,
-			OperStatus:     voltha.OperStatus_UNKNOWN,
-		}); err != nil {
-			_ = olterrors.NewErrAdapter("port-update-failed", log.Fields{"device-id": dh.device.Id}, err).Log()
-		}
+		/*
+			if err = dh.updatePortsStateInCore(ctx, &ca.PortStateFilter{
+				DeviceId:       dh.device.Id,
+				PortTypeFilter: 0,
+				OperStatus:     voltha.OperStatus_UNKNOWN,
+			}); err != nil {
+				_ = olterrors.NewErrAdapter("port-update-failed", log.Fields{"device-id": dh.device.Id}, err).Log()
+			}
+		*/
 
 		//raise olt communication failure event
 		raisedTs := time.Now().Unix()
@@ -2354,12 +2493,10 @@
 		dh.device = cloned // update local copy of the device
 		go dh.eventMgr.oltCommunicationEvent(ctx, cloned, raisedTs)
 
-		dh.cleanupDeviceResources(ctx)
 		// Stop the Stats collector
 		dh.stopCollector <- true
 		// stop the heartbeat check routine
 		dh.stopHeartbeatCheck <- true
-
 		dh.lockDevice.RLock()
 		// Stop the read indication only if it the routine is active
 		// The read indication would have already stopped due to failure on the gRPC stream following OLT going unreachable
@@ -2369,28 +2506,94 @@
 			dh.stopIndications <- true
 		}
 		dh.lockDevice.RUnlock()
-
-		var wg sync.WaitGroup
-		wg.Add(1) // for the multicast handler routine
-		go dh.StopAllMcastHandlerRoutines(ctx, &wg)
-		for _, flMgr := range dh.flowMgr {
-			wg.Add(1) // for the flow handler routine
-			go flMgr.StopAllFlowHandlerRoutines(ctx, &wg)
-		}
-		if !dh.waitForTimeoutOrCompletion(&wg, time.Second*30) {
-			logger.Warnw(ctx, "timed out waiting for stopping flow and group handlers", log.Fields{"deviceID": device.Id})
-		} else {
-			logger.Infow(ctx, "all flow and group handlers shutdown gracefully", log.Fields{"deviceID": device.Id})
-		}
-
-		//reset adapter reconcile flag
-		dh.adapterPreviouslyConnected = false
-
 		dh.transitionMap.Handle(ctx, DeviceInit)
 
 	}
 }
 
+func (dh *DeviceHandler) updateStateRebooted(ctx context.Context) {
+	device, err := dh.getDeviceFromCore(ctx, dh.device.Id)
+	if err != nil || device == nil {
+		// One case where we have seen core returning an error for GetDevice call is after OLT device delete.
+		// After OLT delete, the adapter asks for OLT to reboot. When OLT is rebooted, shortly we loose heartbeat.
+		// The 'startHeartbeatCheck' then asks the device to be marked unreachable towards the core, but the core
+		// has already deleted the device and returns error. In this particular scenario, it is Ok because any necessary
+		// cleanup in the adapter was already done during DeleteDevice API handler routine.
+		_ = olterrors.NewErrNotFound("device", log.Fields{"device-id": dh.device.Id}, err).Log()
+		// Immediately return, otherwise accessing a null 'device' struct would cause panic
+		return
+	}
+
+	logger.Warnw(ctx, "update-state-rebooted", log.Fields{"device-id": dh.device.Id, "connect-status": device.ConnectStatus,
+		"admin-state": device.AdminState, "oper-status": device.OperStatus, "conn-status": voltha.ConnectStatus_UNREACHABLE})
+	if err = dh.updateDeviceStateInCore(ctx, &ca.DeviceStateFilter{
+		DeviceId:   dh.device.Id,
+		OperStatus: voltha.OperStatus_REBOOTED,
+		ConnStatus: voltha.ConnectStatus_REACHABLE,
+	}); err != nil {
+		_ = olterrors.NewErrAdapter("device-state-update-failed", log.Fields{"device-id": dh.device.Id}, err).LogAt(log.ErrorLevel)
+	}
+
+	dh.lockDevice.RLock()
+	// Stop the read indication only if it the routine is active
+	// The read indication would have already stopped due to failure on the gRPC stream following OLT going unreachable
+	// Sending message on the 'stopIndication' channel again will cause the readIndication routine to immediately stop
+	// on next execution of the readIndication routine.
+	if dh.isReadIndicationRoutineActive {
+		dh.stopIndications <- true
+	}
+	dh.lockDevice.RUnlock()
+
+	//raise olt communication failure event
+	raisedTs := time.Now().Unix()
+	cloned := proto.Clone(device).(*voltha.Device)
+	cloned.ConnectStatus = voltha.ConnectStatus_UNREACHABLE
+	cloned.OperStatus = voltha.OperStatus_UNKNOWN
+	dh.device = cloned // update local copy of the device
+	go dh.eventMgr.oltCommunicationEvent(ctx, cloned, raisedTs)
+
+	dh.cleanupDeviceResources(ctx)
+	// Stop the Stats collector
+	dh.stopCollector <- true
+	// stop the heartbeat check routine
+	dh.stopHeartbeatCheck <- true
+
+	var wg sync.WaitGroup
+	wg.Add(1) // for the multicast handler routine
+	go dh.StopAllMcastHandlerRoutines(ctx, &wg)
+	for _, flMgr := range dh.flowMgr {
+		wg.Add(1) // for the flow handler routine
+		go flMgr.StopAllFlowHandlerRoutines(ctx, &wg)
+	}
+	if !dh.waitForTimeoutOrCompletion(&wg, time.Second*30) {
+		logger.Warnw(ctx, "timed out waiting for stopping flow and group handlers", log.Fields{"deviceID": device.Id})
+	} else {
+		logger.Infow(ctx, "all flow and group handlers shutdown gracefully", log.Fields{"deviceID": device.Id})
+	}
+
+	//reset adapter reconcile flag
+	dh.adapterPreviouslyConnected = false
+	for {
+
+		childDevices, err := dh.getChildDevicesFromCore(ctx, dh.device.Id)
+		if err != nil || childDevices == nil {
+			logger.Errorw(ctx, "Failed to get child devices from core", log.Fields{"deviceID": dh.device.Id})
+			continue
+		}
+		if len(childDevices.Items) == 0 {
+			logger.Infow(ctx, "All childDevices cleared from core, proceed with device init", log.Fields{"deviceID": dh.device.Id})
+			break
+		} else {
+			logger.Warn(ctx, "Not all child devices are cleared, continuing to wait")
+			time.Sleep(5 * time.Second)
+		}
+
+	}
+	logger.Infow(ctx, "cleanup complete after reboot , moving to init", log.Fields{"deviceID": device.Id})
+	dh.transitionMap.Handle(ctx, DeviceInit)
+
+}
+
 // EnablePort to enable Pon interface
 func (dh *DeviceHandler) EnablePort(ctx context.Context, port *voltha.Port) error {
 	logger.Debugw(ctx, "enable-port", log.Fields{"Device": dh.device, "port": port})
@@ -3368,3 +3571,34 @@
 		return false // timed out
 	}
 }
+
+func (dh *DeviceHandler) updateHeartbeatSignature(ctx context.Context, signature uint32) {
+	val, err := json.Marshal(signature)
+	if err != nil {
+		logger.Error(ctx, "failed-to-marshal")
+		return
+	}
+	if err = dh.kvStore.Put(ctx, heartbeatPath, val); err != nil {
+		logger.Error(ctx, "failed-to-store-hearbeat-signature")
+	}
+}
+
+func (dh *DeviceHandler) getHeartbeatSignature(ctx context.Context) uint32 {
+	var signature uint32
+
+	Value, er := dh.kvStore.Get(ctx, heartbeatPath)
+	if er == nil {
+		if Value != nil {
+			Val, er := kvstore.ToByte(Value.Value)
+			if er != nil {
+				logger.Errorw(ctx, "Failed to convert into byte array", log.Fields{"err": er})
+				return signature
+			}
+			if er = json.Unmarshal(Val, &signature); er != nil {
+				logger.Error(ctx, "Failed to unmarshal signature", log.Fields{"err": er})
+				return signature
+			}
+		}
+	}
+	return signature
+}
diff --git a/internal/pkg/core/device_handler_test.go b/internal/pkg/core/device_handler_test.go
index 8737ee2..4d5d231 100644
--- a/internal/pkg/core/device_handler_test.go
+++ b/internal/pkg/core/device_handler_test.go
@@ -167,8 +167,9 @@
 	cm := &conf.ConfigManager{}
 	cm.Backend = &db.Backend{StoreType: "etcd", Client: &mocks.MockKVClient{}}
 	cfg := &config.AdapterFlags{OmccEncryption: true}
-	openOLT := &OpenOLT{eventProxy: ep, config: cfg}
+	openOLT := &OpenOLT{eventProxy: ep, config: cfg, KVStoreType: "etcd", KVStoreAddress: "1:2"}
 	dh := NewDeviceHandler(cc, ep, device, openOLT, cm, cfg)
+	dh.kvStore = cm.Backend
 	oopRanges := []*oop.DeviceInfo_DeviceResourceRanges{{
 		IntfIds:    []uint32{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15},
 		Technology: "xgs-pon",
@@ -1373,6 +1374,8 @@
 	}
 }
 
+/* We are not using the adapterPreviouslyConnected and agentPreviouslyConnected flags now to check for reboots and reconnects
+commenting out all the tests related to these
 func TestDeviceHandler_TestReconcileStatus(t *testing.T) {
 
 	// olt disconnect (not reboot)
@@ -1431,7 +1434,7 @@
 		})
 	}
 }
-
+*/
 func Test_UpdateFlowsIncrementallyNegativeTestCases(t *testing.T) {
 	dh1 := negativeDeviceHandlerNilFlowMgr()
 	tests := []struct {
diff --git a/internal/pkg/core/olt_state_transitions.go b/internal/pkg/core/olt_state_transitions.go
index 6c3f77d..6b04b94 100644
--- a/internal/pkg/core/olt_state_transitions.go
+++ b/internal/pkg/core/olt_state_transitions.go
@@ -91,7 +91,7 @@
 	// In doInit establish the grpc session
 	transitionMap.transitions[DeviceInit] =
 		Transition{
-			previousState: []DeviceState{deviceStateNull, deviceStateUp, deviceStateDown},
+			previousState: []DeviceState{deviceStateNull, deviceStateConnected, deviceStateUp, deviceStateDown},
 			currentState:  deviceStateInit,
 			before:        []TransitionHandler{dh.doStateInit},
 			after:         []TransitionHandler{dh.postInit}}
diff --git a/internal/pkg/core/openolt.go b/internal/pkg/core/openolt.go
index a483111..801e563 100644
--- a/internal/pkg/core/openolt.go
+++ b/internal/pkg/core/openolt.go
@@ -43,22 +43,23 @@
 
 //OpenOLT structure holds the OLT information
 type OpenOLT struct {
-	configManager               *conf.ConfigManager
-	deviceHandlers              map[string]*DeviceHandler
-	coreClient                  *vgrpc.Client
-	eventProxy                  eventif.EventProxy
-	config                      *config.AdapterFlags
-	numOnus                     int
-	KVStoreAddress              string
-	KVStoreType                 string
-	exitChannel                 chan struct{}
-	HeartbeatCheckInterval      time.Duration
-	HeartbeatFailReportInterval time.Duration
-	GrpcTimeoutInterval         time.Duration
-	lockDeviceHandlersMap       sync.RWMutex
-	enableONUStats              bool
-	enableGemStats              bool
-	rpcTimeout                  time.Duration
+	configManager                      *conf.ConfigManager
+	deviceHandlers                     map[string]*DeviceHandler
+	coreClient                         *vgrpc.Client
+	eventProxy                         eventif.EventProxy
+	config                             *config.AdapterFlags
+	numOnus                            int
+	KVStoreAddress                     string
+	KVStoreType                        string
+	exitChannel                        chan struct{}
+	HeartbeatCheckInterval             time.Duration
+	HeartbeatFailReportInterval        time.Duration
+	GrpcTimeoutInterval                time.Duration
+	lockDeviceHandlersMap              sync.RWMutex
+	enableONUStats                     bool
+	enableGemStats                     bool
+	rpcTimeout                         time.Duration
+	CheckOnuDevExistenceAtOnuDiscovery bool
 }
 
 //NewOpenOLT returns a new instance of OpenOLT
@@ -82,6 +83,7 @@
 	openOLT.enableONUStats = cfg.EnableONUStats
 	openOLT.enableGemStats = cfg.EnableGEMStats
 	openOLT.rpcTimeout = cfg.RPCTimeout
+	openOLT.CheckOnuDevExistenceAtOnuDiscovery = cfg.CheckOnuDevExistenceAtOnuDiscovery
 	return &openOLT
 }
 
diff --git a/internal/pkg/core/openolt_flowmgr.go b/internal/pkg/core/openolt_flowmgr.go
index 9606217..6cc4f5b 100644
--- a/internal/pkg/core/openolt_flowmgr.go
+++ b/internal/pkg/core/openolt_flowmgr.go
@@ -1984,13 +1984,6 @@
 	// Free TPInstance, TPID, GemPorts and Traffic Queues. AllocID and Schedulers will be cleared later only if they are not shared across all the UNIs
 	switch techprofileInst := techprofileInst.(type) {
 	case *tp_pb.TechProfileInstance:
-		if err := f.resourceMgr.RemoveTechProfileIDForOnu(ctx, uint32(onuID), uint32(uniID), tpID); err != nil {
-			logger.Warn(ctx, err)
-		}
-		if err := f.DeleteTechProfileInstance(ctx, intfID, uint32(onuID), uint32(uniID), "", tpID); err != nil {
-			logger.Warn(ctx, err)
-		}
-
 		for _, gemPort := range techprofileInst.UpstreamGemPortAttributeList {
 			gemPortID := gemPort.GemportId
 			_ = f.resourceMgr.RemoveGemFromOnuGemInfo(ctx, uint32(onuID), gemPortID) // ignore error and proceed.
@@ -2051,12 +2044,6 @@
 			}
 		}
 	case *tp_pb.EponTechProfileInstance:
-		if err := f.resourceMgr.RemoveTechProfileIDForOnu(ctx, uint32(onuID), uint32(uniID), tpID); err != nil {
-			logger.Warn(ctx, err)
-		}
-		if err := f.DeleteTechProfileInstance(ctx, intfID, uint32(onuID), uint32(uniID), "", tpID); err != nil {
-			logger.Warn(ctx, err)
-		}
 		// Delete the TCONT on the ONU.
 		if err := f.sendDeleteTcontToChild(ctx, intfID, uint32(onuID), uint32(uniID), techprofileInst.AllocId, tpPath); err != nil {
 			logger.Errorw(ctx, "error-processing-delete-tcont-towards-onu",
@@ -2069,6 +2056,12 @@
 					"error":     err})
 		}
 		f.resourceMgr.FreeAllocID(ctx, uint32(onuID), uint32(uniID), techprofileInst.AllocId, true)
+		if err := f.resourceMgr.RemoveTechProfileIDForOnu(ctx, uint32(onuID), uint32(uniID), tpID); err != nil {
+			logger.Warn(ctx, err)
+		}
+		if err := f.DeleteTechProfileInstance(ctx, intfID, uint32(onuID), uint32(uniID), "", tpID); err != nil {
+			logger.Warn(ctx, err)
+		}
 	default:
 		logger.Errorw(ctx, "error-unknown-tech",
 			log.Fields{
@@ -2094,6 +2087,13 @@
 				f.resourceMgr.FreeGemPortID(ctx, uint32(onuID), uint32(uniID), gemPort.GemportId)
 			}
 		}
+		//Delete the tp instance and the techprofileid for onu at the end
+		if err := f.DeleteTechProfileInstance(ctx, intfID, uint32(onuID), uint32(uniID), "", tpID); err != nil {
+			logger.Warn(ctx, err)
+		}
+		if err := f.resourceMgr.RemoveTechProfileIDForOnu(ctx, uint32(onuID), uint32(uniID), tpID); err != nil {
+			logger.Warn(ctx, err)
+		}
 	}
 
 	return nil
diff --git a/internal/pkg/resourcemanager/resourcemanager_test.go b/internal/pkg/resourcemanager/resourcemanager_test.go
index 77832b4..d0b6fcf 100644
--- a/internal/pkg/resourcemanager/resourcemanager_test.go
+++ b/internal/pkg/resourcemanager/resourcemanager_test.go
@@ -290,13 +290,26 @@
 		devInfo        *openolt.DeviceInfo
 		kvStorePrefix  string
 	}
+	/* As of not the current NewResourceMgr test is not doing anything as there was no resourceranges passed.
+	      passing the resource ranges would mean passing a mock and changes in all around including device handler and other places.
+	      For now , removed the older version of proto which used ONUIDSTart and ONUIDENd which is not valid.
+	      This test needs to be updated once the kv store mock is fixed all around. Use the below resource ranges in the Ranges of deviceinfo once the kv store is fixed.
+	   intfids := []uint32{0, 1, 2, 3, 4, 5}
+	   devOnuRsrcPools := &openolt.DeviceInfo_DeviceResourceRanges_Pool{Type: openolt.DeviceInfo_DeviceResourceRanges_Pool_ONU_ID, Sharing: openolt.DeviceInfo_DeviceResourceRanges_Pool_DEDICATED_PER_INTF, Start: 1, End: 60}
+	   devGemRsrcPools := &openolt.DeviceInfo_DeviceResourceRanges_Pool{Type: openolt.DeviceInfo_DeviceResourceRanges_Pool_GEMPORT_ID, Sharing: openolt.DeviceInfo_DeviceResourceRanges_Pool_DEDICATED_PER_INTF, Start: 1, End: 10000}
+	   devAllocRsrcPools := &openolt.DeviceInfo_DeviceResourceRanges_Pool{Type: openolt.DeviceInfo_DeviceResourceRanges_Pool_ALLOC_ID, Sharing: openolt.DeviceInfo_DeviceResourceRanges_Pool_DEDICATED_PER_INTF, Start: 1, End: 256}
+	   devFlowRsrcPools := &openolt.DeviceInfo_DeviceResourceRanges_Pool{Type: openolt.DeviceInfo_DeviceResourceRanges_Pool_FLOW_ID, Sharing: openolt.DeviceInfo_DeviceResourceRanges_Pool_SHARED_BY_ALL_INTF_SAME_TECH, Start: 1, End: 20000}
+	   pool := []*openolt.DeviceInfo_DeviceResourceRanges_Pool{devOnuRsrcPools, devGemRsrcPools, devAllocRsrcPools, devFlowRsrcPools}
+	   devRsrc := &openolt.DeviceInfo_DeviceResourceRanges{IntfIds: intfids, Technology: "GPON", Pools: pool}
+	   devRsrcPool := []*openolt.DeviceInfo_DeviceResourceRanges{devRsrc}
+	*/
 	tests := []struct {
 		name string
 		args args
 		want *OpenOltResourceMgr
 	}{
 		{"NewResourceMgr-2", args{"olt1", 0, "1:2", "etcd",
-			"onu", &openolt.DeviceInfo{OnuIdStart: 1, OnuIdEnd: 1}, "service/voltha"}, &OpenOltResourceMgr{}},
+			"olt", &openolt.DeviceInfo{}, "service/voltha"}, &OpenOltResourceMgr{}},
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
diff --git a/vendor/github.com/opencord/voltha-protos/v5/go/common/common.pb.go b/vendor/github.com/opencord/voltha-protos/v5/go/common/common.pb.go
index 87d3dca..47987d1 100644
--- a/vendor/github.com/opencord/voltha-protos/v5/go/common/common.pb.go
+++ b/vendor/github.com/opencord/voltha-protos/v5/go/common/common.pb.go
@@ -103,6 +103,8 @@
 	OperStatus_RECONCILING OperStatus_Types = 6
 	// The device is in reconciling failed
 	OperStatus_RECONCILING_FAILED OperStatus_Types = 7
+	// The device has rebooted
+	OperStatus_REBOOTED OperStatus_Types = 8
 )
 
 var OperStatus_Types_name = map[int32]string{
@@ -114,6 +116,7 @@
 	5: "FAILED",
 	6: "RECONCILING",
 	7: "RECONCILING_FAILED",
+	8: "REBOOTED",
 }
 
 var OperStatus_Types_value = map[string]int32{
@@ -125,6 +128,7 @@
 	"FAILED":             5,
 	"RECONCILING":        6,
 	"RECONCILING_FAILED": 7,
+	"REBOOTED":           8,
 }
 
 func (x OperStatus_Types) String() string {
@@ -497,41 +501,42 @@
 func init() { proto.RegisterFile("voltha_protos/common.proto", fileDescriptor_c2e3fd231961e826) }
 
 var fileDescriptor_c2e3fd231961e826 = []byte{
-	// 570 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x53, 0x5d, 0x4f, 0xdb, 0x30,
-	0x14, 0x25, 0x09, 0x14, 0xb8, 0x85, 0x12, 0xcc, 0x98, 0x3a, 0xb4, 0x87, 0x2a, 0x2f, 0xb0, 0x49,
-	0x6b, 0x25, 0xb6, 0x3d, 0xee, 0x21, 0x24, 0x5e, 0x67, 0x01, 0x4e, 0xe5, 0xa4, 0x20, 0xf1, 0x12,
-	0x85, 0xc6, 0x03, 0x6b, 0xad, 0x1d, 0x25, 0xa6, 0x1a, 0x7b, 0xdc, 0x3f, 0xd8, 0x5f, 0xdd, 0x2f,
-	0x98, 0x9c, 0x86, 0x15, 0xa4, 0xbe, 0xe5, 0x9c, 0x73, 0x73, 0xbf, 0x8e, 0x2f, 0x1c, 0xcd, 0xd5,
-	0x54, 0xdf, 0x67, 0x69, 0x51, 0x2a, 0xad, 0xaa, 0xc1, 0x44, 0xcd, 0x66, 0x4a, 0xf6, 0x6b, 0x84,
-	0x5a, 0x0b, 0xe4, 0xbd, 0x02, 0x9b, 0x84, 0xa8, 0x03, 0xb6, 0xc8, 0xbb, 0x56, 0xcf, 0x3a, 0xd9,
-	0x66, 0xb6, 0xc8, 0xbd, 0x63, 0x70, 0x48, 0x58, 0xa1, 0x1e, 0x6c, 0x08, 0xcd, 0x67, 0x55, 0xd7,
-	0xea, 0x39, 0x27, 0xed, 0x53, 0xe8, 0x37, 0x29, 0x48, 0xc8, 0x16, 0x82, 0xf7, 0x0b, 0x20, 0x50,
-	0x52, 0xf2, 0x89, 0x16, 0x4a, 0xa2, 0x23, 0xd8, 0xe2, 0x32, 0x2f, 0x94, 0x90, 0xba, 0x49, 0xf6,
-	0x1f, 0xa3, 0x1e, 0xb4, 0x27, 0x4a, 0x6a, 0xfe, 0x53, 0x13, 0xf9, 0x5d, 0x75, 0xed, 0x5a, 0x7e,
-	0x4e, 0xa1, 0x3e, 0x1c, 0xfc, 0xe0, 0xbc, 0x48, 0xb3, 0xa9, 0x98, 0xf3, 0x54, 0x48, 0xcd, 0xcb,
-	0x79, 0x36, 0xed, 0x3a, 0x3d, 0xeb, 0xc4, 0x61, 0xfb, 0x46, 0xf2, 0x8d, 0x42, 0x1a, 0xc1, 0xbb,
-	0x07, 0xf0, 0xf3, 0x99, 0x90, 0xb1, 0xce, 0x34, 0xf7, 0x6e, 0x60, 0x23, 0x79, 0x2c, 0x78, 0x85,
-	0xda, 0xb0, 0x39, 0xa6, 0xe7, 0x34, 0xba, 0xa6, 0xee, 0x1a, 0x42, 0xd0, 0x19, 0x31, 0x3c, 0x62,
-	0xd1, 0x15, 0x89, 0x49, 0x44, 0x71, 0xe8, 0x5a, 0x26, 0x00, 0x53, 0xff, 0xec, 0x02, 0x87, 0xae,
-	0x8d, 0x76, 0x60, 0x2b, 0x24, 0xf1, 0x02, 0x39, 0xe8, 0x10, 0xf6, 0xc3, 0xe8, 0x9a, 0x5e, 0x44,
-	0x7e, 0x48, 0xe8, 0x30, 0x25, 0x97, 0xfe, 0x10, 0xbb, 0xeb, 0xde, 0x1f, 0x0b, 0x20, 0x2a, 0x78,
-	0x69, 0x2a, 0x3d, 0x54, 0xde, 0x6f, 0x6b, 0x65, 0xad, 0x0e, 0x40, 0x48, 0xe2, 0x20, 0xba, 0xc2,
-	0xac, 0xae, 0xd3, 0x01, 0xf0, 0x83, 0x84, 0x5c, 0xf9, 0x09, 0xa1, 0x43, 0xd7, 0x36, 0xc1, 0x09,
-	0x8e, 0x6b, 0xe0, 0x20, 0x80, 0x56, 0x2d, 0x62, 0x77, 0xdd, 0x7c, 0x7f, 0xf5, 0x89, 0xe9, 0x60,
-	0x03, 0xed, 0x41, 0x9b, 0xe1, 0x20, 0xa2, 0x01, 0xb9, 0x30, 0x81, 0x2d, 0xf4, 0x1a, 0xd0, 0x33,
-	0x22, 0x6d, 0x02, 0x37, 0x3d, 0x0c, 0xbb, 0xcd, 0xe6, 0x9b, 0xae, 0x3e, 0xad, 0x6c, 0x6a, 0x0f,
-	0xda, 0x63, 0xca, 0xb0, 0x1f, 0x7c, 0x33, 0x33, 0xba, 0x16, 0xda, 0x85, 0xed, 0x25, 0xb4, 0xbd,
-	0xbf, 0x16, 0xec, 0x9a, 0xd1, 0x32, 0x63, 0x20, 0xe3, 0x55, 0x81, 0xbe, 0xc0, 0xfa, 0x44, 0xe5,
-	0xbc, 0x36, 0xb0, 0x73, 0xfa, 0xee, 0xc9, 0xf3, 0x17, 0x41, 0xcf, 0x91, 0x7e, 0x28, 0x65, 0xa0,
-	0x72, 0xce, 0xea, 0xdf, 0xd0, 0x31, 0xec, 0x65, 0x79, 0x2e, 0x8c, 0x96, 0x4d, 0x53, 0xb1, 0xf4,
-	0xba, 0xb3, 0xa4, 0x8d, 0xdd, 0xde, 0x23, 0x1c, 0xac, 0xc8, 0x62, 0x2c, 0x88, 0x46, 0x98, 0xf9,
-	0x09, 0x89, 0x68, 0x1a, 0x8f, 0x83, 0x00, 0xc7, 0xb1, 0xbb, 0xf6, 0x92, 0x36, 0x4b, 0x18, 0x33,
-	0x33, 0xcd, 0x1b, 0x38, 0x5c, 0xd2, 0x63, 0x1a, 0x8f, 0x47, 0xa3, 0x88, 0x25, 0xb5, 0xb3, 0x2f,
-	0x24, 0x42, 0xd3, 0x11, 0x8b, 0x86, 0xcc, 0x24, 0x73, 0xde, 0xbf, 0x85, 0x9d, 0x84, 0x57, 0xfa,
-	0x52, 0xe5, 0xfc, 0x9c, 0x3f, 0x56, 0xe6, 0x11, 0x64, 0x85, 0x48, 0x35, 0xaf, 0xb4, 0xbb, 0x76,
-	0x86, 0xe1, 0x40, 0x95, 0x77, 0x7d, 0x55, 0x70, 0x39, 0x51, 0x65, 0xde, 0x5f, 0x5c, 0xd1, 0x4d,
-	0xff, 0x4e, 0xe8, 0xfb, 0x87, 0x5b, 0xb3, 0x8f, 0xc1, 0x93, 0x36, 0x58, 0x68, 0x1f, 0x9a, 0x0b,
-	0x9b, 0x7f, 0x1e, 0xdc, 0xa9, 0xe6, 0xce, 0x6e, 0x5b, 0x35, 0xf9, 0xf1, 0x5f, 0x00, 0x00, 0x00,
-	0xff, 0xff, 0x62, 0x34, 0x9d, 0xbf, 0x86, 0x03, 0x00, 0x00,
+	// 579 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x53, 0xdd, 0x4e, 0xdb, 0x30,
+	0x14, 0x26, 0x09, 0x14, 0x38, 0x85, 0x12, 0xcc, 0x98, 0x3a, 0xb4, 0x8b, 0x2a, 0x37, 0xb0, 0x49,
+	0x6b, 0x25, 0xb6, 0x5d, 0xee, 0x22, 0x24, 0x5e, 0x67, 0x01, 0x76, 0xe5, 0xa4, 0x20, 0x71, 0x13,
+	0x85, 0xc6, 0x83, 0x68, 0xad, 0x1d, 0x25, 0xa6, 0x1a, 0x7b, 0x8a, 0xbd, 0xc1, 0xde, 0x71, 0x4f,
+	0x30, 0x39, 0x0d, 0x2b, 0x48, 0xbd, 0xcb, 0xf7, 0x7d, 0x27, 0xe7, 0xef, 0xf3, 0x81, 0xa3, 0xb9,
+	0x9a, 0xea, 0xfb, 0x34, 0x29, 0x4a, 0xa5, 0x55, 0x35, 0x98, 0xa8, 0xd9, 0x4c, 0xc9, 0x7e, 0x8d,
+	0x50, 0x6b, 0x81, 0xbc, 0x57, 0x60, 0x93, 0x10, 0x75, 0xc0, 0xce, 0xb3, 0xae, 0xd5, 0xb3, 0x4e,
+	0xb6, 0xb9, 0x9d, 0x67, 0xde, 0x31, 0x38, 0x24, 0xac, 0x50, 0x0f, 0x36, 0x72, 0x2d, 0x66, 0x55,
+	0xd7, 0xea, 0x39, 0x27, 0xed, 0x53, 0xe8, 0x37, 0x29, 0x48, 0xc8, 0x17, 0x82, 0xf7, 0x0b, 0x20,
+	0x50, 0x52, 0x8a, 0x89, 0xce, 0x95, 0x44, 0x47, 0xb0, 0x25, 0x64, 0x56, 0xa8, 0x5c, 0xea, 0x26,
+	0xd9, 0x7f, 0x8c, 0x7a, 0xd0, 0x9e, 0x28, 0xa9, 0xc5, 0x4f, 0x4d, 0xe4, 0x77, 0xd5, 0xb5, 0x6b,
+	0xf9, 0x39, 0x85, 0xfa, 0x70, 0xf0, 0x43, 0x88, 0x22, 0x49, 0xa7, 0xf9, 0x5c, 0x24, 0xb9, 0xd4,
+	0xa2, 0x9c, 0xa7, 0xd3, 0xae, 0xd3, 0xb3, 0x4e, 0x1c, 0xbe, 0x6f, 0x24, 0xdf, 0x28, 0xa4, 0x11,
+	0xbc, 0x7b, 0x00, 0x3f, 0x9b, 0xe5, 0x32, 0xd2, 0xa9, 0x16, 0xde, 0x0d, 0x6c, 0xc4, 0x8f, 0x85,
+	0xa8, 0x50, 0x1b, 0x36, 0xc7, 0xf4, 0x9c, 0xb2, 0x6b, 0xea, 0xae, 0x21, 0x04, 0x9d, 0x11, 0xc7,
+	0x23, 0xce, 0xae, 0x48, 0x44, 0x18, 0xc5, 0xa1, 0x6b, 0x99, 0x00, 0x4c, 0xfd, 0xb3, 0x0b, 0x1c,
+	0xba, 0x36, 0xda, 0x81, 0xad, 0x90, 0x44, 0x0b, 0xe4, 0xa0, 0x43, 0xd8, 0x0f, 0xd9, 0x35, 0xbd,
+	0x60, 0x7e, 0x48, 0xe8, 0x30, 0x21, 0x97, 0xfe, 0x10, 0xbb, 0xeb, 0xde, 0x1f, 0x0b, 0x80, 0x15,
+	0xa2, 0x34, 0x95, 0x1e, 0x2a, 0xef, 0xb7, 0xb5, 0xb2, 0x56, 0x07, 0x20, 0x24, 0x51, 0xc0, 0xae,
+	0x30, 0xaf, 0xeb, 0x74, 0x00, 0xfc, 0x20, 0x26, 0x57, 0x7e, 0x4c, 0xe8, 0xd0, 0xb5, 0x4d, 0x70,
+	0x8c, 0xa3, 0x1a, 0x38, 0x08, 0xa0, 0x55, 0x8b, 0xd8, 0x5d, 0x37, 0xdf, 0x5f, 0x7d, 0x62, 0x3a,
+	0xd8, 0x40, 0x7b, 0xd0, 0xe6, 0x38, 0x60, 0x34, 0x20, 0x17, 0x26, 0xb0, 0x85, 0x5e, 0x03, 0x7a,
+	0x46, 0x24, 0x4d, 0xe0, 0xa6, 0x69, 0x9c, 0xe3, 0x33, 0xc6, 0x62, 0x1c, 0xba, 0x5b, 0x1e, 0x86,
+	0xdd, 0xc6, 0x87, 0xa6, 0xc7, 0x4f, 0x2b, 0x5b, 0xdc, 0x83, 0xf6, 0x98, 0x72, 0xec, 0x07, 0xdf,
+	0xcc, 0xc4, 0xae, 0x85, 0x76, 0x61, 0x7b, 0x09, 0x6d, 0xef, 0xaf, 0x05, 0xbb, 0x66, 0xd0, 0xd4,
+	0xd8, 0xc9, 0x45, 0x55, 0xa0, 0x2f, 0xb0, 0x3e, 0x51, 0x99, 0xa8, 0xed, 0xec, 0x9c, 0xbe, 0x7b,
+	0x7a, 0x01, 0x2f, 0x82, 0x9e, 0x23, 0xfd, 0x50, 0xca, 0x40, 0x65, 0x82, 0xd7, 0xbf, 0xa1, 0x63,
+	0xd8, 0x4b, 0xb3, 0x2c, 0x37, 0x5a, 0x3a, 0x4d, 0xf2, 0xa5, 0xf3, 0x9d, 0x25, 0x6d, 0xcc, 0xf7,
+	0x1e, 0xe1, 0x60, 0x45, 0x16, 0x63, 0x08, 0x1b, 0x61, 0xee, 0xc7, 0x84, 0xd1, 0x24, 0x1a, 0x07,
+	0x01, 0x8e, 0x22, 0x77, 0xed, 0x25, 0x6d, 0x56, 0x32, 0xe6, 0x66, 0x9a, 0x37, 0x70, 0xb8, 0xa4,
+	0xc7, 0x34, 0x1a, 0x8f, 0x46, 0x8c, 0xc7, 0xb5, 0xcf, 0x2f, 0x24, 0x42, 0x93, 0x11, 0x67, 0x43,
+	0x6e, 0x92, 0x39, 0xef, 0xdf, 0xc2, 0x4e, 0x2c, 0x2a, 0x7d, 0xa9, 0x32, 0x71, 0x2e, 0x1e, 0x2b,
+	0xb3, 0xd9, 0xb4, 0xc8, 0x13, 0x2d, 0x2a, 0xed, 0xae, 0x9d, 0x61, 0x38, 0x50, 0xe5, 0x5d, 0x5f,
+	0x15, 0x42, 0x4e, 0x54, 0x99, 0xf5, 0x17, 0x37, 0x75, 0xd3, 0xbf, 0xcb, 0xf5, 0xfd, 0xc3, 0xad,
+	0xd9, 0xc7, 0xe0, 0x49, 0x1b, 0x2c, 0xb4, 0x0f, 0xcd, 0xbd, 0xcd, 0x3f, 0x0f, 0xee, 0x54, 0x73,
+	0x75, 0xb7, 0xad, 0x9a, 0xfc, 0xf8, 0x2f, 0x00, 0x00, 0xff, 0xff, 0xf6, 0x0d, 0xae, 0x93, 0x94,
+	0x03, 0x00, 0x00,
 }
diff --git a/vendor/github.com/opencord/voltha-protos/v5/go/openolt/openolt.pb.go b/vendor/github.com/opencord/voltha-protos/v5/go/openolt/openolt.pb.go
index 6dfa875..21e59ac 100644
--- a/vendor/github.com/opencord/voltha-protos/v5/go/openolt/openolt.pb.go
+++ b/vendor/github.com/opencord/voltha-protos/v5/go/openolt/openolt.pb.go
@@ -66,6 +66,37 @@
 	return fileDescriptor_c072e7aa0dfd74d5, []int{5, 0}
 }
 
+type IntfOperIndication_PONResourceRanges_Pool_PoolType int32
+
+const (
+	IntfOperIndication_PONResourceRanges_Pool_ONU_ID     IntfOperIndication_PONResourceRanges_Pool_PoolType = 0
+	IntfOperIndication_PONResourceRanges_Pool_ALLOC_ID   IntfOperIndication_PONResourceRanges_Pool_PoolType = 1
+	IntfOperIndication_PONResourceRanges_Pool_GEMPORT_ID IntfOperIndication_PONResourceRanges_Pool_PoolType = 2
+	IntfOperIndication_PONResourceRanges_Pool_FLOW_ID    IntfOperIndication_PONResourceRanges_Pool_PoolType = 3
+)
+
+var IntfOperIndication_PONResourceRanges_Pool_PoolType_name = map[int32]string{
+	0: "ONU_ID",
+	1: "ALLOC_ID",
+	2: "GEMPORT_ID",
+	3: "FLOW_ID",
+}
+
+var IntfOperIndication_PONResourceRanges_Pool_PoolType_value = map[string]int32{
+	"ONU_ID":     0,
+	"ALLOC_ID":   1,
+	"GEMPORT_ID": 2,
+	"FLOW_ID":    3,
+}
+
+func (x IntfOperIndication_PONResourceRanges_Pool_PoolType) String() string {
+	return proto.EnumName(IntfOperIndication_PONResourceRanges_Pool_PoolType_name, int32(x))
+}
+
+func (IntfOperIndication_PONResourceRanges_Pool_PoolType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_c072e7aa0dfd74d5, []int{6, 0, 0, 0}
+}
+
 type DeviceInfo_DeviceResourceRanges_Pool_PoolType int32
 
 const (
@@ -957,13 +988,15 @@
 }
 
 type IntfOperIndication struct {
-	Type                 string   `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"`
-	IntfId               uint32   `protobuf:"fixed32,2,opt,name=intf_id,json=intfId,proto3" json:"intf_id,omitempty"`
-	OperState            string   `protobuf:"bytes,3,opt,name=oper_state,json=operState,proto3" json:"oper_state,omitempty"`
-	Speed                uint32   `protobuf:"fixed32,4,opt,name=speed,proto3" json:"speed,omitempty"`
-	XXX_NoUnkeyedLiteral struct{} `json:"-"`
-	XXX_unrecognized     []byte   `json:"-"`
-	XXX_sizecache        int32    `json:"-"`
+	Type                 string                                `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"`
+	IntfId               uint32                                `protobuf:"fixed32,2,opt,name=intf_id,json=intfId,proto3" json:"intf_id,omitempty"`
+	OperState            string                                `protobuf:"bytes,3,opt,name=oper_state,json=operState,proto3" json:"oper_state,omitempty"`
+	Speed                uint32                                `protobuf:"fixed32,4,opt,name=speed,proto3" json:"speed,omitempty"`
+	Technology           string                                `protobuf:"bytes,5,opt,name=technology,proto3" json:"technology,omitempty"`
+	Ranges               *IntfOperIndication_PONResourceRanges `protobuf:"bytes,6,opt,name=ranges,proto3" json:"ranges,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                              `json:"-"`
+	XXX_unrecognized     []byte                                `json:"-"`
+	XXX_sizecache        int32                                 `json:"-"`
 }
 
 func (m *IntfOperIndication) Reset()         { *m = IntfOperIndication{} }
@@ -1019,6 +1052,118 @@
 	return 0
 }
 
+func (m *IntfOperIndication) GetTechnology() string {
+	if m != nil {
+		return m.Technology
+	}
+	return ""
+}
+
+func (m *IntfOperIndication) GetRanges() *IntfOperIndication_PONResourceRanges {
+	if m != nil {
+		return m.Ranges
+	}
+	return nil
+}
+
+type IntfOperIndication_PONResourceRanges struct {
+	Pools                []*IntfOperIndication_PONResourceRanges_Pool `protobuf:"bytes,3,rep,name=pools,proto3" json:"pools,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                     `json:"-"`
+	XXX_unrecognized     []byte                                       `json:"-"`
+	XXX_sizecache        int32                                        `json:"-"`
+}
+
+func (m *IntfOperIndication_PONResourceRanges) Reset()         { *m = IntfOperIndication_PONResourceRanges{} }
+func (m *IntfOperIndication_PONResourceRanges) String() string { return proto.CompactTextString(m) }
+func (*IntfOperIndication_PONResourceRanges) ProtoMessage()    {}
+func (*IntfOperIndication_PONResourceRanges) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c072e7aa0dfd74d5, []int{6, 0}
+}
+
+func (m *IntfOperIndication_PONResourceRanges) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_IntfOperIndication_PONResourceRanges.Unmarshal(m, b)
+}
+func (m *IntfOperIndication_PONResourceRanges) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_IntfOperIndication_PONResourceRanges.Marshal(b, m, deterministic)
+}
+func (m *IntfOperIndication_PONResourceRanges) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_IntfOperIndication_PONResourceRanges.Merge(m, src)
+}
+func (m *IntfOperIndication_PONResourceRanges) XXX_Size() int {
+	return xxx_messageInfo_IntfOperIndication_PONResourceRanges.Size(m)
+}
+func (m *IntfOperIndication_PONResourceRanges) XXX_DiscardUnknown() {
+	xxx_messageInfo_IntfOperIndication_PONResourceRanges.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_IntfOperIndication_PONResourceRanges proto.InternalMessageInfo
+
+func (m *IntfOperIndication_PONResourceRanges) GetPools() []*IntfOperIndication_PONResourceRanges_Pool {
+	if m != nil {
+		return m.Pools
+	}
+	return nil
+}
+
+type IntfOperIndication_PONResourceRanges_Pool struct {
+	Type                 IntfOperIndication_PONResourceRanges_Pool_PoolType `protobuf:"varint,1,opt,name=type,proto3,enum=openolt.IntfOperIndication_PONResourceRanges_Pool_PoolType" json:"type,omitempty"`
+	Start                uint32                                             `protobuf:"fixed32,3,opt,name=start,proto3" json:"start,omitempty"`
+	End                  uint32                                             `protobuf:"fixed32,4,opt,name=end,proto3" json:"end,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                           `json:"-"`
+	XXX_unrecognized     []byte                                             `json:"-"`
+	XXX_sizecache        int32                                              `json:"-"`
+}
+
+func (m *IntfOperIndication_PONResourceRanges_Pool) Reset() {
+	*m = IntfOperIndication_PONResourceRanges_Pool{}
+}
+func (m *IntfOperIndication_PONResourceRanges_Pool) String() string {
+	return proto.CompactTextString(m)
+}
+func (*IntfOperIndication_PONResourceRanges_Pool) ProtoMessage() {}
+func (*IntfOperIndication_PONResourceRanges_Pool) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c072e7aa0dfd74d5, []int{6, 0, 0}
+}
+
+func (m *IntfOperIndication_PONResourceRanges_Pool) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_IntfOperIndication_PONResourceRanges_Pool.Unmarshal(m, b)
+}
+func (m *IntfOperIndication_PONResourceRanges_Pool) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_IntfOperIndication_PONResourceRanges_Pool.Marshal(b, m, deterministic)
+}
+func (m *IntfOperIndication_PONResourceRanges_Pool) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_IntfOperIndication_PONResourceRanges_Pool.Merge(m, src)
+}
+func (m *IntfOperIndication_PONResourceRanges_Pool) XXX_Size() int {
+	return xxx_messageInfo_IntfOperIndication_PONResourceRanges_Pool.Size(m)
+}
+func (m *IntfOperIndication_PONResourceRanges_Pool) XXX_DiscardUnknown() {
+	xxx_messageInfo_IntfOperIndication_PONResourceRanges_Pool.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_IntfOperIndication_PONResourceRanges_Pool proto.InternalMessageInfo
+
+func (m *IntfOperIndication_PONResourceRanges_Pool) GetType() IntfOperIndication_PONResourceRanges_Pool_PoolType {
+	if m != nil {
+		return m.Type
+	}
+	return IntfOperIndication_PONResourceRanges_Pool_ONU_ID
+}
+
+func (m *IntfOperIndication_PONResourceRanges_Pool) GetStart() uint32 {
+	if m != nil {
+		return m.Start
+	}
+	return 0
+}
+
+func (m *IntfOperIndication_PONResourceRanges_Pool) GetEnd() uint32 {
+	if m != nil {
+		return m.End
+	}
+	return 0
+}
+
 type OmciIndication struct {
 	IntfId               uint32   `protobuf:"fixed32,1,opt,name=intf_id,json=intfId,proto3" json:"intf_id,omitempty"`
 	OnuId                uint32   `protobuf:"fixed32,2,opt,name=onu_id,json=onuId,proto3" json:"onu_id,omitempty"`
@@ -1571,17 +1716,7 @@
 	DeviceSerialNumber  string `protobuf:"bytes,17,opt,name=device_serial_number,json=deviceSerialNumber,proto3" json:"device_serial_number,omitempty"`
 	PreviouslyConnected bool   `protobuf:"varint,19,opt,name=previously_connected,json=previouslyConnected,proto3" json:"previously_connected,omitempty"`
 	// Total number of pon intf ports on the device
-	PonPorts uint32 `protobuf:"fixed32,12,opt,name=pon_ports,json=ponPorts,proto3" json:"pon_ports,omitempty"`
-	// If using global per-device technology profile. To be deprecated
-	Technology           string                             `protobuf:"bytes,5,opt,name=technology,proto3" json:"technology,omitempty"`
-	OnuIdStart           uint32                             `protobuf:"fixed32,6,opt,name=onu_id_start,json=onuIdStart,proto3" json:"onu_id_start,omitempty"`
-	OnuIdEnd             uint32                             `protobuf:"fixed32,7,opt,name=onu_id_end,json=onuIdEnd,proto3" json:"onu_id_end,omitempty"`
-	AllocIdStart         uint32                             `protobuf:"fixed32,8,opt,name=alloc_id_start,json=allocIdStart,proto3" json:"alloc_id_start,omitempty"`
-	AllocIdEnd           uint32                             `protobuf:"fixed32,9,opt,name=alloc_id_end,json=allocIdEnd,proto3" json:"alloc_id_end,omitempty"`
-	GemportIdStart       uint32                             `protobuf:"fixed32,10,opt,name=gemport_id_start,json=gemportIdStart,proto3" json:"gemport_id_start,omitempty"`
-	GemportIdEnd         uint32                             `protobuf:"fixed32,11,opt,name=gemport_id_end,json=gemportIdEnd,proto3" json:"gemport_id_end,omitempty"`
-	FlowIdStart          uint32                             `protobuf:"fixed32,13,opt,name=flow_id_start,json=flowIdStart,proto3" json:"flow_id_start,omitempty"`
-	FlowIdEnd            uint32                             `protobuf:"fixed32,14,opt,name=flow_id_end,json=flowIdEnd,proto3" json:"flow_id_end,omitempty"`
+	PonPorts             uint32                             `protobuf:"fixed32,12,opt,name=pon_ports,json=ponPorts,proto3" json:"pon_ports,omitempty"`
 	Ranges               []*DeviceInfo_DeviceResourceRanges `protobuf:"bytes,15,rep,name=ranges,proto3" json:"ranges,omitempty"`
 	XXX_NoUnkeyedLiteral struct{}                           `json:"-"`
 	XXX_unrecognized     []byte                             `json:"-"`
@@ -1669,69 +1804,6 @@
 	return 0
 }
 
-func (m *DeviceInfo) GetTechnology() string {
-	if m != nil {
-		return m.Technology
-	}
-	return ""
-}
-
-func (m *DeviceInfo) GetOnuIdStart() uint32 {
-	if m != nil {
-		return m.OnuIdStart
-	}
-	return 0
-}
-
-func (m *DeviceInfo) GetOnuIdEnd() uint32 {
-	if m != nil {
-		return m.OnuIdEnd
-	}
-	return 0
-}
-
-func (m *DeviceInfo) GetAllocIdStart() uint32 {
-	if m != nil {
-		return m.AllocIdStart
-	}
-	return 0
-}
-
-func (m *DeviceInfo) GetAllocIdEnd() uint32 {
-	if m != nil {
-		return m.AllocIdEnd
-	}
-	return 0
-}
-
-func (m *DeviceInfo) GetGemportIdStart() uint32 {
-	if m != nil {
-		return m.GemportIdStart
-	}
-	return 0
-}
-
-func (m *DeviceInfo) GetGemportIdEnd() uint32 {
-	if m != nil {
-		return m.GemportIdEnd
-	}
-	return 0
-}
-
-func (m *DeviceInfo) GetFlowIdStart() uint32 {
-	if m != nil {
-		return m.FlowIdStart
-	}
-	return 0
-}
-
-func (m *DeviceInfo) GetFlowIdEnd() uint32 {
-	if m != nil {
-		return m.FlowIdEnd
-	}
-	return 0
-}
-
 func (m *DeviceInfo) GetRanges() []*DeviceInfo_DeviceResourceRanges {
 	if m != nil {
 		return m.Ranges
@@ -4650,6 +4722,7 @@
 
 func init() {
 	proto.RegisterEnum("openolt.OnuIndication_ActivationFailReason", OnuIndication_ActivationFailReason_name, OnuIndication_ActivationFailReason_value)
+	proto.RegisterEnum("openolt.IntfOperIndication_PONResourceRanges_Pool_PoolType", IntfOperIndication_PONResourceRanges_Pool_PoolType_name, IntfOperIndication_PONResourceRanges_Pool_PoolType_value)
 	proto.RegisterEnum("openolt.DeviceInfo_DeviceResourceRanges_Pool_PoolType", DeviceInfo_DeviceResourceRanges_Pool_PoolType_name, DeviceInfo_DeviceResourceRanges_Pool_PoolType_value)
 	proto.RegisterEnum("openolt.DeviceInfo_DeviceResourceRanges_Pool_SharingType", DeviceInfo_DeviceResourceRanges_Pool_SharingType_name, DeviceInfo_DeviceResourceRanges_Pool_SharingType_value)
 	proto.RegisterEnum("openolt.GroupMember_InterfaceType", GroupMember_InterfaceType_name, GroupMember_InterfaceType_value)
@@ -4662,6 +4735,8 @@
 	proto.RegisterType((*OnuDiscIndication)(nil), "openolt.OnuDiscIndication")
 	proto.RegisterType((*OnuIndication)(nil), "openolt.OnuIndication")
 	proto.RegisterType((*IntfOperIndication)(nil), "openolt.IntfOperIndication")
+	proto.RegisterType((*IntfOperIndication_PONResourceRanges)(nil), "openolt.IntfOperIndication.PONResourceRanges")
+	proto.RegisterType((*IntfOperIndication_PONResourceRanges_Pool)(nil), "openolt.IntfOperIndication.PONResourceRanges.Pool")
 	proto.RegisterType((*OmciIndication)(nil), "openolt.OmciIndication")
 	proto.RegisterType((*PacketIndication)(nil), "openolt.PacketIndication")
 	proto.RegisterType((*Interface)(nil), "openolt.Interface")
@@ -4715,342 +4790,340 @@
 func init() { proto.RegisterFile("voltha_protos/openolt.proto", fileDescriptor_c072e7aa0dfd74d5) }
 
 var fileDescriptor_c072e7aa0dfd74d5 = []byte{
-	// 5350 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x7c, 0x4b, 0x70, 0x1b, 0x49,
-	0x72, 0xb6, 0xc0, 0x07, 0x00, 0x26, 0x1e, 0x04, 0x8b, 0x6f, 0x52, 0x0f, 0xaa, 0x47, 0x33, 0xa3,
-	0x9d, 0xdd, 0x21, 0x45, 0x8e, 0xa8, 0x91, 0xe6, 0xdf, 0x7f, 0x77, 0x28, 0x12, 0x22, 0xe1, 0x21,
-	0x09, 0xba, 0x09, 0x49, 0xde, 0xdd, 0x98, 0x68, 0x37, 0xbb, 0x0b, 0x60, 0x2f, 0x1b, 0x5d, 0x3d,
-	0xdd, 0x05, 0x3e, 0x7c, 0xdc, 0xf0, 0xda, 0x17, 0xdf, 0x36, 0xec, 0x08, 0xfb, 0xe2, 0x70, 0xf8,
-	0xea, 0x8b, 0x6f, 0x8e, 0xf0, 0xd1, 0xe1, 0xf0, 0xc5, 0x37, 0x9f, 0x7d, 0x73, 0xf8, 0xe2, 0x93,
-	0x2f, 0x3e, 0x39, 0x1c, 0x8e, 0xca, 0xaa, 0x7e, 0x01, 0x20, 0x25, 0x8d, 0xe9, 0xf0, 0x45, 0xc1,
-	0xca, 0xfc, 0xf2, 0xcb, 0x7a, 0x64, 0x65, 0x65, 0x77, 0x17, 0x04, 0xcb, 0xe7, 0xcc, 0xe5, 0xa7,
-	0xa6, 0xe1, 0x07, 0x8c, 0xb3, 0x70, 0x8d, 0xf9, 0xd4, 0x63, 0x2e, 0x5f, 0xc5, 0x26, 0x29, 0xa8,
-	0xe6, 0xd2, 0xdd, 0x0e, 0x63, 0x1d, 0x97, 0xae, 0x99, 0xbe, 0xb3, 0x66, 0x7a, 0x1e, 0xe3, 0x26,
-	0x77, 0x98, 0x17, 0x4a, 0xd8, 0xd2, 0x4a, 0x96, 0x83, 0x53, 0xeb, 0x54, 0xfc, 0xdd, 0x76, 0x5c,
-	0xaa, 0x10, 0xf7, 0xb3, 0x08, 0x7a, 0xc9, 0x0d, 0x8b, 0x79, 0x6d, 0xa7, 0x73, 0xad, 0x9e, 0x7a,
-	0x61, 0xe2, 0x41, 0xfb, 0xc7, 0x31, 0x80, 0x86, 0x67, 0x3b, 0x16, 0xfa, 0x25, 0xeb, 0x50, 0x60,
-	0x2e, 0x37, 0x1c, 0xcf, 0x5e, 0xc8, 0xad, 0xe4, 0x1e, 0x97, 0x36, 0xe6, 0x56, 0xa3, 0x8e, 0x37,
-	0x5d, 0x9e, 0x00, 0xf7, 0xee, 0xe8, 0x79, 0x86, 0x02, 0xf2, 0x14, 0x8a, 0x8e, 0xc7, 0xdb, 0x68,
-	0x33, 0x82, 0x36, 0xf3, 0xb1, 0x4d, 0xc3, 0xe3, 0xed, 0x8c, 0x51, 0xc1, 0x91, 0x12, 0xb2, 0x05,
-	0x15, 0xb4, 0x62, 0x3e, 0x0d, 0xd0, 0x74, 0x14, 0x4d, 0x97, 0x33, 0xa6, 0x4d, 0x9f, 0x06, 0x19,
-	0xf3, 0x92, 0x93, 0x48, 0xc9, 0x4f, 0xa0, 0xcc, 0xbc, 0x9e, 0x61, 0x3b, 0xa1, 0x85, 0x0c, 0x63,
-	0xc8, 0xb0, 0x94, 0x74, 0xd8, 0xeb, 0xed, 0x38, 0xa1, 0x95, 0x21, 0x00, 0x16, 0x0b, 0x71, 0xac,
-	0x5e, 0x0f, 0x4d, 0xc7, 0xfb, 0xc7, 0xea, 0xf5, 0xfa, 0xc6, 0x8a, 0x02, 0x31, 0x56, 0xd6, 0xb5,
-	0x1c, 0xb4, 0xc9, 0xf7, 0x8d, 0xb5, 0xd9, 0xb5, 0x9c, 0xec, 0x58, 0x99, 0x94, 0x90, 0xa7, 0x50,
-	0xf0, 0xcf, 0xe4, 0xa4, 0x16, 0xd0, 0x68, 0x31, 0x36, 0x3a, 0x32, 0xad, 0x33, 0xda, 0x37, 0xaf,
-	0xfe, 0x19, 0xce, 0xeb, 0x73, 0x00, 0x9f, 0x05, 0xdc, 0x08, 0xb9, 0xc9, 0xc3, 0x85, 0x62, 0x9f,
-	0xb7, 0x23, 0x16, 0xf0, 0x63, 0x11, 0x2c, 0x21, 0x77, 0xac, 0x70, 0xef, 0x8e, 0x3e, 0xe1, 0x2b,
-	0x49, 0x28, 0x2c, 0xdb, 0x2e, 0xbb, 0x50, 0x96, 0x13, 0x7d, 0x96, 0xaf, 0x5c, 0x76, 0x91, 0xb5,
-	0x6c, 0x2b, 0x49, 0x48, 0xbe, 0x84, 0x09, 0xd3, 0x35, 0x83, 0x2e, 0xf6, 0x15, 0xd0, 0x70, 0x21,
-	0x36, 0xdc, 0x12, 0x9a, 0x4c, 0x57, 0x8b, 0xa6, 0x12, 0xbd, 0xcc, 0xc3, 0x98, 0x6d, 0x72, 0x53,
-	0xfb, 0xb7, 0x0a, 0x4c, 0xf6, 0xe1, 0xc4, 0x3c, 0xbb, 0x2c, 0x1c, 0x1a, 0x53, 0xfb, 0x2c, 0xcc,
-	0x8e, 0xdd, 0x45, 0x01, 0xd9, 0x81, 0xaa, 0x7d, 0xe5, 0x78, 0x1d, 0xa3, 0x63, 0x86, 0x7e, 0x2a,
-	0xb2, 0xee, 0xc6, 0x96, 0x3b, 0x42, 0xbd, 0x6b, 0x86, 0x7e, 0xc6, 0xbe, 0x6c, 0xa7, 0xc4, 0x22,
-	0xc6, 0xc4, 0x02, 0x27, 0x23, 0xea, 0x8f, 0xb1, 0xa6, 0xd7, 0x1b, 0x1c, 0x54, 0x89, 0x25, 0x52,
-	0xf2, 0x16, 0x66, 0x04, 0x45, 0xc8, 0xcd, 0x80, 0xf7, 0x7c, 0xa3, 0x6d, 0x3a, 0x6e, 0x2a, 0xd6,
-	0x1e, 0xa5, 0x99, 0x8e, 0x25, 0xe6, 0x95, 0xe9, 0xb8, 0xbd, 0x80, 0x66, 0x28, 0xa7, 0x58, 0x46,
-	0x2d, 0x88, 0x7f, 0x0e, 0x73, 0x48, 0xec, 0x74, 0x3c, 0xd3, 0x35, 0x6c, 0xda, 0x09, 0x4c, 0x9b,
-	0xa6, 0x62, 0xf1, 0xa3, 0x0c, 0x35, 0xa2, 0x76, 0x24, 0x28, 0xc3, 0x3c, 0xcd, 0x06, 0xb5, 0xe4,
-	0x17, 0x30, 0x8f, 0x1b, 0x23, 0x70, 0xda, 0xdc, 0x60, 0x6d, 0xe3, 0xc2, 0xf1, 0x6c, 0x76, 0x91,
-	0x0a, 0xda, 0x0c, 0xf9, 0x8e, 0x80, 0x35, 0xdb, 0x6f, 0x11, 0x34, 0x40, 0xde, 0xaf, 0x25, 0x2d,
-	0x10, 0xa3, 0x31, 0x5c, 0x16, 0x86, 0x46, 0xbc, 0x17, 0x64, 0x58, 0x7f, 0x9a, 0xa6, 0xdd, 0x67,
-	0x61, 0xd8, 0x6c, 0x8b, 0x4d, 0xb1, 0x7d, 0x6a, 0x7a, 0x1e, 0x75, 0x33, 0xd4, 0x55, 0xa6, 0x10,
-	0x6a, 0x8b, 0x44, 0xf3, 0x8c, 0x43, 0x09, 0x93, 0x79, 0x2e, 0x0e, 0x99, 0x67, 0x89, 0xb9, 0x76,
-	0x9e, 0x13, 0xb5, 0x20, 0x6e, 0xca, 0x24, 0xc1, 0x9d, 0x0b, 0xd9, 0x53, 0xb9, 0x1b, 0x7e, 0x98,
-	0x26, 0x6c, 0x05, 0xa6, 0x17, 0x76, 0x9d, 0x50, 0xa4, 0xc5, 0x86, 0xc7, 0x69, 0xd0, 0xa6, 0x01,
-	0xf5, 0x2c, 0xfa, 0xd6, 0x0c, 0x3c, 0xc7, 0xeb, 0xa8, 0xac, 0xd1, 0x72, 0x2e, 0xb0, 0xa7, 0xbf,
-	0x2b, 0x27, 0xd7, 0xb4, 0xb8, 0x73, 0x8e, 0x7e, 0x93, 0xce, 0xc2, 0xe0, 0x2c, 0x6c, 0xc5, 0xb0,
-	0x61, 0xfd, 0x15, 0x63, 0xce, 0x22, 0xa4, 0x87, 0x05, 0xe1, 0xc1, 0x0f, 0x98, 0x45, 0xc3, 0x50,
-	0xec, 0x02, 0x1a, 0x04, 0x4c, 0x66, 0xc9, 0x12, 0xba, 0xf8, 0x38, 0xed, 0xe2, 0x28, 0xc6, 0xd5,
-	0x05, 0x2c, 0xe3, 0x60, 0x96, 0x0d, 0xd3, 0x13, 0x0a, 0x8b, 0xc9, 0x1a, 0xb6, 0x8d, 0xf0, 0xca,
-	0xb3, 0x92, 0x51, 0x94, 0xd1, 0xc5, 0x67, 0x83, 0x6b, 0xf9, 0x0d, 0xbd, 0x3a, 0xbe, 0xf2, 0xac,
-	0xeb, 0x06, 0x22, 0x41, 0x11, 0x42, 0xb8, 0x79, 0x0d, 0xb3, 0x98, 0x60, 0x79, 0xcf, 0xf0, 0x99,
-	0x27, 0xd3, 0x11, 0xba, 0xa8, 0xa0, 0x8b, 0x87, 0x99, 0x74, 0xcb, 0x7b, 0x47, 0xcc, 0xc3, 0x2c,
-	0x34, 0xb0, 0xa4, 0x59, 0x1d, 0x71, 0xe1, 0x2e, 0x86, 0x37, 0xed, 0x5b, 0x83, 0x5e, 0x20, 0x37,
-	0x50, 0x15, 0xd9, 0x7f, 0x90, 0x89, 0xf1, 0x14, 0x76, 0x58, 0xff, 0xc5, 0x74, 0x0c, 0xc7, 0x90,
-	0xb7, 0x72, 0x10, 0x01, 0xed, 0x32, 0x4e, 0x0d, 0x9b, 0xb6, 0xa9, 0x25, 0x53, 0xf9, 0x24, 0xba,
-	0xd1, 0xd2, 0x6e, 0x74, 0x04, 0xed, 0x20, 0x26, 0xc3, 0x4f, 0xd8, 0x80, 0x92, 0x84, 0x72, 0x18,
-	0xb8, 0x08, 0x1d, 0xda, 0x35, 0x6c, 0xea, 0x3a, 0x1e, 0x95, 0xc3, 0x11, 0xfc, 0x35, 0xe4, 0x5f,
-	0x1f, 0x5c, 0x87, 0xdd, 0xfa, 0x81, 0xda, 0x52, 0x3b, 0x89, 0x49, 0xc6, 0xdd, 0x82, 0x5a, 0x8e,
-	0x5d, 0xda, 0xcd, 0x42, 0xc8, 0x39, 0xac, 0x60, 0x6c, 0x9d, 0x5e, 0x85, 0x8e, 0x65, 0xba, 0x06,
-	0xfd, 0xae, 0xe7, 0xf8, 0x5d, 0xea, 0xf1, 0x54, 0x8c, 0x4d, 0xa1, 0xe3, 0x1f, 0x65, 0x62, 0x4c,
-	0xe1, 0xeb, 0x11, 0x7c, 0x30, 0xd4, 0xc4, 0x60, 0xae, 0x85, 0x91, 0x5f, 0xc0, 0x74, 0x3a, 0xe2,
-	0x4c, 0xeb, 0x0c, 0x5d, 0x91, 0xc1, 0xdd, 0x28, 0xc7, 0xb8, 0x65, 0x9d, 0x79, 0xec, 0xc2, 0xa5,
-	0x76, 0x87, 0x0a, 0x9e, 0x8c, 0xa7, 0x49, 0x96, 0x42, 0x09, 0x72, 0x06, 0xcb, 0xb2, 0x10, 0x68,
-	0xb7, 0x8d, 0x80, 0x9a, 0xd6, 0xa9, 0x41, 0x2f, 0x2d, 0x4a, 0x6d, 0x6a, 0xa3, 0x93, 0x69, 0x74,
-	0xb2, 0x96, 0xad, 0x0b, 0xda, 0xb8, 0xc9, 0xb9, 0x63, 0xba, 0xba, 0xb0, 0xa8, 0x2b, 0x83, 0x8c,
-	0xa3, 0x79, 0x26, 0x91, 0xfd, 0x88, 0xf8, 0xb4, 0x5b, 0x85, 0x4a, 0xa6, 0x2a, 0x22, 0xf7, 0x00,
-	0xb0, 0xa0, 0x11, 0xa1, 0x4e, 0xf1, 0xb4, 0x9b, 0xd0, 0x27, 0x84, 0x44, 0x04, 0x2f, 0xd5, 0xf6,
-	0xa0, 0x9a, 0xad, 0x88, 0xc8, 0x3c, 0x14, 0x64, 0xf1, 0x24, 0xcf, 0xc6, 0x82, 0x9e, 0xc7, 0x02,
-	0xc9, 0xee, 0x63, 0x1a, 0xe9, 0x67, 0x3a, 0x85, 0xa9, 0x81, 0xf2, 0xe6, 0x7a, 0xb2, 0xaf, 0xa0,
-	0x12, 0xd2, 0xc0, 0x31, 0x5d, 0xc3, 0xeb, 0x75, 0x4f, 0x68, 0xa0, 0x4e, 0xd3, 0xd9, 0x78, 0x4a,
-	0x8e, 0x51, 0x7b, 0x88, 0x4a, 0xbd, 0x1c, 0xa6, 0x5a, 0xda, 0x6f, 0xc6, 0xa0, 0x92, 0x29, 0x87,
-	0xae, 0x77, 0x33, 0x0b, 0x79, 0xdc, 0xef, 0xf2, 0xb4, 0x2e, 0xe8, 0xe3, 0x62, 0xef, 0xf6, 0x0f,
-	0x65, 0xb4, 0x6f, 0x28, 0xe4, 0x01, 0x94, 0x4c, 0xbb, 0xeb, 0x78, 0x4a, 0x3f, 0x8e, 0x7a, 0x40,
-	0x91, 0x04, 0x0c, 0xf4, 0x7e, 0xec, 0xbd, 0x7b, 0x4f, 0xf6, 0xa1, 0x84, 0x89, 0x2d, 0xa0, 0x66,
-	0xc8, 0x3c, 0x3c, 0xfe, 0xaa, 0xd9, 0x78, 0x4b, 0x06, 0xb6, 0x9a, 0x4d, 0xc5, 0x3a, 0x9a, 0xe8,
-	0xd0, 0x8e, 0xff, 0xd6, 0xfe, 0x70, 0x04, 0x66, 0x86, 0x81, 0xc8, 0x47, 0xf0, 0xa0, 0x79, 0xf8,
-	0xda, 0xd8, 0xda, 0x6e, 0x35, 0xde, 0x6c, 0xb5, 0x1a, 0xcd, 0x43, 0xe3, 0xd5, 0x56, 0x63, 0xdf,
-	0xd0, 0xeb, 0x5b, 0xc7, 0xcd, 0x43, 0xe3, 0xb0, 0x79, 0x58, 0xaf, 0xdd, 0x21, 0x9f, 0x80, 0x76,
-	0x03, 0x48, 0xdf, 0x3a, 0xdc, 0x6d, 0x1c, 0xee, 0xd6, 0x72, 0xe4, 0x19, 0x6c, 0xdc, 0x80, 0x3b,
-	0xda, 0x3a, 0x3e, 0x7e, 0xdb, 0xd4, 0x77, 0x8c, 0xad, 0xd7, 0xad, 0xbd, 0xfa, 0x61, 0xab, 0xb1,
-	0x8d, 0x98, 0xda, 0x08, 0xd1, 0xe0, 0xfe, 0x0d, 0x76, 0xfb, 0xcd, 0xe3, 0xda, 0x28, 0x79, 0x08,
-	0xf7, 0x86, 0x61, 0x50, 0xb6, 0xbf, 0xa5, 0x1f, 0xd4, 0xc6, 0xae, 0x1b, 0xcb, 0xf1, 0xdb, 0x46,
-	0x6b, 0x7b, 0xcf, 0x68, 0xbe, 0xa9, 0xeb, 0xb5, 0x71, 0xed, 0x1c, 0xc8, 0x60, 0x81, 0x4e, 0x08,
-	0x8c, 0xf1, 0x2b, 0x3f, 0x0a, 0x7c, 0xfc, 0x3b, 0x1d, 0x2d, 0x23, 0x37, 0x44, 0xf8, 0x40, 0x58,
-	0xcc, 0xc0, 0x78, 0xe8, 0x53, 0x2a, 0x4b, 0xad, 0x82, 0x2e, 0x1b, 0x9a, 0x0e, 0xd5, 0x6c, 0x9d,
-	0xfd, 0xc1, 0xd1, 0x58, 0x83, 0x51, 0xff, 0x8c, 0xa3, 0xbf, 0xb2, 0x2e, 0xfe, 0xd4, 0xfe, 0x3d,
-	0x07, 0xb5, 0xfe, 0x3a, 0x9c, 0x2c, 0xc3, 0x04, 0xd2, 0xe2, 0x78, 0x64, 0x4c, 0xe2, 0x63, 0x4e,
-	0xab, 0x6f, 0x4c, 0xd7, 0xf9, 0x2c, 0xa6, 0x7d, 0xce, 0x42, 0xbe, 0xe7, 0x39, 0x42, 0x3c, 0x21,
-	0xc5, 0x3d, 0xcf, 0x91, 0x33, 0xd0, 0xa1, 0x5d, 0x2c, 0xf2, 0xe3, 0x5e, 0x4e, 0x28, 0x49, 0xc3,
-	0x16, 0x5e, 0xb0, 0x8c, 0x77, 0x64, 0xe1, 0x5a, 0xd0, 0xf3, 0xa2, 0x29, 0x15, 0x68, 0xe4, 0x31,
-	0x0c, 0xe8, 0x82, 0x9e, 0x17, 0xcd, 0x43, 0x46, 0xe6, 0x20, 0x6f, 0x31, 0x76, 0xe6, 0x50, 0x2c,
-	0xc8, 0xf2, 0xba, 0x6a, 0x45, 0x63, 0x1e, 0x4b, 0xc6, 0xfc, 0x08, 0x26, 0x64, 0xa9, 0x63, 0x5a,
-	0xd7, 0x0f, 0x47, 0xfb, 0x31, 0x4c, 0xec, 0x51, 0x33, 0xe0, 0x27, 0xd4, 0xe4, 0x64, 0x0d, 0xa6,
-	0x4f, 0xa3, 0x86, 0x2c, 0xd4, 0x78, 0x2f, 0xa0, 0xca, 0x82, 0xc4, 0xaa, 0xe3, 0x48, 0xa3, 0xfd,
-	0x55, 0x0e, 0x46, 0x9b, 0x5e, 0xef, 0x83, 0x57, 0x68, 0x60, 0xbf, 0x8f, 0xbe, 0xff, 0x7e, 0x17,
-	0x23, 0x75, 0x02, 0x15, 0x33, 0xe2, 0x4f, 0xf2, 0x29, 0x4c, 0xb2, 0xae, 0x65, 0x19, 0xd4, 0xb3,
-	0x82, 0x2b, 0x5f, 0xac, 0x2d, 0x2e, 0x67, 0x51, 0xaf, 0x0a, 0x71, 0x3d, 0x96, 0x6a, 0x7f, 0x9d,
-	0x03, 0x82, 0xe7, 0x4f, 0x47, 0x1c, 0x61, 0x3b, 0x4e, 0xc8, 0x4d, 0xcf, 0xa2, 0x1f, 0xdc, 0xfb,
-	0x17, 0xb0, 0xe8, 0x4a, 0x0a, 0x43, 0x3d, 0x9d, 0x22, 0x8f, 0xf1, 0x7b, 0x34, 0x60, 0x6a, 0x1d,
-	0xe7, 0x14, 0x40, 0x66, 0x70, 0x54, 0xff, 0x9c, 0x06, 0x8c, 0x3c, 0x81, 0x99, 0x61, 0xa6, 0x6a,
-	0x34, 0x64, 0xd0, 0x4a, 0xfb, 0x06, 0x0a, 0x62, 0x3b, 0x1c, 0x84, 0x9d, 0x5b, 0xd8, 0x07, 0xbf,
-	0xce, 0xc1, 0x84, 0x38, 0xeb, 0x71, 0x2b, 0x7c, 0x30, 0x5f, 0x2a, 0x28, 0xc7, 0x32, 0x41, 0x99,
-	0x8d, 0xf2, 0xf1, 0xfe, 0x28, 0x1f, 0xec, 0xc7, 0x0b, 0x28, 0xbf, 0xf6, 0x5d, 0xc7, 0x3b, 0x7b,
-	0x57, 0x4f, 0x94, 0xe9, 0x48, 0x62, 0xfa, 0xf7, 0x13, 0x00, 0x3b, 0xf4, 0xdc, 0xb1, 0x68, 0xc3,
-	0x6b, 0xe3, 0x7e, 0x38, 0xa7, 0x9e, 0xcd, 0x02, 0x95, 0x91, 0x54, 0x4b, 0xe4, 0x96, 0x2e, 0xb3,
-	0xa9, 0xab, 0xce, 0x55, 0xd9, 0x20, 0x3f, 0x80, 0xda, 0xa9, 0x19, 0xd8, 0x17, 0x66, 0x40, 0x8d,
-	0x73, 0x1a, 0x88, 0xc7, 0x01, 0x95, 0x96, 0x26, 0x23, 0xf9, 0x1b, 0x29, 0x16, 0xd0, 0xb6, 0x13,
-	0x74, 0x33, 0xd0, 0x31, 0x09, 0x8d, 0xe4, 0x11, 0x74, 0x19, 0x26, 0x6c, 0xec, 0x91, 0xe8, 0x7f,
-	0x4d, 0x26, 0x12, 0x29, 0x68, 0xd8, 0x62, 0xc5, 0x95, 0x32, 0x1b, 0xf1, 0x53, 0x88, 0x23, 0x52,
-	0x97, 0x0e, 0x77, 0xb2, 0x0e, 0x33, 0x7e, 0x40, 0xcf, 0x1d, 0xd6, 0x0b, 0xdd, 0x2b, 0xc3, 0x62,
-	0x9e, 0x47, 0x2d, 0x4e, 0x65, 0x91, 0x53, 0xd4, 0xa7, 0x13, 0xdd, 0x76, 0xa4, 0x12, 0x3d, 0x10,
-	0xe5, 0xb7, 0x98, 0xef, 0x10, 0xab, 0xfb, 0x82, 0x5e, 0xf4, 0x99, 0x77, 0x24, 0xda, 0xe4, 0x3e,
-	0x00, 0xa7, 0xd6, 0xa9, 0xc7, 0x5c, 0xd6, 0xb9, 0x8a, 0x0e, 0xdf, 0x44, 0x42, 0x56, 0xe4, 0xf3,
-	0x93, 0x63, 0xcb, 0x67, 0x60, 0x95, 0x70, 0x00, 0xd7, 0x1c, 0x1f, 0x69, 0xc9, 0x5d, 0x00, 0x85,
-	0xa0, 0xea, 0x49, 0xb0, 0xa0, 0x17, 0x51, 0x5f, 0xf7, 0x6c, 0xf2, 0x08, 0xaa, 0xa6, 0xeb, 0x32,
-	0x2b, 0x61, 0x90, 0x99, 0xb1, 0x8c, 0xd2, 0x88, 0x63, 0x05, 0xca, 0x31, 0x8a, 0x7a, 0x51, 0x9a,
-	0x04, 0x85, 0x11, 0x3c, 0x8f, 0xa1, 0x96, 0x44, 0x91, 0x62, 0x02, 0x44, 0x55, 0xe3, 0x58, 0x92,
-	0x5c, 0x8f, 0xa0, 0x9a, 0x42, 0x52, 0xf5, 0xd0, 0x54, 0xd0, 0xcb, 0x31, 0x4e, 0xf0, 0x69, 0x50,
-	0x51, 0xc9, 0x55, 0x91, 0x55, 0x10, 0x54, 0x92, 0x29, 0x56, 0x32, 0xdd, 0x87, 0x52, 0x84, 0xa1,
-	0xea, 0xb9, 0xa2, 0x20, 0xdf, 0x96, 0x48, 0x8e, 0xaf, 0x21, 0x1f, 0x98, 0x5e, 0x87, 0x86, 0x0b,
-	0x93, 0x2b, 0xa3, 0x8f, 0x4b, 0x1b, 0x8f, 0x93, 0xb7, 0x13, 0x71, 0x0c, 0xaa, 0x3f, 0x75, 0x1a,
-	0xb2, 0x5e, 0x60, 0x51, 0x1d, 0xf1, 0xba, 0xb2, 0x5b, 0xfa, 0xe3, 0x31, 0x98, 0x19, 0x06, 0x20,
-	0x8b, 0xd1, 0x4b, 0x35, 0x3b, 0x5c, 0xc8, 0xad, 0x8c, 0x3e, 0x2e, 0xa8, 0x37, 0x67, 0x76, 0xff,
-	0x8a, 0x8d, 0x0c, 0xac, 0xd8, 0x36, 0x8c, 0xfb, 0x8c, 0xb9, 0xe1, 0xc2, 0x28, 0x76, 0xea, 0xf3,
-	0xf7, 0xed, 0xd4, 0xea, 0x11, 0x63, 0xae, 0x2e, 0x6d, 0x97, 0xfe, 0x73, 0x04, 0xc6, 0x44, 0x9b,
-	0xfc, 0x56, 0xea, 0x48, 0xaf, 0x6e, 0x3c, 0xfb, 0x20, 0x32, 0xfc, 0x47, 0x1c, 0x98, 0xaa, 0x14,
-	0x38, 0x86, 0x42, 0x78, 0x6a, 0x06, 0x8e, 0xd7, 0xc1, 0x6e, 0x57, 0x37, 0x5e, 0x7c, 0x18, 0xdd,
-	0xb1, 0x34, 0x46, 0xc6, 0x88, 0x09, 0xeb, 0x04, 0x5c, 0xc0, 0x51, 0x55, 0x27, 0xe0, 0xd2, 0xd5,
-	0x60, 0x94, 0x7a, 0x51, 0xed, 0x20, 0xfe, 0xd4, 0xb6, 0xa0, 0x18, 0x75, 0x87, 0x00, 0xe4, 0x45,
-	0x89, 0xd3, 0xd8, 0xa9, 0xdd, 0x21, 0x65, 0x28, 0x6e, 0xed, 0xef, 0x37, 0xb7, 0x45, 0x2b, 0x47,
-	0xaa, 0x00, 0xbb, 0xf5, 0x83, 0xa3, 0xa6, 0xde, 0x12, 0xed, 0x11, 0x52, 0x82, 0xc2, 0xab, 0xfd,
-	0xe6, 0x5b, 0xd1, 0x18, 0xd5, 0x4e, 0xa1, 0x94, 0xea, 0x02, 0x99, 0x03, 0xb2, 0x53, 0xdf, 0x11,
-	0xf5, 0x57, 0x7d, 0xc7, 0x38, 0xaa, 0xeb, 0x46, 0xe3, 0xb0, 0xf5, 0xaa, 0x76, 0x87, 0x3c, 0x80,
-	0xe5, 0xe3, 0xbd, 0x2d, 0xbd, 0xbe, 0x63, 0xbc, 0xfc, 0x99, 0xb1, 0xb5, 0xbf, 0x8f, 0x72, 0xfc,
-	0xa3, 0x55, 0xdf, 0xde, 0xab, 0xe5, 0xc8, 0x0a, 0xdc, 0x1d, 0x02, 0x38, 0xde, 0x3a, 0xa8, 0x4b,
-	0xc4, 0x88, 0xf6, 0xfb, 0xa3, 0x00, 0xdb, 0xae, 0x19, 0x86, 0x4e, 0xdb, 0xa1, 0x01, 0xa6, 0x5c,
-	0x83, 0xfb, 0x71, 0x02, 0x1c, 0x67, 0x2d, 0xdf, 0xb1, 0xc9, 0x34, 0x8c, 0x33, 0xe3, 0x3c, 0x4e,
-	0xc4, 0x63, 0xec, 0x8d, 0x83, 0xe9, 0xd9, 0x91, 0x58, 0x35, 0x21, 0x4e, 0x84, 0x75, 0x10, 0x2b,
-	0xa7, 0x64, 0xcc, 0x11, 0xd8, 0x79, 0x28, 0x30, 0xc3, 0x3f, 0x71, 0x78, 0xa8, 0xf2, 0x72, 0x9e,
-	0x1d, 0x89, 0x16, 0xa6, 0x5c, 0xa5, 0x50, 0x15, 0x86, 0x23, 0x15, 0x8b, 0x50, 0xa4, 0xfc, 0x54,
-	0x56, 0x45, 0x72, 0xab, 0x17, 0x28, 0x3f, 0x8d, 0x8a, 0x22, 0x3b, 0xe4, 0x46, 0xd7, 0xb4, 0x70,
-	0x8b, 0x97, 0xf5, 0xbc, 0x1d, 0xf2, 0x03, 0xd3, 0x12, 0x8a, 0x30, 0xb0, 0x50, 0x31, 0x21, 0x15,
-	0x61, 0x60, 0x09, 0x85, 0x08, 0x72, 0x5f, 0xbe, 0x99, 0x56, 0x7b, 0xb9, 0xe0, 0xf8, 0x47, 0xf8,
-	0x7e, 0x7c, 0x16, 0x84, 0xb5, 0xe1, 0xf8, 0x6a, 0xf3, 0x8e, 0xdb, 0x21, 0x6f, 0xf8, 0x42, 0x2c,
-	0xa8, 0x1c, 0x5f, 0xe5, 0xb1, 0xf1, 0x30, 0xb0, 0x1a, 0xbe, 0x20, 0x12, 0x62, 0xb1, 0xbb, 0xd5,
-	0x3e, 0x16, 0x1e, 0x45, 0x82, 0x13, 0x2a, 0x41, 0x84, 0x2a, 0xb9, 0x81, 0x45, 0x2f, 0x51, 0xb5,
-	0x02, 0x65, 0xff, 0x8c, 0x1b, 0xdc, 0xec, 0xc8, 0xf1, 0x4c, 0xca, 0xad, 0xe4, 0x9f, 0xf1, 0x96,
-	0x89, 0x2b, 0xac, 0xfd, 0x7a, 0x14, 0x26, 0x44, 0xbd, 0xcf, 0xbc, 0xed, 0x2e, 0xa6, 0x0c, 0xd3,
-	0xb6, 0x0d, 0xd6, 0xe3, 0x34, 0x10, 0x56, 0xb8, 0x18, 0x45, 0xbd, 0x64, 0xda, 0x76, 0x53, 0xc8,
-	0x5a, 0x66, 0x47, 0xa4, 0xa9, 0x80, 0x76, 0xd9, 0x39, 0x4d, 0xc1, 0x46, 0x64, 0xb9, 0x21, 0xe5,
-	0x31, 0x72, 0x05, 0xca, 0x3c, 0x30, 0x7d, 0x83, 0x33, 0xe3, 0x94, 0x85, 0x32, 0x7c, 0x8b, 0x3a,
-	0x08, 0x59, 0x8b, 0xed, 0xb1, 0x90, 0x93, 0x1f, 0x01, 0x09, 0x68, 0xd7, 0x0c, 0xce, 0x14, 0x97,
-	0x5c, 0x8f, 0x31, 0xc4, 0xd5, 0xa4, 0x06, 0xd9, 0xe4, 0xca, 0x24, 0x68, 0xc7, 0xf3, 0x62, 0xf4,
-	0x78, 0x1a, 0xdd, 0x10, 0x0a, 0x89, 0x56, 0x63, 0x91, 0x50, 0xd1, 0xc9, 0x7c, 0x3c, 0x16, 0x44,
-	0x65, 0xc7, 0x92, 0xc0, 0x0a, 0xe9, 0xb1, 0xc4, 0xc8, 0x55, 0x98, 0xe6, 0x81, 0xe9, 0x85, 0xae,
-	0xc9, 0xd3, 0xe0, 0x22, 0x82, 0xa7, 0x62, 0xd5, 0x70, 0x7c, 0x32, 0x51, 0x13, 0x7d, 0xf8, 0x68,
-	0xae, 0xb4, 0xbf, 0xc9, 0x41, 0x5e, 0xae, 0x03, 0x79, 0x04, 0xa3, 0x56, 0x37, 0x7a, 0x91, 0x4c,
-	0x92, 0x77, 0xd3, 0xd1, 0x2a, 0xe9, 0x42, 0x3d, 0x7c, 0x67, 0xa4, 0xa2, 0x7d, 0x34, 0x13, 0xed,
-	0xc9, 0xf6, 0x1a, 0xeb, 0xdb, 0x5e, 0x72, 0xcb, 0x8c, 0x67, 0xb7, 0xcc, 0xf0, 0x9d, 0x91, 0xec,
-	0xbb, 0x42, 0x6a, 0xdf, 0x69, 0xff, 0x90, 0x87, 0xb1, 0x57, 0x2e, 0xbb, 0xc0, 0x83, 0xd0, 0xb2,
-	0x68, 0x18, 0x1a, 0xe9, 0x62, 0x66, 0x52, 0x2f, 0x4b, 0x69, 0x63, 0x58, 0x71, 0x35, 0x39, 0xf8,
-	0x00, 0x51, 0x92, 0x62, 0xf9, 0x00, 0xd1, 0xf7, 0x84, 0x90, 0x8f, 0x9f, 0x10, 0x3e, 0x83, 0xa9,
-	0xf0, 0xaa, 0xdb, 0xa5, 0x3c, 0x70, 0x2c, 0x23, 0x82, 0x10, 0x84, 0x4c, 0xc6, 0x8a, 0x57, 0x12,
-	0xbb, 0x0c, 0x78, 0xa4, 0xc9, 0x3d, 0x20, 0x8b, 0x98, 0xa2, 0x10, 0xe0, 0xa6, 0x5e, 0x84, 0x62,
-	0x74, 0x30, 0xe3, 0x16, 0x9d, 0xd4, 0x0b, 0xea, 0x50, 0x26, 0x9f, 0xc0, 0xa4, 0x47, 0xf9, 0x05,
-	0xc3, 0x88, 0x93, 0x23, 0x1a, 0x47, 0x44, 0x45, 0x89, 0x1b, 0xf1, 0x73, 0x5e, 0xaa, 0xfe, 0xcb,
-	0x23, 0x24, 0x55, 0xff, 0x7d, 0x01, 0x60, 0xc5, 0x99, 0x4e, 0xbd, 0x48, 0x9e, 0x8e, 0xd7, 0x35,
-	0x49, 0x82, 0x7a, 0x0a, 0x46, 0x3e, 0x85, 0xbc, 0x89, 0x2b, 0xae, 0x5e, 0x10, 0x4f, 0xf6, 0x05,
-	0x82, 0xae, 0xd4, 0x64, 0x09, 0x8a, 0x7e, 0xe0, 0xb0, 0xc0, 0xe1, 0x57, 0x18, 0x5e, 0x93, 0x7a,
-	0xdc, 0x4e, 0x3d, 0x2d, 0x95, 0x33, 0x4f, 0x4b, 0xa9, 0x4a, 0xb6, 0x92, 0xa9, 0x64, 0x17, 0xa1,
-	0xd8, 0x09, 0x58, 0xcf, 0x17, 0xe3, 0x50, 0xb9, 0x04, 0xdb, 0x72, 0x32, 0xd2, 0x1f, 0xe7, 0x04,
-	0x62, 0x12, 0x11, 0x15, 0x21, 0x3e, 0x92, 0xd2, 0x86, 0x4d, 0x3e, 0x86, 0x6a, 0x40, 0x7d, 0x57,
-	0x3c, 0x65, 0x52, 0x5c, 0x18, 0x2c, 0x09, 0x8b, 0x7a, 0x25, 0x96, 0x62, 0xb0, 0xec, 0xc1, 0xa4,
-	0x88, 0x31, 0x91, 0x1c, 0xd4, 0x4c, 0x2d, 0x4c, 0xe1, 0x69, 0xbe, 0x92, 0xf9, 0x8c, 0xb3, 0x2a,
-	0x42, 0xaf, 0xc5, 0x76, 0x25, 0xa4, 0xee, 0xf1, 0xe0, 0x4a, 0xaf, 0xf8, 0x69, 0x19, 0xa9, 0x27,
-	0xd5, 0x10, 0x67, 0x86, 0x49, 0xc3, 0x85, 0x69, 0x24, 0x7a, 0x90, 0x25, 0x52, 0xf0, 0x16, 0xdb,
-	0xa2, 0xa1, 0xe4, 0x89, 0xca, 0x25, 0x14, 0x2d, 0x7d, 0x0d, 0x64, 0xd0, 0x97, 0x38, 0x65, 0xcf,
-	0xe8, 0x95, 0x3a, 0x94, 0xc4, 0x9f, 0xe2, 0x34, 0x3e, 0x37, 0xdd, 0x1e, 0x8d, 0x9e, 0x0d, 0xb0,
-	0xf1, 0xd5, 0xc8, 0xf3, 0xdc, 0xd2, 0x4f, 0x61, 0x6a, 0xc0, 0xc9, 0xbb, 0x08, 0x8a, 0x29, 0x02,
-	0xad, 0x05, 0xe5, 0x4c, 0x25, 0xbc, 0x0c, 0x13, 0xb2, 0x9c, 0x8f, 0xf6, 0x52, 0x59, 0x2f, 0x4a,
-	0x41, 0xc3, 0x16, 0x4f, 0x7d, 0x4a, 0x19, 0xfa, 0xd4, 0x72, 0xda, 0x8e, 0xa5, 0x1e, 0x13, 0xaa,
-	0x52, 0x7c, 0xac, 0xa4, 0xda, 0x7f, 0x95, 0xa0, 0x9a, 0xfd, 0x96, 0x76, 0xfd, 0xf3, 0xc6, 0x22,
-	0x14, 0x83, 0x4b, 0xe3, 0xe4, 0x8a, 0xd3, 0x10, 0xd9, 0xf2, 0x7a, 0x21, 0xb8, 0x7c, 0x29, 0x9a,
-	0x22, 0xc8, 0x83, 0x4b, 0xc3, 0xc7, 0x07, 0x96, 0x50, 0x6d, 0xc6, 0x89, 0xe0, 0x52, 0x3e, 0xc1,
-	0x84, 0x98, 0x4a, 0x2f, 0x8d, 0x9e, 0x65, 0x8a, 0xa3, 0x48, 0x81, 0xc6, 0x10, 0x54, 0x0d, 0x2e,
-	0x5f, 0x0b, 0x71, 0x16, 0xd9, 0xcd, 0x20, 0xc7, 0x23, 0xe4, 0xc1, 0x20, 0xf2, 0x24, 0x83, 0xcc,
-	0x47, 0xc8, 0x97, 0x83, 0x48, 0xf9, 0x82, 0x37, 0x42, 0x16, 0x22, 0x24, 0xbe, 0xa2, 0x8d, 0x90,
-	0xcb, 0x30, 0x11, 0x5c, 0x1a, 0xed, 0xc0, 0xec, 0xd2, 0x10, 0x1f, 0x42, 0xf2, 0x7a, 0x31, 0xb8,
-	0x7c, 0x85, 0x6d, 0x71, 0x62, 0xc5, 0x4a, 0xe3, 0xd9, 0x53, 0x95, 0x4f, 0x20, 0xd2, 0x3f, 0x7b,
-	0x4a, 0x3e, 0x45, 0x47, 0x11, 0x62, 0xd3, 0x58, 0xdf, 0xf8, 0x12, 0x1f, 0x4c, 0xf2, 0x7a, 0x25,
-	0x46, 0x6d, 0xae, 0x6f, 0x7c, 0x49, 0x7e, 0x00, 0x53, 0x09, 0x70, 0x7d, 0xe3, 0xb9, 0xb1, 0xb1,
-	0xb9, 0xb9, 0x30, 0x13, 0x75, 0x49, 0x22, 0xd7, 0x37, 0x9e, 0x6f, 0x6c, 0x6e, 0x66, 0xa1, 0x1b,
-	0x9b, 0xcf, 0x8c, 0xcd, 0xf5, 0xf5, 0x85, 0xd9, 0x2c, 0x74, 0x63, 0xf3, 0xd9, 0xe6, 0xfa, 0x3a,
-	0xf9, 0x21, 0x90, 0x04, 0xba, 0xb9, 0xbe, 0x61, 0xac, 0x3f, 0xd9, 0xf8, 0x62, 0x61, 0x4e, 0xa6,
-	0xbd, 0x08, 0xbb, 0xb9, 0xbe, 0x21, 0xc4, 0xe4, 0x73, 0x98, 0x4e, 0x75, 0xe1, 0xc9, 0xc6, 0x53,
-	0x63, 0x7d, 0x73, 0xfd, 0xf9, 0xc2, 0x3c, 0xa2, 0x6b, 0x71, 0x27, 0x9e, 0x6c, 0x3c, 0x15, 0xf2,
-	0x3e, 0xf8, 0xe6, 0xfa, 0x0b, 0x63, 0xe3, 0xc9, 0xd3, 0x2f, 0x17, 0x16, 0xfa, 0xe0, 0x9b, 0xeb,
-	0x2f, 0x84, 0x3c, 0x0b, 0xdf, 0x78, 0xf2, 0xf4, 0xb9, 0xf1, 0xf4, 0xc9, 0x8b, 0xcd, 0x85, 0xc5,
-	0x2c, 0x5c, 0x28, 0x84, 0x3c, 0x0b, 0x7f, 0xfa, 0xe4, 0xc5, 0x33, 0xe3, 0xc5, 0xc6, 0xfa, 0xb3,
-	0x85, 0xa5, 0x2c, 0x5c, 0x28, 0x84, 0x9c, 0xac, 0xc1, 0x4c, 0x02, 0x7f, 0xb1, 0xb1, 0xfe, 0xa5,
-	0xb1, 0xfe, 0xec, 0x8b, 0xe7, 0x5f, 0x2c, 0x2c, 0x23, 0x7e, 0x2a, 0xc2, 0x0b, 0x0d, 0x2a, 0xc4,
-	0x71, 0x1f, 0x5c, 0x1a, 0x56, 0x60, 0xc9, 0x28, 0x08, 0x31, 0x7d, 0xe5, 0xf5, 0x52, 0x70, 0xb9,
-	0x1d, 0x58, 0x18, 0x01, 0x58, 0xda, 0xf1, 0x28, 0xba, 0x8b, 0x32, 0xba, 0x79, 0x12, 0xdd, 0x3c,
-	0x89, 0xee, 0x09, 0x19, 0xdd, 0x3c, 0x1d, 0xdd, 0xbc, 0x3f, 0xba, 0x41, 0xae, 0x10, 0x1f, 0x88,
-	0x6e, 0xde, 0x1f, 0xdd, 0xa5, 0x08, 0x79, 0x30, 0x88, 0xcc, 0x46, 0x77, 0x39, 0x42, 0xbe, 0x1c,
-	0x44, 0x66, 0xa3, 0xbb, 0x12, 0x21, 0xfb, 0xa3, 0x9b, 0xc7, 0xd1, 0x7d, 0x57, 0x46, 0x37, 0x4f,
-	0x45, 0x37, 0x4f, 0x47, 0xf7, 0x3d, 0x19, 0xdd, 0x3c, 0x13, 0xdd, 0xbc, 0x3f, 0xba, 0xef, 0xcb,
-	0xe8, 0xe6, 0xfd, 0xd1, 0xcd, 0x07, 0xa2, 0xfb, 0x41, 0xd4, 0xa5, 0xfe, 0xe8, 0xe6, 0x03, 0xd1,
-	0xbd, 0x92, 0x85, 0x26, 0xd1, 0xcd, 0x07, 0xa3, 0xfb, 0xa1, 0x8c, 0x6e, 0x3e, 0x18, 0xdd, 0x7c,
-	0x48, 0x74, 0x6b, 0x32, 0xa0, 0xf8, 0x90, 0xe8, 0xe6, 0x43, 0xa2, 0xfb, 0xa3, 0x3e, 0x78, 0x2a,
-	0xba, 0xf9, 0x90, 0xe8, 0x7e, 0x94, 0x85, 0xa7, 0xa3, 0x9b, 0x0f, 0x89, 0xee, 0x8f, 0xb3, 0xf0,
-	0x74, 0x74, 0xf3, 0x61, 0xd1, 0xfd, 0x89, 0x8c, 0x6e, 0x3e, 0x10, 0xdd, 0xf7, 0x00, 0x4e, 0x1c,
-	0x3f, 0x0a, 0xed, 0x49, 0x19, 0x9e, 0x27, 0x8e, 0xaf, 0x02, 0xfb, 0x2e, 0x4c, 0x70, 0xa7, 0x4b,
-	0x43, 0x6e, 0x76, 0x7d, 0x3c, 0x6e, 0x0b, 0x7a, 0x22, 0xd0, 0xfe, 0xb5, 0x80, 0xdf, 0x37, 0xde,
-	0x27, 0xff, 0x5f, 0xf3, 0xe6, 0xeb, 0x63, 0xa8, 0xfa, 0x2c, 0x74, 0xb8, 0x73, 0x4e, 0xe5, 0x37,
-	0x77, 0x95, 0xff, 0x2b, 0x91, 0x14, 0xbf, 0xa1, 0x0b, 0x98, 0x47, 0x3b, 0x66, 0x0a, 0x26, 0x4f,
-	0x80, 0x4a, 0x24, 0x95, 0xb0, 0xe7, 0xb0, 0x60, 0x53, 0xd7, 0xe9, 0x3a, 0xa2, 0x2a, 0xee, 0x3a,
-	0x61, 0x68, 0xd8, 0x94, 0x53, 0x2b, 0x7e, 0x71, 0x99, 0xd7, 0xe7, 0x62, 0xfd, 0x81, 0x13, 0x86,
-	0x3b, 0x91, 0xb6, 0x6f, 0x1a, 0xf2, 0xfd, 0xd3, 0xb0, 0x0c, 0xa2, 0x61, 0xf4, 0x3c, 0x27, 0x4e,
-	0xff, 0xc5, 0x13, 0xc7, 0x7f, 0x2d, 0xda, 0x64, 0x03, 0x66, 0xdb, 0xd4, 0x32, 0x2c, 0x16, 0x04,
-	0xf8, 0xd2, 0xc8, 0x08, 0xaf, 0xba, 0x27, 0xcc, 0x8d, 0x32, 0xc1, 0x74, 0x9b, 0x5a, 0xdb, 0x91,
-	0xee, 0x58, 0xaa, 0xc8, 0x33, 0x98, 0x97, 0x36, 0x36, 0xbd, 0x60, 0x81, 0x1d, 0x26, 0xd6, 0x2a,
-	0x45, 0xcc, 0xa2, 0x95, 0xd2, 0xc6, 0xe6, 0xe4, 0x27, 0xb0, 0x9c, 0xb5, 0xeb, 0x79, 0xca, 0xd2,
-	0x3c, 0x71, 0xa9, 0xca, 0x1c, 0x8b, 0x69, 0xdb, 0xd7, 0x69, 0x00, 0xf9, 0x08, 0x2a, 0x19, 0x7b,
-	0x95, 0x41, 0xca, 0x69, 0x0b, 0xf1, 0x88, 0x91, 0x1d, 0x90, 0x1c, 0xb7, 0x4c, 0x21, 0x53, 0xe9,
-	0xe1, 0xc8, 0x09, 0xf8, 0x04, 0x26, 0x2f, 0x3b, 0xb4, 0x6b, 0x9c, 0xd1, 0xab, 0x68, 0x06, 0x65,
-	0x12, 0xa9, 0x08, 0xf1, 0x37, 0xf4, 0x2a, 0x99, 0x45, 0xc4, 0xb9, 0x2c, 0x8c, 0xb2, 0x68, 0x51,
-	0x08, 0xf6, 0x59, 0x88, 0x24, 0xa2, 0x0a, 0x70, 0x99, 0xd9, 0x0d, 0x25, 0x8b, 0x8a, 0xc6, 0x4a,
-	0x70, 0x79, 0x84, 0x52, 0x64, 0x51, 0x07, 0x95, 0xc2, 0x79, 0xcc, 0x33, 0x1c, 0xdb, 0xa5, 0x18,
-	0x9a, 0x78, 0x50, 0x49, 0xe8, 0x21, 0xf3, 0x1a, 0xb6, 0x8b, 0xe5, 0x68, 0x70, 0x89, 0x57, 0x2d,
-	0xd4, 0x89, 0x9c, 0x0f, 0x2e, 0x9b, 0x5d, 0xcb, 0x21, 0xcf, 0x61, 0x51, 0x29, 0xa2, 0xbc, 0x97,
-	0x64, 0x78, 0x75, 0x38, 0xcf, 0x4a, 0xa8, 0x4a, 0x80, 0x51, 0xae, 0xcf, 0x14, 0x32, 0xd3, 0x37,
-	0x15, 0x32, 0x33, 0xfd, 0x85, 0x4c, 0xfa, 0x90, 0x98, 0xbd, 0xe9, 0x90, 0x98, 0xeb, 0x3f, 0x24,
-	0x1e, 0x42, 0xf9, 0x84, 0x06, 0x46, 0x40, 0x45, 0x09, 0x48, 0x6d, 0x75, 0xd0, 0x96, 0x4e, 0x68,
-	0xa0, 0x2b, 0x11, 0x79, 0x00, 0x25, 0xd7, 0xb2, 0x3b, 0xd1, 0xfc, 0xcb, 0xb3, 0x15, 0x84, 0x48,
-	0x4d, 0xbe, 0xe8, 0x9c, 0xed, 0x44, 0xfa, 0x45, 0xd5, 0x39, 0xdb, 0x19, 0xb6, 0xd1, 0x97, 0xfa,
-	0x37, 0xfa, 0x3f, 0xe7, 0xb0, 0x02, 0x7d, 0xdf, 0x62, 0xef, 0x1d, 0x1f, 0x67, 0xde, 0x51, 0xf0,
-	0xa5, 0x67, 0x78, 0x6c, 0x60, 0x86, 0x53, 0xf3, 0x34, 0xde, 0x3f, 0x4f, 0xe9, 0x19, 0xce, 0x67,
-	0x67, 0xf8, 0xe6, 0xf1, 0xfd, 0x6d, 0x0e, 0xaa, 0xd9, 0xbb, 0x5d, 0xe9, 0xe7, 0xc3, 0x5c, 0xe6,
-	0x0b, 0xd2, 0xf7, 0xaf, 0x64, 0xbf, 0x7f, 0x95, 0x70, 0x73, 0x1a, 0xfe, 0x1a, 0x2a, 0x99, 0xcb,
-	0x60, 0xd7, 0x2f, 0xcc, 0x1c, 0xe4, 0x43, 0x6e, 0xf2, 0x5e, 0xa8, 0xde, 0x7d, 0xaa, 0x96, 0xf6,
-	0x2d, 0x4c, 0x0f, 0xb9, 0x14, 0xf6, 0xc1, 0xd9, 0x3c, 0xa1, 0x1f, 0xcd, 0xd0, 0xff, 0xe5, 0x08,
-	0x7e, 0x1e, 0xea, 0xbf, 0xdc, 0xf6, 0x3d, 0x3e, 0x86, 0xbb, 0x2c, 0x34, 0x32, 0x2e, 0x26, 0x5c,
-	0x16, 0x1e, 0xa3, 0x40, 0xaa, 0x4f, 0x22, 0xf5, 0x58, 0xa4, 0x3e, 0x51, 0xea, 0xc7, 0x50, 0x73,
-	0x99, 0x6f, 0xc9, 0x73, 0x41, 0x81, 0xe4, 0x3b, 0xfb, 0xaa, 0x90, 0x8b, 0xf3, 0x40, 0x21, 0xd7,
-	0x61, 0x56, 0x21, 0x55, 0x46, 0x88, 0xe0, 0x79, 0xf9, 0x69, 0x41, 0xc2, 0x65, 0x3e, 0x50, 0x26,
-	0x62, 0xfb, 0xb1, 0xb6, 0x13, 0x01, 0x0b, 0xf2, 0x75, 0x98, 0x10, 0x29, 0xc0, 0x43, 0x28, 0x8b,
-	0xcc, 0x14, 0x23, 0x8a, 0x88, 0x28, 0xa1, 0x4c, 0x42, 0x34, 0x0a, 0xcb, 0x37, 0x5c, 0x85, 0xbb,
-	0xb5, 0xc5, 0xf8, 0xd3, 0x1c, 0x2c, 0x5d, 0x7f, 0x2f, 0xee, 0xb6, 0xdc, 0x90, 0x2f, 0x60, 0xce,
-	0xf1, 0xce, 0x69, 0x10, 0x52, 0x43, 0x3c, 0x8d, 0xcb, 0x79, 0x0c, 0x4c, 0x1e, 0x7d, 0x92, 0x9b,
-	0x56, 0xda, 0x97, 0x8e, 0xbc, 0xe9, 0xa2, 0x9b, 0x9c, 0x6a, 0xbf, 0x91, 0x7d, 0xbb, 0xe6, 0x5a,
-	0xdd, 0xad, 0xf5, 0x6d, 0x06, 0xc6, 0x93, 0x2a, 0xa2, 0xa0, 0xcb, 0x86, 0x60, 0xf7, 0xe8, 0x85,
-	0x41, 0xbf, 0x8b, 0xde, 0x5a, 0xe5, 0x3d, 0x7a, 0x51, 0xff, 0xce, 0xd6, 0x4e, 0xe1, 0xfe, 0xcd,
-	0x97, 0xf2, 0x6e, 0x6d, 0x6d, 0xfe, 0x2c, 0x27, 0x63, 0xe0, 0x9a, 0x6b, 0x7a, 0xff, 0xb7, 0x8b,
-	0xf3, 0xab, 0x1c, 0x68, 0xef, 0xbe, 0xf2, 0xf7, 0xbf, 0xbb, 0x48, 0xda, 0x77, 0xb8, 0x16, 0x37,
-	0x5c, 0x0d, 0xfc, 0x60, 0xff, 0x0f, 0xb2, 0xd7, 0x5c, 0xe4, 0xeb, 0xcd, 0xf4, 0xcd, 0x95, 0x33,
-	0x78, 0xf8, 0xce, 0x7b, 0x7c, 0xb7, 0x16, 0x01, 0x2d, 0x20, 0xba, 0x3a, 0x94, 0x53, 0xec, 0xa2,
-	0x38, 0x8a, 0x0e, 0x6f, 0xc3, 0x62, 0x3d, 0x8f, 0xa3, 0x17, 0x51, 0x1c, 0x29, 0xf0, 0xb6, 0x10,
-	0x5e, 0x9b, 0xdf, 0xff, 0x24, 0x07, 0x0b, 0xd7, 0x5d, 0x14, 0xfc, 0xe0, 0xae, 0x6f, 0x41, 0x25,
-	0xe9, 0xcc, 0xb0, 0xab, 0xc1, 0x83, 0x03, 0xd8, 0xbb, 0xa3, 0x97, 0x82, 0x44, 0xfa, 0xb2, 0x80,
-	0x1f, 0x9e, 0x78, 0xa8, 0x1d, 0xc2, 0xdd, 0x9b, 0xae, 0x61, 0x7e, 0x68, 0xdf, 0xb4, 0x5f, 0xc2,
-	0xca, 0xbb, 0xae, 0x2c, 0xde, 0xda, 0x52, 0xfd, 0x12, 0x16, 0xaf, 0xbd, 0xb7, 0xf8, 0x7d, 0xce,
-	0xb6, 0x54, 0x79, 0x36, 0xda, 0x57, 0x9e, 0x69, 0x7f, 0x91, 0x83, 0xc7, 0xef, 0x7b, 0x89, 0xf1,
-	0xd6, 0x76, 0xe0, 0xe7, 0x40, 0xd2, 0x17, 0x2b, 0x55, 0xdf, 0xe4, 0x76, 0x9c, 0x4a, 0x69, 0x54,
-	0x1f, 0xbb, 0xf0, 0xd1, 0x7b, 0x5c, 0x77, 0xbc, 0xb5, 0xe9, 0x77, 0x31, 0x1b, 0xbd, 0xe3, 0xca,
-	0xe3, 0xad, 0x79, 0xfb, 0xa3, 0x1c, 0x7c, 0xf2, 0x7e, 0x97, 0x1f, 0x6f, 0x6d, 0xfa, 0x97, 0xa0,
-	0xd8, 0x77, 0x8d, 0x25, 0x6e, 0x6b, 0xff, 0x91, 0x83, 0xd2, 0x6e, 0xc0, 0x7a, 0xfe, 0x01, 0xc5,
-	0x17, 0xba, 0x0f, 0xa1, 0xec, 0x44, 0x77, 0x92, 0x22, 0xc7, 0x15, 0xfc, 0xc9, 0x87, 0x94, 0x35,
-	0x6c, 0xd2, 0x80, 0x6a, 0x02, 0xc1, 0x0f, 0x16, 0xf2, 0x43, 0x72, 0x72, 0x0b, 0x37, 0x45, 0xb8,
-	0x1a, 0xdf, 0x70, 0xc2, 0x2f, 0xc6, 0x15, 0x27, 0xdd, 0x24, 0xf7, 0xa1, 0x24, 0x9e, 0xe3, 0xa2,
-	0x02, 0x7f, 0x14, 0x9d, 0x89, 0x02, 0xff, 0x48, 0x16, 0xf8, 0xe9, 0x2f, 0x07, 0x63, 0xa8, 0x8c,
-	0xdb, 0xda, 0xff, 0x87, 0x4a, 0x86, 0x9b, 0x14, 0x60, 0xf4, 0xa8, 0x79, 0x58, 0xbb, 0x43, 0x6a,
-	0x50, 0xae, 0x1f, 0x35, 0x0f, 0x8d, 0xf5, 0x5d, 0xe3, 0x68, 0xab, 0xb5, 0x57, 0xcb, 0x91, 0x29,
-	0xa8, 0x48, 0xc9, 0x13, 0x25, 0x1a, 0xd1, 0xfe, 0x60, 0x04, 0xc6, 0xb1, 0x9f, 0x99, 0x2f, 0x0a,
-	0x72, 0xb8, 0xf1, 0x17, 0x85, 0x1f, 0x43, 0xc1, 0x62, 0xdd, 0xae, 0xa9, 0x7e, 0xfb, 0x30, 0x30,
-	0xc6, 0xf4, 0x48, 0xc3, 0x6d, 0x89, 0xd4, 0x23, 0x13, 0xb2, 0x0a, 0x85, 0xae, 0x54, 0xa9, 0x6b,
-	0x00, 0x33, 0xc3, 0x66, 0x48, 0x8f, 0x40, 0xa9, 0x0f, 0x2a, 0x63, 0x37, 0x7e, 0x50, 0xd1, 0xbe,
-	0x81, 0xe9, 0x21, 0x8e, 0xc9, 0x24, 0x94, 0xb6, 0x76, 0x76, 0x8c, 0x83, 0xfa, 0xc1, 0xcb, 0xba,
-	0x7e, 0x5c, 0xbb, 0x43, 0x08, 0x54, 0xf5, 0xfa, 0x41, 0xf3, 0x4d, 0x3d, 0x96, 0xe5, 0x04, 0xe8,
-	0xb8, 0xde, 0x8a, 0x05, 0x23, 0xda, 0xb7, 0x00, 0x6f, 0x4c, 0xb7, 0x47, 0x8f, 0xcc, 0xc0, 0xec,
-	0x92, 0xfb, 0x30, 0xca, 0xbc, 0x9e, 0xfa, 0xb4, 0x57, 0xce, 0xdc, 0xab, 0x16, 0x0a, 0xb2, 0x96,
-	0xfe, 0x34, 0x50, 0xdd, 0x58, 0x5c, 0x8d, 0x7f, 0xcc, 0xb4, 0x8a, 0x2c, 0x62, 0x25, 0x56, 0x71,
-	0xa9, 0x25, 0x4e, 0xfb, 0xbb, 0x11, 0xa8, 0x1e, 0x31, 0x4f, 0xbf, 0x3c, 0x62, 0x17, 0x34, 0xd8,
-	0x31, 0xb9, 0x79, 0x6b, 0x71, 0xad, 0x67, 0x0f, 0xdc, 0x31, 0xec, 0xd1, 0x7a, 0xea, 0xd7, 0x39,
-	0x69, 0xaf, 0xab, 0x7a, 0x18, 0x3a, 0x07, 0xd4, 0x0c, 0x7b, 0x01, 0x6e, 0xed, 0xe1, 0xb7, 0x4b,
-	0xd5, 0x9b, 0x6e, 0x5f, 0x58, 0x19, 0x5d, 0x6a, 0x7a, 0x86, 0x7d, 0xd2, 0xc5, 0x2a, 0x2e, 0xa7,
-	0x57, 0x03, 0xc9, 0x76, 0x40, 0x4d, 0x6f, 0xe7, 0xa4, 0x2b, 0xd2, 0xf6, 0xb5, 0x9c, 0x64, 0x06,
-	0x6a, 0x43, 0x6e, 0x9f, 0xde, 0x85, 0x85, 0xac, 0xd4, 0xd8, 0xa9, 0xef, 0x37, 0x0e, 0x1a, 0xad,
-	0xba, 0x5e, 0xcb, 0x91, 0x45, 0x98, 0xed, 0xd3, 0x6e, 0x6d, 0x6f, 0xd7, 0x8f, 0xc5, 0x22, 0x15,
-	0x60, 0xbc, 0xde, 0xf5, 0xf9, 0xd5, 0xc6, 0x9f, 0xcf, 0x40, 0xa1, 0x29, 0x07, 0x48, 0x76, 0x00,
-	0x76, 0x9c, 0xd0, 0x3c, 0x71, 0x69, 0xd3, 0xe5, 0xa4, 0x1a, 0x0f, 0x1c, 0x91, 0x4b, 0x7d, 0x6d,
-	0x6d, 0xee, 0x57, 0xff, 0xf4, 0x2f, 0xbf, 0x19, 0xa9, 0x69, 0xa5, 0xb5, 0xf3, 0xf5, 0x35, 0x65,
-	0xf7, 0x55, 0xee, 0x33, 0xf2, 0x0a, 0x4a, 0x3a, 0xa5, 0xde, 0xfb, 0xd2, 0xcc, 0x23, 0xcd, 0x94,
-	0x56, 0x16, 0x34, 0x91, 0xa1, 0xe0, 0xa9, 0x43, 0x49, 0x55, 0x53, 0xb4, 0xe9, 0xf5, 0x48, 0x26,
-	0x76, 0x06, 0x58, 0x16, 0x90, 0x85, 0x68, 0x15, 0xc1, 0x52, 0x97, 0xce, 0xbd, 0x9e, 0xa0, 0xd9,
-	0x83, 0x4a, 0x7c, 0xea, 0xbe, 0x07, 0xd1, 0x22, 0x12, 0x4d, 0x6b, 0xd5, 0xd4, 0xa8, 0x14, 0xd3,
-	0x36, 0x4c, 0xec, 0x50, 0x97, 0x7e, 0x70, 0x77, 0x62, 0x23, 0x41, 0xd2, 0x00, 0x50, 0x97, 0xfb,
-	0x9a, 0x3d, 0x4e, 0x6a, 0x99, 0x1f, 0x9a, 0x1d, 0x84, 0x9d, 0x9b, 0xfb, 0x93, 0x58, 0x0a, 0xaa,
-	0x26, 0x94, 0xe3, 0x9b, 0x7d, 0x82, 0x8c, 0x64, 0x2e, 0xf7, 0xa3, 0x78, 0x80, 0x6e, 0x19, 0xe9,
-	0x66, 0xb5, 0x1a, 0xd2, 0xa5, 0xac, 0x05, 0xe1, 0xef, 0xc0, 0x64, 0xfa, 0x8e, 0x9e, 0xe0, 0x4c,
-	0xee, 0x67, 0xa6, 0x35, 0x03, 0xb4, 0xf7, 0x91, 0x76, 0x41, 0x9b, 0x16, 0xb4, 0x7d, 0x1c, 0x82,
-	0xf9, 0x6b, 0x28, 0xbc, 0x72, 0xd9, 0xc5, 0x96, 0x6d, 0x93, 0x4a, 0xe6, 0x1b, 0xe5, 0xcd, 0x51,
-	0xa5, 0x6c, 0x64, 0x54, 0x81, 0x68, 0xe9, 0x78, 0x47, 0xe1, 0x5d, 0x24, 0x99, 0x49, 0x4b, 0xcc,
-	0x04, 0xcf, 0x31, 0x54, 0xe3, 0xdb, 0xaf, 0xdb, 0xa7, 0xd4, 0x3a, 0x1b, 0x08, 0xd0, 0x64, 0x1a,
-	0x63, 0xa0, 0x76, 0x0f, 0x09, 0xe7, 0x35, 0x22, 0x08, 0xb3, 0xf6, 0x82, 0xf4, 0x00, 0x4a, 0x32,
-	0xe6, 0x8e, 0x98, 0xd7, 0x68, 0xa7, 0x16, 0x22, 0x3e, 0x50, 0x06, 0xba, 0xb8, 0x84, 0x8c, 0x33,
-	0xda, 0x64, 0x12, 0xb0, 0x68, 0xac, 0x16, 0x56, 0x45, 0xde, 0xfb, 0xf3, 0x65, 0x16, 0x36, 0x6d,
-	0x2d, 0x08, 0x75, 0xa8, 0xec, 0x52, 0x9e, 0xba, 0x43, 0xd9, 0x3f, 0xe6, 0xe9, 0x21, 0x77, 0xb6,
-	0xb4, 0xbb, 0x48, 0x39, 0xa7, 0x4d, 0x09, 0xca, 0x8c, 0xbd, 0xe0, 0xfc, 0x29, 0xe4, 0x75, 0x7a,
-	0xc2, 0xd8, 0xbb, 0x77, 0xf8, 0x2c, 0xf2, 0x4c, 0x6a, 0x20, 0x77, 0xb8, 0xb0, 0x11, 0x04, 0xaf,
-	0x61, 0x6a, 0x9b, 0xb9, 0x2e, 0xb5, 0xd2, 0x6f, 0xee, 0xde, 0xc5, 0xb5, 0x82, 0x5c, 0x4b, 0xda,
-	0xac, 0xe0, 0x1a, 0x30, 0x17, 0xb4, 0x3f, 0x83, 0xda, 0x2e, 0xe5, 0xd9, 0x97, 0xff, 0xd9, 0xcd,
-	0x3a, 0xd7, 0xf7, 0x03, 0x3f, 0x85, 0xd2, 0x1e, 0x20, 0xf7, 0xa2, 0x36, 0xa3, 0xc6, 0x9b, 0xd1,
-	0x0a, 0xea, 0x33, 0x98, 0xd9, 0xa5, 0x7c, 0xf0, 0x75, 0xe3, 0xb0, 0x8d, 0x97, 0xfc, 0x62, 0x75,
-	0x00, 0xaf, 0x7d, 0x84, 0x8e, 0xee, 0x69, 0x0b, 0xca, 0xd1, 0x00, 0x42, 0x38, 0x0b, 0x60, 0x7e,
-	0x3b, 0xa0, 0x26, 0xa7, 0xad, 0xc0, 0x6c, 0xb7, 0x1d, 0xeb, 0xd8, 0x3a, 0xa5, 0x76, 0xcf, 0x15,
-	0xe7, 0xfa, 0x83, 0xd5, 0xcc, 0x6f, 0x86, 0x07, 0x00, 0x03, 0xb3, 0xf6, 0x09, 0x3a, 0x5c, 0xd1,
-	0x96, 0x71, 0xd6, 0x86, 0xb3, 0x2a, 0x9f, 0x72, 0xa7, 0xdc, 0xb6, 0xcf, 0x6b, 0x58, 0x85, 0xcf,
-	0x36, 0x4c, 0x67, 0x7a, 0xf4, 0xdb, 0x3d, 0xda, 0xa3, 0x21, 0x59, 0x1e, 0xea, 0x4f, 0x2a, 0x07,
-	0x7c, 0x69, 0xe8, 0xeb, 0xae, 0x36, 0x3f, 0x30, 0x3e, 0x69, 0xa0, 0xfc, 0x64, 0x7a, 0xf1, 0x3f,
-	0xf6, 0x33, 0x84, 0x4d, 0xf8, 0xf9, 0x7f, 0x50, 0x93, 0xdb, 0x39, 0x55, 0x78, 0x5f, 0xbf, 0xdd,
-	0x12, 0x90, 0x76, 0xe7, 0x49, 0x8e, 0x7c, 0x0b, 0xb3, 0x47, 0x34, 0x68, 0xb3, 0xa0, 0x8b, 0xf5,
-	0x58, 0xd3, 0xa7, 0x41, 0x3f, 0x03, 0x2a, 0x06, 0x7a, 0xf6, 0x08, 0x7b, 0x76, 0x5f, 0x5b, 0x14,
-	0x3d, 0x1b, 0x4a, 0x21, 0x0f, 0x9f, 0x92, 0x3c, 0x8c, 0x64, 0xa1, 0xfa, 0x2e, 0xd2, 0x4c, 0x8e,
-	0x4a, 0x19, 0x0a, 0xaa, 0xb7, 0x50, 0xda, 0xa5, 0xbc, 0x7e, 0xc9, 0xb1, 0x4a, 0x23, 0xc9, 0x88,
-	0x92, 0xda, 0x6f, 0x69, 0x3e, 0x55, 0xcc, 0xe9, 0x94, 0xf7, 0x02, 0x0f, 0x95, 0x61, 0x96, 0x38,
-	0x45, 0x23, 0x88, 0xbf, 0xc5, 0x1f, 0x41, 0xc9, 0x17, 0x02, 0xf8, 0x5e, 0xf6, 0x98, 0x72, 0x32,
-	0xb7, 0xaa, 0x7e, 0xff, 0x9e, 0x55, 0xdd, 0x9c, 0x1e, 0x06, 0x68, 0x04, 0xbd, 0x0f, 0x8b, 0xbb,
-	0x94, 0xef, 0x0f, 0xbf, 0xab, 0x9f, 0xcd, 0x13, 0xcb, 0xd9, 0x5f, 0xb0, 0x65, 0x7e, 0x41, 0xa0,
-	0x3d, 0x46, 0x4f, 0x9a, 0x76, 0x4f, 0x0d, 0x61, 0x38, 0xa3, 0xf0, 0x78, 0x0a, 0xb3, 0x43, 0xf5,
-	0x1f, 0xe2, 0x2d, 0xb3, 0xbc, 0x43, 0xd9, 0x84, 0xa7, 0x16, 0xa6, 0xf9, 0xa4, 0x4c, 0xed, 0xf3,
-	0x30, 0x7f, 0x4d, 0x25, 0x3b, 0x90, 0xe8, 0x13, 0xf5, 0x57, 0xb9, 0xcf, 0x5e, 0x7e, 0x0b, 0xcb,
-	0x2c, 0xe8, 0xa0, 0xad, 0xc5, 0x02, 0x7b, 0x55, 0xfe, 0xdf, 0x03, 0x11, 0xd7, 0xcb, 0xca, 0x1b,
-	0x6c, 0x8b, 0x1a, 0xb2, 0xb9, 0xdf, 0xfa, 0xf9, 0x5a, 0xc7, 0xe1, 0xa7, 0xbd, 0x93, 0x55, 0x8b,
-	0x75, 0xd7, 0x22, 0x93, 0x35, 0x69, 0xf2, 0xb9, 0xfa, 0xef, 0x0a, 0xce, 0x37, 0xd7, 0x3a, 0x2c,
-	0xfa, 0xaf, 0x13, 0x4e, 0xf2, 0x28, 0xfd, 0xe2, 0xbf, 0x03, 0x00, 0x00, 0xff, 0xff, 0xb0, 0xed,
-	0x77, 0x2e, 0x5a, 0x41, 0x00, 0x00,
+	// 5323 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5c, 0x4d, 0x70, 0x23, 0x49,
+	0x56, 0x6e, 0xd9, 0xb2, 0x24, 0x3f, 0x59, 0xb2, 0x9c, 0xfe, 0xb7, 0xfb, 0xc7, 0x5d, 0xf3, 0xd7,
+	0x3b, 0xbb, 0x63, 0xb7, 0xd5, 0xed, 0x9e, 0xee, 0xd9, 0x65, 0x77, 0xdc, 0xb6, 0xda, 0xd6, 0x8c,
+	0x6d, 0x99, 0xb2, 0xba, 0x9b, 0xdd, 0x8d, 0x89, 0xa2, 0x5c, 0x95, 0x92, 0x6b, 0x5d, 0xaa, 0xac,
+	0xa9, 0x4a, 0xf9, 0x87, 0xe3, 0x06, 0x0b, 0x17, 0x6e, 0x1b, 0x10, 0x01, 0x1c, 0x08, 0xe0, 0xca,
+	0x85, 0x1b, 0x11, 0xdc, 0xe0, 0xc0, 0x85, 0x1b, 0x67, 0x6e, 0x04, 0x17, 0x4e, 0x5c, 0x38, 0x11,
+	0x04, 0x91, 0x3f, 0xf5, 0x93, 0x2a, 0xd9, 0xdd, 0x1e, 0x0c, 0x5c, 0x3a, 0x9c, 0xef, 0x7d, 0xef,
+	0x7b, 0xf9, 0xf3, 0x32, 0xdf, 0xab, 0xaa, 0x54, 0xc3, 0xf2, 0x19, 0x71, 0xe9, 0x89, 0x69, 0xf8,
+	0x01, 0xa1, 0x24, 0x5c, 0x23, 0x3e, 0xf6, 0x88, 0x4b, 0x57, 0x79, 0x13, 0x15, 0x65, 0x73, 0xe9,
+	0x6e, 0x97, 0x90, 0xae, 0x8b, 0xd7, 0x4c, 0xdf, 0x59, 0x33, 0x3d, 0x8f, 0x50, 0x93, 0x3a, 0xc4,
+	0x0b, 0x05, 0x6c, 0x69, 0x45, 0xe5, 0xa0, 0xd8, 0x3a, 0x61, 0x7f, 0x77, 0x1c, 0x17, 0x4b, 0xc4,
+	0x7d, 0x15, 0x81, 0x2f, 0xa8, 0x61, 0x11, 0xaf, 0xe3, 0x74, 0xaf, 0xd4, 0x63, 0x2f, 0x4c, 0x3c,
+	0x68, 0xff, 0x98, 0x07, 0x68, 0x7a, 0xb6, 0x63, 0x71, 0xbf, 0x68, 0x1d, 0x8a, 0xc4, 0xa5, 0x86,
+	0xe3, 0xd9, 0x0b, 0xb9, 0x95, 0xdc, 0xa3, 0x72, 0x7d, 0x6e, 0x35, 0xea, 0x78, 0xcb, 0xa5, 0x09,
+	0x70, 0xf7, 0x8e, 0x5e, 0x20, 0x5c, 0x80, 0x9e, 0x42, 0xc9, 0xf1, 0x68, 0x87, 0xdb, 0x8c, 0x70,
+	0x9b, 0xf9, 0xd8, 0xa6, 0xe9, 0xd1, 0x8e, 0x62, 0x54, 0x74, 0x84, 0x04, 0x6d, 0x42, 0x85, 0x5b,
+	0x11, 0x1f, 0x07, 0xdc, 0x74, 0x94, 0x9b, 0x2e, 0x2b, 0xa6, 0x2d, 0x1f, 0x07, 0x8a, 0x79, 0xd9,
+	0x49, 0xa4, 0xe8, 0xc7, 0x30, 0x41, 0xbc, 0xbe, 0x61, 0x3b, 0xa1, 0xc5, 0x19, 0xf2, 0x9c, 0x61,
+	0x29, 0xe9, 0xb0, 0xd7, 0xdf, 0x76, 0x42, 0x4b, 0x21, 0x00, 0x12, 0x0b, 0xf9, 0x58, 0xbd, 0x3e,
+	0x37, 0x1d, 0x1b, 0x1c, 0xab, 0xd7, 0x1f, 0x18, 0x2b, 0x17, 0xb0, 0xb1, 0x92, 0x9e, 0xe5, 0x70,
+	0x9b, 0xc2, 0xc0, 0x58, 0x5b, 0x3d, 0xcb, 0x51, 0xc7, 0x4a, 0x84, 0x04, 0x3d, 0x85, 0xa2, 0x7f,
+	0x2a, 0x26, 0xb5, 0xc8, 0x8d, 0x16, 0x63, 0xa3, 0x43, 0xd3, 0x3a, 0xc5, 0x03, 0xf3, 0xea, 0x9f,
+	0xf2, 0x79, 0x7d, 0x0e, 0xe0, 0x93, 0x80, 0x1a, 0x21, 0x35, 0x69, 0xb8, 0x50, 0x1a, 0xf0, 0x76,
+	0x48, 0x02, 0x7a, 0xc4, 0x82, 0x25, 0xa4, 0x8e, 0x15, 0xee, 0xde, 0xd1, 0xc7, 0x7d, 0x29, 0x09,
+	0x99, 0x65, 0xc7, 0x25, 0xe7, 0xd2, 0x72, 0x7c, 0xc0, 0xf2, 0x95, 0x4b, 0xce, 0x55, 0xcb, 0x8e,
+	0x94, 0x84, 0xe8, 0x73, 0x18, 0x37, 0x5d, 0x33, 0xe8, 0xf1, 0xbe, 0x02, 0x37, 0x5c, 0x88, 0x0d,
+	0x37, 0x99, 0x46, 0xe9, 0x6a, 0xc9, 0x94, 0xa2, 0x97, 0x05, 0xc8, 0xdb, 0x26, 0x35, 0xb5, 0x7f,
+	0xab, 0xc0, 0xe4, 0x00, 0x8e, 0xcd, 0xb3, 0x4b, 0xc2, 0xa1, 0x31, 0xb5, 0x47, 0x42, 0x75, 0xec,
+	0x2e, 0x17, 0xa0, 0x6d, 0xa8, 0xda, 0x97, 0x8e, 0xd7, 0x35, 0xba, 0x66, 0xe8, 0xa7, 0x22, 0xeb,
+	0x6e, 0x6c, 0xb9, 0xcd, 0xd4, 0x3b, 0x66, 0xe8, 0x2b, 0xf6, 0x13, 0x76, 0x4a, 0xcc, 0x62, 0x8c,
+	0x2d, 0x70, 0x32, 0xa2, 0xc1, 0x18, 0x6b, 0x79, 0xfd, 0xec, 0xa0, 0xca, 0x24, 0x91, 0xa2, 0xb7,
+	0x30, 0xc3, 0x28, 0x42, 0x6a, 0x06, 0xb4, 0xef, 0x1b, 0x1d, 0xd3, 0x71, 0x53, 0xb1, 0xf6, 0x61,
+	0x9a, 0xe9, 0x48, 0x60, 0x5e, 0x99, 0x8e, 0xdb, 0x0f, 0xb0, 0x42, 0x39, 0x45, 0x14, 0x35, 0x23,
+	0xfe, 0x19, 0xcc, 0x71, 0x62, 0xa7, 0xeb, 0x99, 0xae, 0x61, 0xe3, 0x6e, 0x60, 0xda, 0x38, 0x15,
+	0x8b, 0x1f, 0x28, 0xd4, 0x1c, 0xb5, 0x2d, 0x40, 0x0a, 0xf3, 0x34, 0xc9, 0x6a, 0xd1, 0xcf, 0x61,
+	0x9e, 0x6f, 0x8c, 0xc0, 0xe9, 0x50, 0x83, 0x74, 0x8c, 0x73, 0xc7, 0xb3, 0xc9, 0x79, 0x2a, 0x68,
+	0x15, 0xf2, 0x6d, 0x06, 0x6b, 0x75, 0xde, 0x72, 0x50, 0x86, 0x7c, 0x50, 0x8b, 0xda, 0xc0, 0x46,
+	0x63, 0xb8, 0x24, 0x0c, 0x8d, 0x78, 0x2f, 0x88, 0xb0, 0xfe, 0x24, 0x4d, 0xbb, 0x47, 0xc2, 0xb0,
+	0xd5, 0x61, 0x9b, 0x62, 0xeb, 0xc4, 0xf4, 0x3c, 0xec, 0x2a, 0xd4, 0x55, 0x22, 0x11, 0x72, 0x8b,
+	0x44, 0xf3, 0xcc, 0x87, 0x12, 0x26, 0xf3, 0x5c, 0x1a, 0x32, 0xcf, 0x02, 0x73, 0xe5, 0x3c, 0x27,
+	0x6a, 0x46, 0xdc, 0x12, 0x87, 0x04, 0x75, 0xce, 0x45, 0x4f, 0xc5, 0x6e, 0xf8, 0x7e, 0x9a, 0xb0,
+	0x1d, 0x98, 0x5e, 0xd8, 0x73, 0x42, 0x76, 0x2c, 0x36, 0x3d, 0x8a, 0x83, 0x0e, 0x0e, 0xb0, 0x67,
+	0xe1, 0xb7, 0x66, 0xe0, 0x39, 0x5e, 0x57, 0x9e, 0x1a, 0x6d, 0xe7, 0x9c, 0xf7, 0xf4, 0xb7, 0xc5,
+	0xe4, 0x9a, 0x16, 0x75, 0xce, 0xb8, 0xdf, 0xa4, 0xb3, 0x90, 0x9d, 0x85, 0xcd, 0x18, 0x36, 0xac,
+	0xbf, 0x6c, 0xcc, 0x2a, 0x42, 0x78, 0x58, 0x60, 0x1e, 0xfc, 0x80, 0x58, 0x38, 0x0c, 0xd9, 0x2e,
+	0xc0, 0x41, 0x40, 0xc4, 0x29, 0x59, 0xe6, 0x2e, 0x3e, 0x4a, 0xbb, 0x38, 0x8c, 0x71, 0x0d, 0x06,
+	0x53, 0x1c, 0xcc, 0x92, 0x61, 0x7a, 0x84, 0x61, 0x31, 0x59, 0xc3, 0x8e, 0x11, 0x5e, 0x7a, 0x56,
+	0x32, 0x8a, 0x09, 0xee, 0xe2, 0xd3, 0xec, 0x5a, 0x7e, 0x8d, 0x2f, 0x8f, 0x2e, 0x3d, 0xeb, 0xaa,
+	0x81, 0x08, 0x50, 0x84, 0x60, 0x6e, 0x5e, 0xc3, 0x2c, 0x3f, 0x60, 0x69, 0xdf, 0xf0, 0x89, 0x27,
+	0x8e, 0x23, 0xee, 0xa2, 0xc2, 0x5d, 0x3c, 0x54, 0x8e, 0x5b, 0xda, 0x3f, 0x24, 0x1e, 0x3f, 0x85,
+	0x32, 0x4b, 0xaa, 0xea, 0x90, 0x0b, 0x77, 0x79, 0x78, 0xe3, 0x81, 0x35, 0xe8, 0x07, 0x62, 0x03,
+	0x55, 0x39, 0xfb, 0xf7, 0x94, 0x18, 0x4f, 0x61, 0x87, 0xf5, 0x9f, 0x4d, 0xc7, 0x70, 0x0c, 0x7a,
+	0x2b, 0x06, 0x11, 0xe0, 0x1e, 0xa1, 0xd8, 0xb0, 0x71, 0x07, 0x5b, 0xe2, 0x28, 0x9f, 0xe4, 0x6e,
+	0xb4, 0xb4, 0x1b, 0x9d, 0x83, 0xb6, 0x39, 0x46, 0xe1, 0x47, 0x24, 0xa3, 0x44, 0xa1, 0x18, 0x06,
+	0x5f, 0x84, 0x2e, 0xee, 0x19, 0x36, 0x76, 0x1d, 0x0f, 0x8b, 0xe1, 0x30, 0xfe, 0x1a, 0xe7, 0x5f,
+	0xcf, 0xae, 0xc3, 0x4e, 0x63, 0x5f, 0x6e, 0xa9, 0xed, 0xc4, 0x44, 0x71, 0xb7, 0x20, 0x97, 0x63,
+	0x07, 0xf7, 0x54, 0x08, 0x3a, 0x83, 0x15, 0x1e, 0x5b, 0x27, 0x97, 0xa1, 0x63, 0x99, 0xae, 0x81,
+	0xbf, 0xed, 0x3b, 0x7e, 0x0f, 0x7b, 0x34, 0x15, 0x63, 0x53, 0xdc, 0xf1, 0x0f, 0x94, 0x18, 0x93,
+	0xf8, 0x46, 0x04, 0xcf, 0x86, 0x1a, 0x1b, 0xcc, 0x95, 0x30, 0xf4, 0x73, 0x98, 0x4e, 0x47, 0x9c,
+	0x69, 0x9d, 0x72, 0x57, 0x28, 0xbb, 0x1b, 0xc5, 0x18, 0x37, 0xad, 0x53, 0x8f, 0x9c, 0xbb, 0xd8,
+	0xee, 0x62, 0xc6, 0xa3, 0x78, 0x9a, 0x24, 0x29, 0x14, 0x23, 0x27, 0xb0, 0x2c, 0x0a, 0x81, 0x4e,
+	0xc7, 0x08, 0xb0, 0x69, 0x9d, 0x18, 0xf8, 0xc2, 0xc2, 0xd8, 0xc6, 0x36, 0x77, 0x32, 0xcd, 0x9d,
+	0xac, 0xa9, 0x75, 0x41, 0x87, 0x6f, 0x72, 0xea, 0x98, 0xae, 0xce, 0x2c, 0x1a, 0xd2, 0x40, 0x71,
+	0x34, 0x4f, 0x04, 0x72, 0x10, 0x11, 0x67, 0xbb, 0x55, 0xa8, 0x28, 0x55, 0x11, 0xba, 0x07, 0xc0,
+	0x0b, 0x1a, 0x16, 0xea, 0x98, 0x67, 0xbb, 0x71, 0x7d, 0x9c, 0x49, 0x58, 0xf0, 0x62, 0x6d, 0x17,
+	0xaa, 0x6a, 0x45, 0x84, 0xe6, 0xa1, 0x28, 0x8a, 0x27, 0x91, 0x1b, 0x8b, 0x7a, 0x81, 0x17, 0x48,
+	0xf6, 0x00, 0xd3, 0xc8, 0x20, 0xd3, 0x09, 0x4c, 0x65, 0xca, 0x9b, 0xab, 0xc9, 0xbe, 0x80, 0x4a,
+	0x88, 0x03, 0xc7, 0x74, 0x0d, 0xaf, 0xdf, 0x3b, 0xc6, 0x81, 0xcc, 0xa6, 0xb3, 0xf1, 0x94, 0x1c,
+	0x71, 0xed, 0x01, 0x57, 0xea, 0x13, 0x61, 0xaa, 0xa5, 0xfd, 0x3a, 0x0f, 0x15, 0xa5, 0x1c, 0xba,
+	0xda, 0xcd, 0x2c, 0x14, 0xf8, 0x7e, 0x17, 0xd9, 0xba, 0xa8, 0x8f, 0xb1, 0xbd, 0x3b, 0x38, 0x94,
+	0xd1, 0x81, 0xa1, 0xa0, 0x07, 0x50, 0x36, 0xed, 0x9e, 0xe3, 0x49, 0xfd, 0x18, 0xd7, 0x03, 0x17,
+	0x09, 0x40, 0xa6, 0xf7, 0xf9, 0xf7, 0xee, 0x3d, 0xda, 0x83, 0x32, 0x3f, 0xd8, 0x02, 0x6c, 0x86,
+	0xc4, 0xe3, 0xe9, 0xaf, 0xaa, 0xc6, 0x5b, 0x32, 0xb0, 0x55, 0xf5, 0x28, 0xd6, 0xb9, 0x89, 0x0e,
+	0x9d, 0xf8, 0x6f, 0xed, 0xf7, 0x47, 0x60, 0x66, 0x18, 0x08, 0x7d, 0x00, 0x0f, 0x5a, 0x07, 0xaf,
+	0x8d, 0xcd, 0xad, 0x76, 0xf3, 0xcd, 0x66, 0xbb, 0xd9, 0x3a, 0x30, 0x5e, 0x6d, 0x36, 0xf7, 0x0c,
+	0xbd, 0xb1, 0x79, 0xd4, 0x3a, 0x30, 0x0e, 0x5a, 0x07, 0x8d, 0xda, 0x1d, 0xf4, 0x31, 0x68, 0xd7,
+	0x80, 0xf4, 0xcd, 0x83, 0x9d, 0xe6, 0xc1, 0x4e, 0x2d, 0x87, 0x9e, 0x41, 0xfd, 0x1a, 0xdc, 0xe1,
+	0xe6, 0xd1, 0xd1, 0xdb, 0x96, 0xbe, 0x6d, 0x6c, 0xbe, 0x6e, 0xef, 0x36, 0x0e, 0xda, 0xcd, 0x2d,
+	0x8e, 0xa9, 0x8d, 0x20, 0x0d, 0xee, 0x5f, 0x63, 0xb7, 0xd7, 0x3a, 0xaa, 0x8d, 0xa2, 0x87, 0x70,
+	0x6f, 0x18, 0x86, 0xcb, 0xf6, 0x36, 0xf5, 0xfd, 0x5a, 0xfe, 0xaa, 0xb1, 0x1c, 0xbd, 0x6d, 0xb6,
+	0xb7, 0x76, 0x8d, 0xd6, 0x9b, 0x86, 0x5e, 0x1b, 0xd3, 0x7e, 0x99, 0x07, 0x94, 0xad, 0xd0, 0x11,
+	0x82, 0x3c, 0xbd, 0xf4, 0xa3, 0xc8, 0xe7, 0x7f, 0xa7, 0xc3, 0x65, 0xe4, 0x9a, 0x10, 0xcf, 0xc4,
+	0xc5, 0x0c, 0x8c, 0x85, 0x3e, 0xc6, 0xa2, 0xd6, 0x2a, 0xea, 0xa2, 0x81, 0xee, 0x03, 0xb0, 0xa7,
+	0x20, 0x8f, 0xb8, 0xa4, 0x7b, 0x19, 0x05, 0x4b, 0x22, 0x41, 0x0d, 0x28, 0x04, 0xa6, 0xd7, 0xc5,
+	0xa1, 0x2c, 0x75, 0x3e, 0xbb, 0xe6, 0x81, 0x62, 0xf5, 0xb0, 0x75, 0xa0, 0xe3, 0x90, 0xf4, 0x03,
+	0x0b, 0xeb, 0xdc, 0x48, 0x97, 0xc6, 0x4b, 0x7f, 0x31, 0x02, 0x53, 0x19, 0x2d, 0xda, 0x85, 0x31,
+	0x9f, 0x10, 0x37, 0x5c, 0x18, 0x5d, 0x19, 0x7d, 0x54, 0xae, 0xd7, 0x6f, 0xc4, 0xbd, 0x7a, 0x48,
+	0x88, 0xab, 0x0b, 0x82, 0xa5, 0xbf, 0xcb, 0x41, 0x9e, 0xb5, 0x51, 0x2b, 0x35, 0x63, 0xd5, 0xfa,
+	0x0f, 0x6f, 0xce, 0xc8, 0xff, 0x69, 0x5f, 0xfa, 0x58, 0x4e, 0x37, 0x9b, 0x36, 0x56, 0x6a, 0xf2,
+	0x09, 0x65, 0xd3, 0xc6, 0x1a, 0xa8, 0x06, 0xa3, 0xd8, 0x8b, 0xa6, 0x92, 0xfd, 0xa9, 0x6d, 0x42,
+	0x29, 0xb2, 0x44, 0x00, 0x05, 0xb6, 0xe4, 0xcd, 0xed, 0xda, 0x1d, 0x34, 0x01, 0xa5, 0xcd, 0xbd,
+	0xbd, 0xd6, 0x16, 0x6b, 0xe5, 0x50, 0x15, 0x60, 0xa7, 0xb1, 0x7f, 0xd8, 0xd2, 0xdb, 0xac, 0x3d,
+	0x82, 0xca, 0x50, 0x7c, 0xb5, 0xd7, 0x7a, 0xcb, 0x1a, 0xa3, 0x9a, 0x0e, 0x55, 0xf5, 0xa1, 0xe7,
+	0xc6, 0x47, 0x43, 0x0d, 0x46, 0xfd, 0x53, 0xd1, 0xd5, 0x09, 0x9d, 0xfd, 0xa9, 0xfd, 0x7b, 0x0e,
+	0x6a, 0x83, 0x0f, 0x45, 0x68, 0x19, 0xc6, 0x39, 0x2d, 0x9f, 0x29, 0xb1, 0xe6, 0xfc, 0x99, 0xb3,
+	0x3d, 0x10, 0x5f, 0x57, 0xf9, 0x2c, 0xa5, 0x7d, 0xce, 0x42, 0xa1, 0xef, 0x39, 0x4c, 0x3c, 0x2e,
+	0xc4, 0x7d, 0xcf, 0x11, 0xd1, 0xd8, 0xc5, 0x3d, 0xfe, 0xc4, 0x15, 0xf7, 0x72, 0x5c, 0x4a, 0x9a,
+	0x36, 0xf3, 0xc2, 0x9f, 0xa9, 0x1c, 0x5b, 0x4e, 0x6c, 0x81, 0x35, 0x85, 0x82, 0x1b, 0x79, 0x84,
+	0x47, 0x5c, 0x51, 0x2f, 0xb0, 0xe6, 0x01, 0x41, 0x73, 0x50, 0xb0, 0x08, 0x39, 0x75, 0x30, 0xaf,
+	0x8e, 0x0b, 0xba, 0x6c, 0x45, 0x63, 0xce, 0x27, 0x63, 0xfe, 0x10, 0xc6, 0x45, 0xdd, 0x69, 0x5a,
+	0x57, 0x0f, 0x47, 0xfb, 0x11, 0x8c, 0xef, 0x62, 0x33, 0xa0, 0xc7, 0xd8, 0xa4, 0x68, 0x0d, 0xa6,
+	0x4f, 0xa2, 0x86, 0xa8, 0x9a, 0x69, 0x3f, 0xc0, 0xd2, 0x02, 0xc5, 0xaa, 0xa3, 0x48, 0xa3, 0xfd,
+	0x55, 0x0e, 0x46, 0x5b, 0x5e, 0xff, 0xc6, 0x2b, 0x94, 0x39, 0x7c, 0x47, 0xdf, 0xff, 0xf0, 0x65,
+	0x23, 0x75, 0x82, 0x28, 0xe8, 0x7c, 0x27, 0x40, 0x9f, 0xc0, 0x24, 0xe9, 0x59, 0x96, 0x81, 0x3d,
+	0x2b, 0xb8, 0xf4, 0xd9, 0xda, 0xf2, 0xe5, 0x2c, 0xe9, 0x55, 0x26, 0x6e, 0xc4, 0x52, 0xed, 0xaf,
+	0x73, 0x80, 0x78, 0x31, 0xd0, 0x65, 0xf5, 0xc4, 0xb6, 0x13, 0x52, 0xd3, 0xb3, 0xf0, 0x8d, 0x7b,
+	0xff, 0x02, 0x16, 0x5d, 0x41, 0x61, 0xc8, 0x57, 0x05, 0x9c, 0xc7, 0xf8, 0x1d, 0x1c, 0x10, 0xb9,
+	0x8e, 0x73, 0x12, 0x20, 0xd2, 0x29, 0x57, 0xff, 0x0c, 0x07, 0x04, 0x3d, 0x86, 0x99, 0x61, 0xa6,
+	0x72, 0x34, 0x28, 0x6b, 0xa5, 0x7d, 0x0d, 0x45, 0xb6, 0x1d, 0xf6, 0xc3, 0xee, 0x2d, 0xec, 0x83,
+	0x5f, 0xe5, 0x60, 0x9c, 0x15, 0x5e, 0x7c, 0x2b, 0xdc, 0x98, 0x2f, 0x15, 0x94, 0x79, 0x25, 0x28,
+	0xd5, 0x28, 0x1f, 0x1b, 0x8c, 0xf2, 0x6c, 0x3f, 0x5e, 0xc0, 0xc4, 0x6b, 0xdf, 0x75, 0xbc, 0xd3,
+	0x77, 0xf5, 0x44, 0x9a, 0x8e, 0x24, 0xa6, 0x7f, 0x5a, 0x04, 0xd8, 0xc6, 0x67, 0x8e, 0x85, 0x9b,
+	0x5e, 0x87, 0xef, 0x87, 0x33, 0xec, 0xd9, 0x24, 0x90, 0xd9, 0x41, 0xb6, 0xd8, 0x81, 0xd5, 0x23,
+	0x36, 0x76, 0x65, 0x91, 0x23, 0x1a, 0xe8, 0x7b, 0x50, 0x3b, 0x31, 0x03, 0xfb, 0xdc, 0x0c, 0xb0,
+	0x71, 0x86, 0x03, 0xf6, 0x6c, 0x26, 0x53, 0xc4, 0x64, 0x24, 0x7f, 0x23, 0xc4, 0x0c, 0xda, 0x71,
+	0x82, 0x9e, 0x02, 0xcd, 0x0b, 0x68, 0x24, 0x8f, 0xa0, 0xcb, 0x30, 0x6e, 0xf3, 0x1e, 0xb1, 0xfe,
+	0xd7, 0xc4, 0x41, 0x22, 0x04, 0x4d, 0x9b, 0xad, 0xb8, 0x54, 0xaa, 0x11, 0x3f, 0xc5, 0x71, 0x48,
+	0xe8, 0xd2, 0xe1, 0x8e, 0xd6, 0x61, 0xc6, 0x0f, 0xf0, 0x99, 0x43, 0xfa, 0xa1, 0x7b, 0x69, 0x58,
+	0xc4, 0xf3, 0xb0, 0x45, 0xb1, 0xa8, 0x38, 0x4b, 0xfa, 0x74, 0xa2, 0xdb, 0x8a, 0x54, 0xac, 0x07,
+	0xec, 0x59, 0x88, 0xcd, 0x77, 0xc8, 0x1f, 0xb5, 0x8a, 0x7a, 0xc9, 0x27, 0xde, 0x21, 0x6b, 0xa3,
+	0x2f, 0xe3, 0xe4, 0x35, 0xc9, 0x13, 0xcc, 0xa3, 0xe4, 0x75, 0x47, 0x3c, 0x8f, 0xf2, 0xcf, 0x2b,
+	0xf2, 0xd6, 0x1f, 0xe6, 0x61, 0x66, 0x18, 0x00, 0x2d, 0x46, 0x6f, 0xe9, 0xec, 0x70, 0x21, 0xb7,
+	0x32, 0xfa, 0xa8, 0x28, 0x5f, 0xc5, 0xd9, 0xe1, 0x40, 0x4a, 0x1d, 0xc9, 0xa4, 0xd4, 0x2d, 0x35,
+	0xeb, 0x7d, 0xf6, 0xbe, 0x9d, 0x52, 0x12, 0xde, 0x7f, 0x8e, 0xc8, 0x84, 0xf7, 0x95, 0x92, 0xf0,
+	0x9e, 0xdd, 0x88, 0x6c, 0x30, 0xd7, 0x1d, 0x41, 0x31, 0x3c, 0x31, 0x03, 0xc7, 0xeb, 0xf2, 0x6e,
+	0x57, 0xeb, 0x2f, 0x6e, 0x46, 0x77, 0x24, 0x8c, 0x39, 0x63, 0xc4, 0xf4, 0x7f, 0x99, 0x40, 0x4f,
+	0xa0, 0x9c, 0xea, 0x02, 0x9a, 0x03, 0xb4, 0xdd, 0xd8, 0x66, 0x05, 0x5d, 0x63, 0xdb, 0x38, 0x6c,
+	0xe8, 0x46, 0xf3, 0xa0, 0xfd, 0xaa, 0x76, 0x07, 0x3d, 0x80, 0xe5, 0xa3, 0xdd, 0x4d, 0xbd, 0xb1,
+	0x6d, 0xbc, 0xfc, 0xa9, 0xb1, 0xb9, 0xb7, 0xc7, 0xe5, 0xfc, 0x8f, 0x76, 0x63, 0x6b, 0xb7, 0x96,
+	0x43, 0x2b, 0x70, 0x77, 0x08, 0xe0, 0x68, 0x73, 0xbf, 0x21, 0x10, 0x23, 0x5f, 0xe5, 0x4b, 0x63,
+	0xb5, 0x89, 0xaf, 0xf2, 0xa5, 0x4a, 0xad, 0xfa, 0x55, 0xbe, 0x54, 0xad, 0x4d, 0x6a, 0xbf, 0x3b,
+	0x0a, 0xb0, 0xe5, 0x9a, 0x61, 0xe8, 0x74, 0x1c, 0x1c, 0xf0, 0x83, 0xc4, 0xa0, 0x7e, 0xbc, 0xad,
+	0xc7, 0x48, 0xdb, 0x77, 0x6c, 0x34, 0x0d, 0x63, 0xc4, 0x38, 0x8b, 0x8f, 0x97, 0x3c, 0x79, 0xe3,
+	0xf0, 0x43, 0xc7, 0x11, 0x58, 0x39, 0x45, 0x4e, 0x84, 0x75, 0x38, 0x56, 0x4c, 0x52, 0xde, 0x61,
+	0xd8, 0x79, 0x28, 0x12, 0xc3, 0x3f, 0x76, 0x68, 0x28, 0x4f, 0x9b, 0x02, 0x39, 0x64, 0x2d, 0x7e,
+	0x90, 0x48, 0x85, 0xcc, 0x9b, 0x8e, 0x50, 0x2c, 0x42, 0x09, 0xd3, 0x13, 0x91, 0xeb, 0x8b, 0x5c,
+	0x53, 0xc4, 0xf4, 0x24, 0x4a, 0xf5, 0x76, 0x48, 0x8d, 0x9e, 0x69, 0xf1, 0x94, 0x3e, 0xa1, 0x17,
+	0xec, 0x90, 0xee, 0x9b, 0x16, 0x53, 0x84, 0x81, 0xc5, 0x15, 0xe3, 0x42, 0x11, 0x06, 0x16, 0x53,
+	0xb0, 0xb0, 0xf7, 0xc5, 0xcb, 0x6f, 0xfe, 0x7a, 0x86, 0x85, 0xbd, 0x7f, 0xc8, 0x5f, 0xc1, 0xcf,
+	0x02, 0xb3, 0x36, 0x1c, 0x9f, 0xbf, 0x54, 0x29, 0xea, 0x63, 0x76, 0x48, 0x9b, 0x3e, 0x13, 0x33,
+	0x2a, 0xc7, 0x97, 0xbb, 0x73, 0x2c, 0x0c, 0xac, 0xa6, 0xcf, 0x88, 0x98, 0x98, 0xed, 0x5b, 0xfe,
+	0xfa, 0xa2, 0xa8, 0x33, 0x8f, 0x6c, 0xdb, 0x32, 0x15, 0x23, 0xe2, 0xaa, 0xaa, 0x50, 0xd9, 0x21,
+	0xe5, 0xaa, 0x15, 0x98, 0xf0, 0x4f, 0xa9, 0x41, 0xcd, 0xae, 0x18, 0xcf, 0xa4, 0xd8, 0x5c, 0xfe,
+	0x29, 0x6d, 0x9b, 0x7c, 0xcd, 0xb5, 0x5f, 0x8d, 0xc2, 0x38, 0x7b, 0xa4, 0x20, 0xde, 0x56, 0xcf,
+	0x46, 0x1a, 0x54, 0x4c, 0xdb, 0x36, 0x48, 0x9f, 0xe2, 0x80, 0x59, 0xf1, 0xc5, 0x28, 0xe9, 0x65,
+	0xd3, 0xb6, 0x5b, 0x4c, 0xd6, 0x36, 0xbb, 0xe8, 0x11, 0xd4, 0x02, 0xdc, 0x23, 0x67, 0x38, 0x05,
+	0x1b, 0x11, 0x49, 0x54, 0xc8, 0x63, 0xe4, 0x0a, 0x4c, 0xd0, 0xc0, 0xf4, 0x0d, 0x4a, 0x8c, 0x13,
+	0x12, 0x8a, 0x80, 0x2e, 0xe9, 0xc0, 0x64, 0x6d, 0xb2, 0x4b, 0x42, 0x8a, 0x7e, 0x00, 0x28, 0xc0,
+	0x3d, 0x33, 0x38, 0x95, 0x5c, 0x62, 0x3d, 0xf2, 0x1c, 0x57, 0x13, 0x1a, 0xce, 0x26, 0x56, 0x26,
+	0x41, 0x3b, 0x9e, 0x17, 0xa3, 0xc7, 0xd2, 0xe8, 0x26, 0x53, 0x08, 0xb4, 0x1c, 0x8b, 0x80, 0xb2,
+	0x4e, 0x16, 0xe2, 0xb1, 0x70, 0x94, 0x3a, 0x96, 0x04, 0x56, 0x4c, 0x8f, 0x25, 0x46, 0xae, 0xc2,
+	0x34, 0x0d, 0x4c, 0x2f, 0x74, 0x4d, 0x9a, 0x06, 0x97, 0x38, 0x78, 0x2a, 0x56, 0x0d, 0xc7, 0x27,
+	0x13, 0x35, 0x3e, 0x80, 0x8f, 0xe6, 0x4a, 0xfb, 0x9b, 0x1c, 0x14, 0xc4, 0x3a, 0xa0, 0x0f, 0x61,
+	0xd4, 0xea, 0x45, 0xef, 0xaa, 0x51, 0xf2, 0xfa, 0x3b, 0x5a, 0x25, 0x9d, 0xa9, 0x87, 0xef, 0x8c,
+	0x54, 0xb4, 0x8f, 0x2a, 0xd1, 0x9e, 0x6c, 0xaf, 0xfc, 0xc0, 0xf6, 0x12, 0x5b, 0x66, 0x4c, 0xdd,
+	0x32, 0xc3, 0x77, 0x46, 0xb2, 0xef, 0x8a, 0xa9, 0x7d, 0xa7, 0xfd, 0x43, 0x01, 0xf2, 0xaf, 0x5c,
+	0x72, 0x8e, 0x3e, 0x84, 0xaa, 0x69, 0x59, 0x38, 0x0c, 0x8d, 0x74, 0x8a, 0x9e, 0xd4, 0x27, 0x84,
+	0xb4, 0x39, 0xac, 0x64, 0x98, 0xcc, 0x96, 0xc5, 0x65, 0x21, 0x16, 0x65, 0xf1, 0x40, 0xdd, 0x5b,
+	0x88, 0xeb, 0xde, 0x4f, 0x61, 0x2a, 0xbc, 0xec, 0xf5, 0x30, 0x0d, 0x1c, 0xcb, 0x88, 0x20, 0x88,
+	0x43, 0x26, 0x63, 0xc5, 0x2b, 0x81, 0x5d, 0x06, 0xfe, 0x8d, 0x41, 0xec, 0x01, 0x91, 0x9a, 0x4b,
+	0x4c, 0xc0, 0x37, 0xf5, 0x22, 0x94, 0x4c, 0xd7, 0x25, 0x16, 0xb3, 0x07, 0xee, 0xba, 0xc8, 0xdb,
+	0x4d, 0x1b, 0x7d, 0x0c, 0x93, 0x1e, 0xa6, 0xe7, 0x84, 0x47, 0x9c, 0x18, 0xd1, 0x18, 0x47, 0x54,
+	0xa4, 0xb8, 0x19, 0x3f, 0x49, 0xa6, 0xaa, 0x9a, 0x02, 0x87, 0xa4, 0xaa, 0x9a, 0x27, 0x00, 0x56,
+	0x7c, 0xd2, 0xc9, 0x77, 0xd5, 0xd3, 0xf1, 0xba, 0x26, 0x87, 0xa0, 0x9e, 0x82, 0xa1, 0x4f, 0xa0,
+	0x60, 0xf2, 0x15, 0x97, 0xef, 0xa0, 0x27, 0x07, 0x02, 0x41, 0x97, 0x6a, 0xb4, 0x04, 0x25, 0x3f,
+	0x70, 0x48, 0xe0, 0xd0, 0x4b, 0x1e, 0x5e, 0x93, 0x7a, 0xdc, 0x4e, 0x3d, 0x03, 0x4c, 0x28, 0xcf,
+	0x00, 0xa9, 0xfa, 0xac, 0xa2, 0xd4, 0x67, 0x8b, 0x50, 0xea, 0x06, 0xa4, 0xef, 0xb3, 0x71, 0xc8,
+	0xb3, 0x84, 0xb7, 0xc5, 0x64, 0xa4, 0xbf, 0xff, 0x31, 0xc4, 0x24, 0x47, 0x54, 0x98, 0xf8, 0x50,
+	0x48, 0x9b, 0x36, 0xfa, 0x08, 0xaa, 0x01, 0xf6, 0x5d, 0xf6, 0xec, 0x84, 0xf9, 0xc2, 0xf0, 0x42,
+	0xa7, 0xa4, 0x57, 0x62, 0x29, 0x0f, 0x96, 0x5d, 0x98, 0x64, 0x31, 0xc6, 0x0e, 0x07, 0x39, 0x53,
+	0x0b, 0x53, 0x3c, 0xbf, 0xaf, 0x28, 0x5f, 0x8a, 0x56, 0x59, 0xe8, 0xb5, 0xc9, 0x8e, 0x80, 0x34,
+	0x3c, 0x1a, 0x5c, 0xea, 0x15, 0x3f, 0x2d, 0x43, 0x0d, 0xa8, 0x46, 0xb3, 0x4f, 0x89, 0x61, 0xe2,
+	0x70, 0x61, 0x9a, 0x13, 0x3d, 0x50, 0x89, 0x24, 0xbc, 0x4d, 0x36, 0x71, 0x28, 0x78, 0x26, 0xba,
+	0x29, 0xd1, 0xd2, 0x97, 0x80, 0xb2, 0xbe, 0x58, 0xde, 0x3d, 0xc5, 0x97, 0x32, 0x29, 0xb1, 0x3f,
+	0x59, 0x7e, 0x3e, 0x33, 0xdd, 0x3e, 0x8e, 0x2a, 0x5e, 0xde, 0xf8, 0x62, 0xe4, 0x79, 0x6e, 0xe9,
+	0x27, 0x30, 0x95, 0x71, 0xf2, 0x2e, 0x82, 0x52, 0x8a, 0x40, 0x6b, 0xc3, 0x84, 0x52, 0xdf, 0x2d,
+	0xc3, 0xb8, 0x28, 0x52, 0xa3, 0xbd, 0x34, 0xa1, 0x97, 0x84, 0xa0, 0x69, 0xb3, 0x67, 0x19, 0xa9,
+	0x0c, 0x7d, 0x6c, 0x39, 0x1d, 0xc7, 0x92, 0xc5, 0x6f, 0x55, 0x88, 0x8f, 0xa4, 0x54, 0xfb, 0xaf,
+	0x32, 0x54, 0xd5, 0xcf, 0x75, 0x57, 0x57, 0xd1, 0x8b, 0x50, 0x0a, 0x2e, 0x8c, 0xe3, 0x4b, 0x8a,
+	0x43, 0xce, 0x56, 0xd0, 0x8b, 0xc1, 0xc5, 0x4b, 0xd6, 0x64, 0x41, 0x1e, 0x5c, 0x18, 0x3e, 0x2f,
+	0xc3, 0x43, 0xb9, 0x19, 0xc7, 0x83, 0x0b, 0x51, 0x97, 0x87, 0xfc, 0x28, 0xbd, 0x30, 0xfa, 0x96,
+	0xc9, 0x52, 0x91, 0x04, 0xe5, 0x39, 0xa8, 0x1a, 0x5c, 0xbc, 0x66, 0x62, 0x15, 0xd9, 0x53, 0x90,
+	0x63, 0x11, 0x72, 0x3f, 0x8b, 0x3c, 0x56, 0x90, 0x85, 0x08, 0xf9, 0x32, 0x8b, 0x14, 0xef, 0x90,
+	0x23, 0x64, 0x31, 0x42, 0xf2, 0xb7, 0xc0, 0x11, 0x72, 0x19, 0xc6, 0x83, 0x0b, 0xa3, 0x13, 0x98,
+	0x3d, 0x1c, 0xf2, 0xd2, 0xba, 0xa0, 0x97, 0x82, 0x8b, 0x57, 0xbc, 0xcd, 0x32, 0x56, 0xac, 0x34,
+	0x9e, 0x3d, 0x95, 0xe7, 0x09, 0x44, 0xfa, 0x67, 0x4f, 0xd1, 0x27, 0xdc, 0x51, 0x84, 0xd8, 0x30,
+	0xd6, 0xeb, 0x9f, 0xf3, 0x72, 0xbb, 0xa0, 0x57, 0x62, 0xd4, 0xc6, 0x7a, 0xfd, 0x73, 0xf4, 0x3d,
+	0x98, 0x4a, 0x80, 0xeb, 0xf5, 0xe7, 0x46, 0x7d, 0x63, 0x63, 0x61, 0x26, 0xea, 0x92, 0x40, 0xae,
+	0xd7, 0x9f, 0xd7, 0x37, 0x36, 0x54, 0x68, 0x7d, 0xe3, 0x99, 0xb1, 0xb1, 0xbe, 0xbe, 0x30, 0xab,
+	0x42, 0xeb, 0x1b, 0xcf, 0x36, 0xd6, 0xd7, 0xd1, 0xf7, 0x01, 0x25, 0xd0, 0x8d, 0xf5, 0xba, 0xb1,
+	0xfe, 0xb8, 0xfe, 0x64, 0x61, 0x4e, 0x1c, 0x7b, 0x11, 0x76, 0x63, 0xbd, 0xce, 0xc4, 0xe8, 0x33,
+	0x98, 0x4e, 0x75, 0xe1, 0x71, 0xfd, 0xa9, 0xb1, 0xbe, 0xb1, 0xfe, 0x7c, 0x61, 0x9e, 0xa3, 0x6b,
+	0x71, 0x27, 0x1e, 0xd7, 0x9f, 0x32, 0xf9, 0x00, 0x7c, 0x63, 0xfd, 0x85, 0x51, 0x7f, 0xfc, 0xf4,
+	0xf3, 0x85, 0x85, 0x01, 0xf8, 0xc6, 0xfa, 0x0b, 0x26, 0x57, 0xe1, 0xf5, 0xc7, 0x4f, 0x9f, 0x1b,
+	0x4f, 0x1f, 0xbf, 0xd8, 0x58, 0x58, 0x54, 0xe1, 0x4c, 0xc1, 0xe4, 0x2a, 0xfc, 0xe9, 0xe3, 0x17,
+	0xcf, 0x8c, 0x17, 0xf5, 0xf5, 0x67, 0x0b, 0x4b, 0x2a, 0x9c, 0x29, 0x98, 0x1c, 0xad, 0xc1, 0x4c,
+	0x02, 0x7f, 0x51, 0x5f, 0xff, 0xdc, 0x58, 0x7f, 0xf6, 0xe4, 0xf9, 0x93, 0x85, 0x65, 0x8e, 0x9f,
+	0x8a, 0xf0, 0x4c, 0xc3, 0x15, 0x2c, 0xdd, 0x07, 0x17, 0x86, 0x15, 0x58, 0x22, 0x0a, 0x42, 0x7e,
+	0x7c, 0x15, 0xf4, 0x72, 0x70, 0xb1, 0x15, 0x58, 0x3c, 0x02, 0x78, 0x69, 0x47, 0xa3, 0xe8, 0x2e,
+	0x89, 0xe8, 0xa6, 0x49, 0x74, 0xd3, 0x24, 0xba, 0xc7, 0x45, 0x74, 0xd3, 0x74, 0x74, 0xd3, 0xc1,
+	0xe8, 0x06, 0xb1, 0x42, 0x34, 0x13, 0xdd, 0x74, 0x30, 0xba, 0xcb, 0x11, 0x72, 0x3f, 0x8b, 0x54,
+	0xa3, 0x7b, 0x22, 0x42, 0xbe, 0xcc, 0x22, 0xd5, 0xe8, 0xae, 0x44, 0xc8, 0xc1, 0xe8, 0xa6, 0x71,
+	0x74, 0xdf, 0x15, 0xd1, 0x4d, 0x53, 0xd1, 0x4d, 0xd3, 0xd1, 0x7d, 0x4f, 0x44, 0x37, 0x55, 0xa2,
+	0x9b, 0x0e, 0x46, 0xf7, 0x7d, 0x11, 0xdd, 0x74, 0x30, 0xba, 0x69, 0x26, 0xba, 0x1f, 0x44, 0x5d,
+	0x1a, 0x8c, 0x6e, 0x9a, 0x89, 0xee, 0x15, 0x15, 0x9a, 0x44, 0x37, 0xcd, 0x46, 0xf7, 0x43, 0x11,
+	0xdd, 0x34, 0x1b, 0xdd, 0x74, 0x48, 0x74, 0x6b, 0x22, 0xa0, 0xe8, 0x90, 0xe8, 0xa6, 0x43, 0xa2,
+	0xfb, 0x83, 0x01, 0x78, 0x2a, 0xba, 0xe9, 0x90, 0xe8, 0xfe, 0x50, 0x85, 0xa7, 0xa3, 0x9b, 0x0e,
+	0x89, 0xee, 0x8f, 0x54, 0x78, 0x3a, 0xba, 0xe9, 0xb0, 0xe8, 0xfe, 0x58, 0x44, 0x37, 0xcd, 0x44,
+	0xf7, 0x3d, 0x80, 0x63, 0xc7, 0x8f, 0x42, 0x7b, 0x52, 0x84, 0xe7, 0xb1, 0xe3, 0xcb, 0xc0, 0xbe,
+	0x0b, 0xe3, 0xd4, 0xe9, 0xe1, 0x90, 0x9a, 0x3d, 0x9f, 0xa7, 0xdb, 0xa2, 0x9e, 0x08, 0xb4, 0x7f,
+	0x2d, 0xf2, 0x4f, 0x28, 0xef, 0x73, 0xfe, 0x5f, 0xf1, 0x3e, 0xe7, 0x23, 0xa8, 0xfa, 0x24, 0x74,
+	0xa8, 0x73, 0x86, 0xc5, 0x67, 0x7d, 0x79, 0xfe, 0x57, 0x22, 0x29, 0xff, 0x4c, 0xcf, 0x60, 0x1e,
+	0xee, 0x9a, 0x29, 0x98, 0xc8, 0x00, 0x95, 0x48, 0x2a, 0x60, 0xcf, 0x61, 0xc1, 0xc6, 0xae, 0xd3,
+	0x73, 0x58, 0x55, 0xdc, 0x73, 0xc2, 0xd0, 0xb0, 0x31, 0xc5, 0x56, 0xfc, 0x3a, 0xae, 0xa0, 0xcf,
+	0xc5, 0xfa, 0x7d, 0x27, 0x0c, 0xb7, 0x23, 0xed, 0xc0, 0x34, 0x14, 0x06, 0xa7, 0x61, 0x19, 0x58,
+	0xc3, 0xe8, 0x7b, 0x4e, 0x7c, 0xfc, 0x97, 0x8e, 0x1d, 0xff, 0x35, 0x6b, 0xa3, 0x3a, 0xcc, 0x76,
+	0xb0, 0x65, 0x58, 0x24, 0x08, 0xf8, 0xab, 0x10, 0x23, 0xbc, 0xec, 0x1d, 0x13, 0x37, 0x3a, 0x09,
+	0xa6, 0x3b, 0xd8, 0xda, 0x8a, 0x74, 0x47, 0x42, 0x85, 0x9e, 0xc1, 0xbc, 0xb0, 0xb1, 0xf1, 0x39,
+	0x09, 0xec, 0x30, 0xb1, 0x96, 0x47, 0xc4, 0x2c, 0xb7, 0x92, 0xda, 0xd8, 0x1c, 0xfd, 0x18, 0x96,
+	0x55, 0xbb, 0xbe, 0x27, 0x2d, 0xcd, 0x63, 0x17, 0xcb, 0x93, 0x63, 0x31, 0x6d, 0xfb, 0x3a, 0x0d,
+	0x40, 0x1f, 0x40, 0x45, 0xb1, 0x97, 0x27, 0xc8, 0x44, 0xda, 0x82, 0x3d, 0x62, 0xa8, 0x03, 0x12,
+	0xe3, 0x16, 0x47, 0xc8, 0x54, 0x7a, 0x38, 0x62, 0x02, 0x3e, 0x86, 0xc9, 0x8b, 0x2e, 0xee, 0x19,
+	0xa7, 0xf8, 0x32, 0x9a, 0x41, 0x71, 0x88, 0x54, 0x98, 0xf8, 0x6b, 0x7c, 0x99, 0xcc, 0x22, 0xc7,
+	0xb9, 0x24, 0x8c, 0x4e, 0xd1, 0x12, 0x13, 0xec, 0x91, 0x90, 0x93, 0xb0, 0x2a, 0xc0, 0x25, 0x66,
+	0x2f, 0x14, 0x2c, 0x32, 0x1a, 0x2b, 0xc1, 0xc5, 0x21, 0x97, 0x72, 0x16, 0x99, 0xa8, 0x24, 0xce,
+	0x23, 0x9e, 0xe1, 0xd8, 0x2e, 0xe6, 0xa1, 0xc9, 0x13, 0x95, 0x80, 0x1e, 0x10, 0xaf, 0x69, 0xbb,
+	0xbc, 0x1c, 0x0d, 0x2e, 0xf8, 0x6d, 0x0e, 0x99, 0x91, 0x0b, 0xc1, 0x45, 0xab, 0x67, 0x39, 0xe8,
+	0x39, 0x2c, 0x4a, 0x45, 0x74, 0xee, 0x25, 0x27, 0xbc, 0x4c, 0xce, 0xb3, 0x02, 0x2a, 0x0f, 0xc0,
+	0xe8, 0xac, 0x57, 0x0a, 0x99, 0xe9, 0xeb, 0x0a, 0x99, 0x99, 0xc1, 0x42, 0x26, 0x9d, 0x24, 0x66,
+	0xaf, 0x4b, 0x12, 0x73, 0x83, 0x49, 0xe2, 0x21, 0x4c, 0x1c, 0xe3, 0xc0, 0x08, 0x30, 0x2b, 0x01,
+	0xb1, 0x2d, 0x13, 0x6d, 0xf9, 0x18, 0x07, 0xba, 0x14, 0xa1, 0x07, 0x50, 0x76, 0x2d, 0xbb, 0x1b,
+	0xcd, 0xbf, 0xc8, 0xad, 0xc0, 0x44, 0x72, 0xf2, 0x59, 0xe7, 0x6c, 0x27, 0xd2, 0x2f, 0xca, 0xce,
+	0xd9, 0xce, 0xb0, 0x8d, 0xbe, 0x34, 0xb8, 0xd1, 0xff, 0x39, 0xc7, 0x2b, 0xd0, 0xf7, 0x2d, 0xf6,
+	0xde, 0xf1, 0xc9, 0xe1, 0x1d, 0x05, 0x5f, 0x7a, 0x86, 0xf3, 0x99, 0x19, 0x4e, 0xcd, 0xd3, 0xd8,
+	0xe0, 0x3c, 0xa5, 0x67, 0xb8, 0xa0, 0xce, 0xf0, 0xf5, 0xe3, 0xfb, 0xdb, 0x1c, 0x54, 0xd5, 0xeb,
+	0x63, 0xe9, 0xe7, 0xc3, 0x9c, 0xf2, 0x5d, 0xe4, 0xbb, 0x57, 0xb2, 0xdf, 0xbd, 0x4a, 0xb8, 0xfe,
+	0x18, 0xfe, 0x12, 0x2a, 0xca, 0x7d, 0xb3, 0xab, 0x17, 0x66, 0x0e, 0x0a, 0x21, 0x35, 0x69, 0x3f,
+	0x94, 0x6f, 0x43, 0x65, 0x4b, 0xfb, 0x06, 0xa6, 0x87, 0xdc, 0x3b, 0xbb, 0xf1, 0x69, 0x9e, 0xd0,
+	0x8f, 0x2a, 0xf4, 0x7f, 0x39, 0xc2, 0x3f, 0x7a, 0x0c, 0xde, 0x9f, 0xfb, 0x0e, 0xdf, 0xdb, 0x5d,
+	0x12, 0x1a, 0x8a, 0x8b, 0x71, 0x97, 0x84, 0x47, 0x5c, 0x20, 0xd4, 0xc7, 0x91, 0x3a, 0x1f, 0xa9,
+	0x8f, 0xa5, 0xfa, 0x11, 0xd4, 0x5c, 0xe2, 0x5b, 0x22, 0x2f, 0x48, 0x90, 0xf8, 0xe4, 0x56, 0x65,
+	0x72, 0x96, 0x0f, 0x24, 0x72, 0x1d, 0x66, 0x25, 0x52, 0x9e, 0x08, 0x11, 0xbc, 0x20, 0x5e, 0x98,
+	0x0b, 0xb8, 0x38, 0x0f, 0xa4, 0x09, 0xdb, 0x7e, 0xa4, 0xe3, 0x44, 0xc0, 0xa2, 0x78, 0x1d, 0xc6,
+	0x44, 0x12, 0xf0, 0x10, 0x26, 0xd8, 0xc9, 0x14, 0x23, 0x4a, 0x1c, 0x51, 0xe6, 0x32, 0x01, 0xd1,
+	0x30, 0x2c, 0x5f, 0x73, 0xdb, 0xee, 0xd6, 0x16, 0xe3, 0x8f, 0x73, 0xb0, 0x74, 0xf5, 0xd5, 0xbb,
+	0xdb, 0x72, 0x83, 0x9e, 0xc0, 0x9c, 0xe3, 0x9d, 0xe1, 0x20, 0xc4, 0x06, 0x7b, 0x1a, 0x17, 0xf3,
+	0x18, 0x98, 0x34, 0xfa, 0xd0, 0x34, 0x2d, 0xb5, 0x2f, 0x1d, 0x71, 0x99, 0x46, 0x37, 0x29, 0xd6,
+	0x7e, 0x2d, 0xfa, 0x76, 0xc5, 0xcd, 0xbd, 0x5b, 0xeb, 0xdb, 0x0c, 0x8c, 0x25, 0x55, 0x44, 0x51,
+	0x17, 0x0d, 0xc6, 0xee, 0xe1, 0x73, 0x03, 0x7f, 0x1b, 0xbd, 0xb5, 0x2a, 0x78, 0xf8, 0xbc, 0xf1,
+	0xad, 0xad, 0x9d, 0xc0, 0xfd, 0xeb, 0xef, 0xfd, 0xdd, 0xda, 0xda, 0xfc, 0x49, 0x4e, 0xc4, 0xc0,
+	0x15, 0x37, 0x01, 0xff, 0x7f, 0x17, 0xe7, 0x97, 0x39, 0xd0, 0xde, 0x7d, 0xab, 0xf0, 0x7f, 0x77,
+	0x91, 0xb4, 0x6f, 0xf9, 0x5a, 0x5c, 0x73, 0xfb, 0xf0, 0xc6, 0xfe, 0x1f, 0xa8, 0x37, 0x69, 0xc4,
+	0xeb, 0xcd, 0xf4, 0xe5, 0x98, 0x53, 0x78, 0xf8, 0xce, 0xab, 0x82, 0xb7, 0x16, 0x01, 0x6d, 0x40,
+	0xba, 0x4c, 0xca, 0x29, 0x76, 0x56, 0x1c, 0x45, 0xc9, 0xdb, 0xb0, 0x48, 0xdf, 0xa3, 0xdc, 0x0b,
+	0x2b, 0x8e, 0x24, 0x78, 0x8b, 0x09, 0xaf, 0x3c, 0xdf, 0xff, 0x28, 0x07, 0x0b, 0x57, 0xdd, 0x45,
+	0xbc, 0x71, 0xd7, 0x37, 0xa1, 0x92, 0x74, 0x66, 0xd8, 0xed, 0xe3, 0xec, 0x00, 0x76, 0xef, 0xe8,
+	0xe5, 0x20, 0x91, 0xbe, 0x2c, 0xf2, 0x4f, 0x51, 0x34, 0xd4, 0x0e, 0xe0, 0xee, 0x75, 0x37, 0x3d,
+	0x6f, 0xda, 0x37, 0xed, 0x17, 0xb0, 0xf2, 0xae, 0x5b, 0x91, 0xb7, 0xb6, 0x54, 0xbf, 0x80, 0xc5,
+	0x2b, 0xaf, 0x46, 0x7e, 0x97, 0xdc, 0x96, 0x2a, 0xcf, 0x46, 0x07, 0xca, 0x33, 0xed, 0xcf, 0x73,
+	0xf0, 0xe8, 0x7d, 0xef, 0x49, 0xde, 0xda, 0x0e, 0xfc, 0x0c, 0x50, 0xfa, 0xee, 0xa6, 0xec, 0x9b,
+	0xd8, 0x8e, 0x53, 0x29, 0x8d, 0xec, 0x63, 0x0f, 0x3e, 0x78, 0x8f, 0x1b, 0x95, 0xb7, 0x36, 0xfd,
+	0x2e, 0x3f, 0x8d, 0xde, 0x71, 0xab, 0xf2, 0xd6, 0xbc, 0xfd, 0x41, 0x0e, 0x3e, 0x7e, 0xbf, 0xfb,
+	0x95, 0xb7, 0x36, 0xfd, 0x4b, 0x50, 0x1a, 0xb8, 0x9c, 0x11, 0xb7, 0xb5, 0xff, 0xc8, 0x41, 0x79,
+	0x27, 0x20, 0x7d, 0x7f, 0x1f, 0xf3, 0x17, 0xba, 0x0f, 0x61, 0xc2, 0x89, 0x6e, 0xda, 0x44, 0x8e,
+	0x2b, 0xfc, 0x57, 0x25, 0x42, 0xd6, 0xb4, 0x51, 0x13, 0xaa, 0x09, 0x84, 0x7f, 0xb0, 0x10, 0x9f,
+	0x96, 0x93, 0x8b, 0xbe, 0x29, 0xc2, 0xd5, 0xf8, 0xde, 0x0e, 0xff, 0x86, 0x5c, 0x71, 0xd2, 0x4d,
+	0x74, 0x1f, 0xca, 0xec, 0x39, 0x2e, 0x2a, 0xf0, 0x47, 0xb9, 0x33, 0x56, 0xe0, 0x1f, 0x8a, 0x02,
+	0x3f, 0xfd, 0xe5, 0x20, 0xcf, 0x95, 0x71, 0x5b, 0xfb, 0x0d, 0xa8, 0x28, 0xdc, 0xa8, 0x08, 0xa3,
+	0x87, 0xad, 0x83, 0xda, 0x1d, 0x54, 0x83, 0x89, 0xc6, 0x61, 0xeb, 0xc0, 0x58, 0xdf, 0x31, 0x0e,
+	0x37, 0xdb, 0xbb, 0xb5, 0x1c, 0x9a, 0x82, 0x8a, 0x90, 0x3c, 0x96, 0xa2, 0x11, 0xed, 0xf7, 0x46,
+	0x60, 0x8c, 0xf7, 0x53, 0xf9, 0xa2, 0x20, 0x86, 0x1b, 0x7f, 0x51, 0xf8, 0x11, 0x14, 0x2d, 0xd2,
+	0xeb, 0x99, 0xf2, 0xe7, 0x15, 0x99, 0x31, 0xa6, 0x47, 0x1a, 0x6e, 0x09, 0xa4, 0x1e, 0x99, 0xa0,
+	0x55, 0x28, 0xf6, 0x84, 0x4a, 0x5e, 0x0c, 0x98, 0x19, 0x36, 0x43, 0x7a, 0x04, 0x4a, 0x7d, 0x50,
+	0xc9, 0x5f, 0xfb, 0x41, 0x45, 0xfb, 0x1a, 0xa6, 0x87, 0x38, 0x46, 0x93, 0x50, 0xde, 0xdc, 0xde,
+	0x36, 0xf6, 0x1b, 0xfb, 0x2f, 0x1b, 0xfa, 0x51, 0xed, 0x0e, 0x42, 0x50, 0xd5, 0x1b, 0xfb, 0xad,
+	0x37, 0x8d, 0x58, 0x96, 0x63, 0xa0, 0xa3, 0x46, 0x3b, 0x16, 0x8c, 0x68, 0xdf, 0x00, 0xbc, 0x31,
+	0xdd, 0x3e, 0x3e, 0x34, 0x03, 0xb3, 0x87, 0xee, 0xc3, 0x28, 0xf1, 0xfa, 0xf2, 0xd3, 0xde, 0x84,
+	0x72, 0x75, 0x9b, 0x29, 0xd0, 0x5a, 0xfa, 0xd3, 0x40, 0xb5, 0xbe, 0xb8, 0x1a, 0xff, 0x5e, 0x6a,
+	0x95, 0xb3, 0xb0, 0x95, 0x58, 0xe5, 0x4b, 0x2d, 0x70, 0xda, 0xdf, 0x8f, 0x40, 0xf5, 0x90, 0x78,
+	0xfa, 0xc5, 0x21, 0x39, 0xc7, 0xc1, 0xb6, 0x49, 0xcd, 0x5b, 0x8b, 0x6b, 0x5d, 0x4d, 0xb8, 0x79,
+	0xde, 0xa3, 0xf5, 0xd4, 0x0f, 0x80, 0xd2, 0x5e, 0x57, 0xf5, 0x30, 0x74, 0xf6, 0xb1, 0x19, 0xf6,
+	0x03, 0xbe, 0xb5, 0x87, 0x5f, 0x60, 0x95, 0x6f, 0xba, 0x7d, 0x66, 0x65, 0xf4, 0xb0, 0xe9, 0x19,
+	0xf6, 0x71, 0x8f, 0x57, 0x71, 0x39, 0xbd, 0x1a, 0x08, 0xb6, 0x7d, 0x6c, 0x7a, 0xdb, 0xc7, 0x3d,
+	0x76, 0x6c, 0x5f, 0xc9, 0x89, 0x66, 0xa0, 0x36, 0xe4, 0x82, 0xeb, 0x5d, 0x58, 0x50, 0xa5, 0xc6,
+	0x76, 0x63, 0xaf, 0xb9, 0xdf, 0x6c, 0x37, 0xf4, 0x5a, 0x0e, 0x2d, 0xc2, 0xec, 0x80, 0x76, 0x73,
+	0x6b, 0xab, 0x71, 0xc4, 0x16, 0xa9, 0x08, 0x63, 0x8d, 0x9e, 0x4f, 0x2f, 0xeb, 0x7f, 0x36, 0x03,
+	0xc5, 0x96, 0x18, 0x20, 0xda, 0x06, 0xd8, 0x76, 0x42, 0xf3, 0xd8, 0xc5, 0x2d, 0x97, 0xa2, 0x6a,
+	0x3c, 0x70, 0x8e, 0x5c, 0x1a, 0x68, 0x6b, 0x73, 0xbf, 0xfc, 0xa7, 0x7f, 0xf9, 0xf5, 0x48, 0x4d,
+	0x2b, 0xaf, 0x9d, 0xad, 0xaf, 0x49, 0xbb, 0x2f, 0x72, 0x9f, 0xa2, 0x57, 0x50, 0xd6, 0x31, 0xf6,
+	0xde, 0x97, 0x66, 0x9e, 0xd3, 0x4c, 0x69, 0x13, 0x8c, 0x26, 0x32, 0x64, 0x3c, 0x0d, 0x28, 0xcb,
+	0x6a, 0x0a, 0xb7, 0xbc, 0x3e, 0x52, 0x62, 0x27, 0xc3, 0xb2, 0xc0, 0x59, 0x90, 0x56, 0x61, 0x2c,
+	0x0d, 0xe1, 0xdc, 0xeb, 0x33, 0x9a, 0x5d, 0xa8, 0xc4, 0x59, 0xf7, 0x3d, 0x88, 0x16, 0x39, 0xd1,
+	0xb4, 0x56, 0x4d, 0x8d, 0x4a, 0x32, 0x6d, 0xc1, 0xf8, 0x36, 0x76, 0xf1, 0x8d, 0xbb, 0x13, 0x1b,
+	0x31, 0x92, 0x26, 0x80, 0xbc, 0xb2, 0xd6, 0xea, 0x53, 0x54, 0x53, 0x7e, 0xcb, 0xb6, 0x1f, 0x76,
+	0xaf, 0xef, 0x4f, 0x62, 0xc9, 0xa8, 0x5a, 0x30, 0x11, 0xdf, 0x57, 0x63, 0x64, 0x48, 0xf9, 0xfd,
+	0x00, 0x17, 0x67, 0xe8, 0x96, 0x39, 0xdd, 0xac, 0x56, 0xe3, 0x74, 0x29, 0x6b, 0x46, 0xf8, 0x5b,
+	0x30, 0x99, 0xbe, 0x79, 0xc6, 0x38, 0x93, 0x5b, 0x87, 0x69, 0x4d, 0x86, 0xf6, 0x3e, 0xa7, 0x5d,
+	0xd0, 0xa6, 0x19, 0xed, 0x00, 0x07, 0x63, 0xfe, 0x12, 0x8a, 0xaf, 0x5c, 0x72, 0xbe, 0x69, 0xdb,
+	0xa8, 0xa2, 0x7c, 0xa3, 0xbc, 0x3e, 0xaa, 0xa4, 0x8d, 0x88, 0x2a, 0x60, 0x2d, 0x9d, 0xdf, 0x51,
+	0x78, 0x17, 0x89, 0x32, 0x69, 0x89, 0x19, 0xe3, 0x39, 0x82, 0x6a, 0x7c, 0xa7, 0x73, 0xeb, 0x04,
+	0x5b, 0xa7, 0x99, 0x00, 0x4d, 0xa6, 0x31, 0x06, 0x6a, 0xf7, 0x38, 0xe1, 0xbc, 0x86, 0x18, 0xa1,
+	0x6a, 0xcf, 0x48, 0xf7, 0xa1, 0x2c, 0x62, 0xee, 0x90, 0x78, 0xcd, 0x4e, 0x6a, 0x21, 0xe2, 0x84,
+	0x92, 0xe9, 0xe2, 0x12, 0x67, 0x9c, 0xd1, 0x26, 0x93, 0x80, 0xe5, 0xc6, 0x72, 0x61, 0x65, 0xe4,
+	0xbd, 0x3f, 0x9f, 0xb2, 0xb0, 0x69, 0x6b, 0x46, 0xa8, 0x43, 0x65, 0x07, 0xd3, 0xd4, 0xcd, 0xc0,
+	0xc1, 0x31, 0x4f, 0x0f, 0xb9, 0xc5, 0xa5, 0xdd, 0xe5, 0x94, 0x73, 0xda, 0x14, 0xa3, 0x54, 0xec,
+	0x19, 0xe7, 0x4f, 0xa0, 0xa0, 0xe3, 0x63, 0x42, 0xde, 0xbd, 0xc3, 0x67, 0x39, 0xcf, 0xa4, 0x06,
+	0x62, 0x87, 0x33, 0x1b, 0x46, 0xf0, 0x1a, 0xa6, 0xb6, 0x88, 0xeb, 0x62, 0x2b, 0xfd, 0xe6, 0xee,
+	0x5d, 0x5c, 0x2b, 0x9c, 0x6b, 0x49, 0x9b, 0x65, 0x5c, 0x19, 0x73, 0x46, 0xfb, 0x53, 0xa8, 0xed,
+	0x60, 0xaa, 0xbe, 0xfc, 0x57, 0x37, 0xeb, 0xdc, 0xc0, 0x6f, 0x08, 0x25, 0x4a, 0x7b, 0xc0, 0xb9,
+	0x17, 0xb5, 0x19, 0x39, 0x5e, 0x45, 0xcb, 0xa8, 0x4f, 0x61, 0x66, 0x07, 0xd3, 0xec, 0xeb, 0xc6,
+	0x61, 0x1b, 0x2f, 0xf9, 0x51, 0x6c, 0x06, 0xaf, 0x7d, 0xc0, 0x1d, 0xdd, 0xd3, 0x16, 0xa4, 0xa3,
+	0x0c, 0x82, 0x39, 0x0b, 0x60, 0x7e, 0x2b, 0xc0, 0x26, 0xc5, 0xed, 0xc0, 0xec, 0x74, 0x1c, 0xeb,
+	0xc8, 0x3a, 0xc1, 0x76, 0xdf, 0x65, 0x79, 0xfd, 0xc1, 0xaa, 0xf2, 0xb3, 0xe4, 0x0c, 0x20, 0x33,
+	0x6b, 0x1f, 0x73, 0x87, 0x2b, 0xda, 0x32, 0x9f, 0xb5, 0xe1, 0xac, 0xd2, 0xa7, 0xd8, 0x29, 0xb7,
+	0xed, 0xf3, 0x0a, 0x56, 0xe6, 0xb3, 0x03, 0xd3, 0x4a, 0x8f, 0x7e, 0xb3, 0x8f, 0xfb, 0x38, 0x44,
+	0xcb, 0x43, 0xfd, 0x09, 0x65, 0xc6, 0x97, 0xc6, 0x7d, 0xdd, 0xd5, 0xe6, 0x33, 0xe3, 0x13, 0x06,
+	0xd2, 0x8f, 0xd2, 0x8b, 0xff, 0xb1, 0x9f, 0x21, 0x6c, 0xcc, 0xcf, 0x0f, 0xa1, 0x26, 0xb6, 0x73,
+	0xaa, 0xf0, 0xbe, 0x7a, 0xbb, 0x25, 0x20, 0xed, 0xce, 0xe3, 0x1c, 0xfa, 0x06, 0x66, 0x0f, 0x71,
+	0xd0, 0x21, 0x41, 0x8f, 0xd7, 0x63, 0x2d, 0x1f, 0x07, 0x83, 0x0c, 0x5c, 0x91, 0xe9, 0xd9, 0x87,
+	0xbc, 0x67, 0xf7, 0xb5, 0x45, 0xd6, 0xb3, 0xa1, 0x14, 0x22, 0xf9, 0x94, 0x45, 0x32, 0x12, 0x85,
+	0xea, 0xbb, 0x48, 0x95, 0x33, 0x2a, 0x65, 0xc8, 0xa8, 0xde, 0x42, 0x79, 0x07, 0xd3, 0xc6, 0x05,
+	0xe5, 0x55, 0x1a, 0x4a, 0x46, 0x94, 0xd4, 0x7e, 0x4b, 0xf3, 0xa9, 0x62, 0x4e, 0xc7, 0xb4, 0x1f,
+	0x78, 0x5c, 0x19, 0xaa, 0xc4, 0x29, 0x1a, 0x46, 0xfc, 0x0d, 0xff, 0x9d, 0x95, 0x78, 0x21, 0xc0,
+	0xdf, 0xcb, 0x1e, 0x61, 0x8a, 0xe6, 0x56, 0xe5, 0x4f, 0xec, 0x55, 0xd5, 0xf5, 0xc7, 0x43, 0x86,
+	0x86, 0xd1, 0xfb, 0xb0, 0xb8, 0x83, 0xe9, 0xde, 0xf0, 0x1b, 0xe8, 0xea, 0x39, 0xb1, 0xac, 0xfe,
+	0x48, 0x4e, 0xb9, 0x17, 0xaf, 0x3d, 0xe2, 0x9e, 0x34, 0xed, 0x9e, 0x1c, 0xc2, 0x70, 0x46, 0xe6,
+	0xf1, 0x04, 0x66, 0x87, 0xea, 0x6f, 0xe2, 0x4d, 0x59, 0xde, 0xa1, 0x6c, 0xcc, 0x53, 0x9b, 0x1f,
+	0xf3, 0x49, 0x99, 0x3a, 0xe0, 0x61, 0xfe, 0x8a, 0x4a, 0x36, 0x73, 0xd0, 0x27, 0xea, 0x2f, 0x72,
+	0x9f, 0xbe, 0xfc, 0x06, 0x96, 0x49, 0xd0, 0xe5, 0xb6, 0x16, 0x09, 0xec, 0x55, 0xf1, 0xdf, 0x1b,
+	0x44, 0x5c, 0x2f, 0x2b, 0x6f, 0x78, 0x9b, 0xd5, 0x90, 0xad, 0xbd, 0xf6, 0xcf, 0xd6, 0xba, 0x0e,
+	0x3d, 0xe9, 0x1f, 0xaf, 0x5a, 0xa4, 0xb7, 0x16, 0x99, 0xac, 0x09, 0x93, 0xcf, 0xe4, 0xff, 0x88,
+	0x70, 0xb6, 0xb1, 0xd6, 0x25, 0xd1, 0xff, 0xce, 0x70, 0x5c, 0xe0, 0xd2, 0x27, 0xff, 0x1d, 0x00,
+	0x00, 0xff, 0xff, 0x85, 0x04, 0xa7, 0x3a, 0xbd, 0x41, 0x00, 0x00,
 }
 
 // Reference imports to suppress errors if they are not otherwise used.
diff --git a/vendor/github.com/opencord/voltha-protos/v5/go/voltha/voltha.pb.go b/vendor/github.com/opencord/voltha-protos/v5/go/voltha/voltha.pb.go
index 217a597..d157d23 100644
--- a/vendor/github.com/opencord/voltha-protos/v5/go/voltha/voltha.pb.go
+++ b/vendor/github.com/opencord/voltha-protos/v5/go/voltha/voltha.pb.go
@@ -86,6 +86,7 @@
 const OperStatus_FAILED = OperStatus_Types(common.OperStatus_FAILED)
 const OperStatus_RECONCILING = OperStatus_Types(common.OperStatus_RECONCILING)
 const OperStatus_RECONCILING_FAILED = OperStatus_Types(common.OperStatus_RECONCILING_FAILED)
+const OperStatus_REBOOTED = OperStatus_Types(common.OperStatus_REBOOTED)
 
 // ConnectStatus_Types from public import voltha_protos/common.proto
 type ConnectStatus_Types = common.ConnectStatus_Types
diff --git a/vendor/modules.txt b/vendor/modules.txt
index 463d541..6ab283f 100644
--- a/vendor/modules.txt
+++ b/vendor/modules.txt
@@ -142,7 +142,7 @@
 github.com/opencord/voltha-lib-go/v7/pkg/probe
 github.com/opencord/voltha-lib-go/v7/pkg/techprofile
 github.com/opencord/voltha-lib-go/v7/pkg/version
-# github.com/opencord/voltha-protos/v5 v5.2.2
+# github.com/opencord/voltha-protos/v5 v5.2.5
 ## explicit
 github.com/opencord/voltha-protos/v5/go/adapter_service
 github.com/opencord/voltha-protos/v5/go/common