[VOL-4020]  voltha-lib-go changes for ONU SW upgrade, new Download, Activate,Retrieve APIs

Change-Id: Iaa87a1b74b5f2e25cb0ab43e47f1549683246951
diff --git a/VERSION b/VERSION
index cf78d5b..8089590 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-4.2.4
+4.3.0
diff --git a/go.mod b/go.mod
index ecf6b2c..6373b4d 100644
--- a/go.mod
+++ b/go.mod
@@ -21,7 +21,7 @@
 	github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4
 	github.com/jcmturner/gofork v1.0.0 // indirect
 	github.com/onsi/gomega v1.4.2 // indirect
-	github.com/opencord/voltha-protos/v4 v4.0.12
+	github.com/opencord/voltha-protos/v4 v4.1.1
 	github.com/opentracing/opentracing-go v1.1.0
 	github.com/phayes/freeport v0.0.0-20180830031419-95f893ade6f2
 	github.com/pierrec/lz4 v2.3.0+incompatible // indirect
diff --git a/go.sum b/go.sum
index 95e78b7..acbe659 100644
--- a/go.sum
+++ b/go.sum
@@ -136,8 +136,8 @@
 github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
 github.com/onsi/gomega v1.4.2 h1:3mYCb7aPxS/RU7TI1y4rkEn1oKmPRjNJLNEXgw7MH2I=
 github.com/onsi/gomega v1.4.2/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
-github.com/opencord/voltha-protos/v4 v4.0.12 h1:x8drb8inaUByjVLFbXSiQwRTU//dfde0MKIHyKb1JMw=
-github.com/opencord/voltha-protos/v4 v4.0.12/go.mod h1:W/OIFIyvFh/C0vchRUuarIsMylEhzCRM9pNxLvkPtKc=
+github.com/opencord/voltha-protos/v4 v4.1.1 h1:yovQHC+JQSrw5zxj0UeQqmyFUBQ+487JdG5w5ttrRyc=
+github.com/opencord/voltha-protos/v4 v4.1.1/go.mod h1:W/OIFIyvFh/C0vchRUuarIsMylEhzCRM9pNxLvkPtKc=
 github.com/opentracing/opentracing-go v1.1.0 h1:pWlfV3Bxv7k65HYwkikxat0+s3pV4bsqf19k25Ur8rU=
 github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
 github.com/phayes/freeport v0.0.0-20180830031419-95f893ade6f2 h1:JhzVVoYvbOACxoUmOs6V/G4D5nPVUW73rKvXxP4XUJc=
diff --git a/pkg/adapters/common/request_handler.go b/pkg/adapters/common/request_handler.go
index 5a333c7..020e799 100644
--- a/pkg/adapters/common/request_handler.go
+++ b/pkg/adapters/common/request_handler.go
@@ -835,3 +835,147 @@
 	logger.Debugw(ctx, "invoke rhp.adapter.Single_get_value_request ", log.Fields{"singleGetvalueReq": singleGetvalueReq})
 	return rhp.adapter.Single_get_value_request(ctx, singleGetvalueReq)
 }
+
+func (rhp *RequestHandlerProxy) getDeviceDownloadImageRequest(ctx context.Context, args []*ic.Argument) (*voltha.DeviceImageDownloadRequest, error) {
+	logger.Debugw(ctx, "getDeviceDownloadImageRequest", log.Fields{"args": args})
+	if len(args) < 1 {
+		logger.Warn(ctx, "invalid-number-of-args", log.Fields{"args": args})
+		return nil, errors.New("invalid-number-of-args")
+	}
+
+	deviceDownloadImageReq := ic.DeviceImageDownloadRequest{}
+
+	for _, arg := range args {
+		switch arg.Key {
+		case "deviceImageDownloadReq":
+			if err := ptypes.UnmarshalAny(arg.Value, &deviceDownloadImageReq); err != nil {
+				logger.Warnw(ctx, "cannot-unmarshal-device", log.Fields{"error": err})
+				return nil, err
+			}
+		default:
+			return nil, errors.New("invalid argument")
+		}
+	}
+	return &deviceDownloadImageReq, nil
+}
+
+func (rhp *RequestHandlerProxy) getDeviceImageRequest(ctx context.Context, args []*ic.Argument) (*voltha.DeviceImageRequest, error) {
+	logger.Debugw(ctx, "getDeviceImageRequest", log.Fields{"args": args})
+	if len(args) < 1 {
+		logger.Warn(ctx, "invalid-number-of-args", log.Fields{"args": args})
+		return nil, errors.New("invalid-number-of-args")
+	}
+
+	deviceImageReq := ic.DeviceImageRequest{}
+
+	for _, arg := range args {
+		switch arg.Key {
+		case "deviceImageReq":
+			if err := ptypes.UnmarshalAny(arg.Value, &deviceImageReq); err != nil {
+				logger.Warnw(ctx, "cannot-unmarshal-device", log.Fields{"error": err})
+				return nil, err
+			}
+		default:
+			return nil, errors.New("invalid argument")
+		}
+	}
+	return &deviceImageReq, nil
+}
+
+func (rhp *RequestHandlerProxy) getDeviceID(ctx context.Context, args []*ic.Argument) (string, error) {
+	logger.Debugw(ctx, "getDeviceID", log.Fields{"args": args})
+
+	deviceId := &ic.StrType{}
+
+	for _, arg := range args {
+		switch arg.Key {
+		case "deviceId":
+			if err := ptypes.UnmarshalAny(arg.Value, deviceId); err != nil {
+				logger.Warnw(ctx, "cannot-unmarshal-device", log.Fields{"error": err})
+				return "", err
+			}
+		default:
+			return "", errors.New("invalid argument")
+		}
+	}
+	return deviceId.Val, nil
+}
+
+func (rhp *RequestHandlerProxy) Download_onu_image(ctx context.Context, args []*ic.Argument) (*voltha.DeviceImageResponse, error) {
+	imageDownloadReq, err := rhp.getDeviceDownloadImageRequest(ctx, args)
+	if err != nil {
+		return nil, err
+	}
+
+	imageDownloadRsp, err := rhp.adapter.Download_onu_image(ctx, imageDownloadReq)
+	if err != nil {
+		return nil, status.Errorf(codes.NotFound, "%s", err.Error())
+	}
+	return imageDownloadRsp, nil
+}
+
+func (rhp *RequestHandlerProxy) Get_onu_image_status(ctx context.Context, args []*ic.Argument) (*voltha.DeviceImageResponse, error) {
+	imageStatusReq, err := rhp.getDeviceImageRequest(ctx, args)
+	if err != nil {
+		return nil, err
+	}
+
+	imageStatus, err := rhp.adapter.Get_onu_image_status(ctx, imageStatusReq)
+	if err != nil {
+		return nil, status.Errorf(codes.NotFound, "%s", err.Error())
+	}
+	return imageStatus, nil
+}
+
+func (rhp *RequestHandlerProxy) Abort_onu_image_upgrade(ctx context.Context, args []*ic.Argument) (*voltha.DeviceImageResponse, error) {
+	imageAbortReq, err := rhp.getDeviceImageRequest(ctx, args)
+	if err != nil {
+		return nil, err
+	}
+
+	imageAbortRsp, err := rhp.adapter.Abort_onu_image_upgrade(ctx, imageAbortReq)
+	if err != nil {
+		return nil, status.Errorf(codes.NotFound, "%s", err.Error())
+	}
+	return imageAbortRsp, nil
+}
+
+func (rhp *RequestHandlerProxy) Activate_onu_image(ctx context.Context, args []*ic.Argument) (*voltha.DeviceImageResponse, error) {
+	imageActivateReq, err := rhp.getDeviceImageRequest(ctx, args)
+	if err != nil {
+		return nil, err
+	}
+
+	imageActivateRsp, err := rhp.adapter.Activate_onu_image(ctx, imageActivateReq)
+	if err != nil {
+		return nil, status.Errorf(codes.NotFound, "%s", err.Error())
+	}
+	return imageActivateRsp, nil
+}
+
+func (rhp *RequestHandlerProxy) Commit_onu_image(ctx context.Context, args []*ic.Argument) (*voltha.DeviceImageResponse, error) {
+	imageCommitReq, err := rhp.getDeviceImageRequest(ctx, args)
+	if err != nil {
+		return nil, err
+	}
+
+	imageCommitRsp, err := rhp.adapter.Commit_onu_image(ctx, imageCommitReq)
+	if err != nil {
+		return nil, status.Errorf(codes.NotFound, "%s", err.Error())
+	}
+
+	return imageCommitRsp, nil
+}
+
+func (rhp *RequestHandlerProxy) Get_onu_images(ctx context.Context, args []*ic.Argument) (*voltha.OnuImages, error) {
+	deviceID, err := rhp.getDeviceID(ctx, args)
+	if err != nil {
+		return nil, err
+	}
+
+	onuImages, err := rhp.adapter.Get_onu_images(ctx, deviceID)
+	if err != nil {
+		return nil, status.Errorf(codes.NotFound, "%s", err.Error())
+	}
+	return onuImages, nil
+}
diff --git a/pkg/adapters/iAdapter.go b/pkg/adapters/iAdapter.go
index 92a33e7..fbf2b5d 100644
--- a/pkg/adapters/iAdapter.go
+++ b/pkg/adapters/iAdapter.go
@@ -57,4 +57,10 @@
 	Start_omci_test(ctx context.Context, device *voltha.Device, request *voltha.OmciTestRequest) (*voltha.TestResponse, error)
 	Get_ext_value(ctx context.Context, deviceId string, device *voltha.Device, valueflag voltha.ValueType_Type) (*voltha.ReturnValues, error)
 	Single_get_value_request(ctx context.Context, request extension.SingleGetValueRequest) (*extension.SingleGetValueResponse, error)
+	Download_onu_image(ctx context.Context, request *voltha.DeviceImageDownloadRequest) (*voltha.DeviceImageResponse, error)
+	Get_onu_image_status(ctx context.Context, in *voltha.DeviceImageRequest) (*voltha.DeviceImageResponse, error)
+	Abort_onu_image_upgrade(ctx context.Context, in *voltha.DeviceImageRequest) (*voltha.DeviceImageResponse, error)
+	Get_onu_images(ctx context.Context, deviceID string) (*voltha.OnuImages, error)
+	Activate_onu_image(ctx context.Context, in *voltha.DeviceImageRequest) (*voltha.DeviceImageResponse, error)
+	Commit_onu_image(ctx context.Context, in *voltha.DeviceImageRequest) (*voltha.DeviceImageResponse, error)
 }
diff --git a/vendor/github.com/opencord/voltha-protos/v4/go/common/common.pb.go b/vendor/github.com/opencord/voltha-protos/v4/go/common/common.pb.go
index 0956330..a370497 100644
--- a/vendor/github.com/opencord/voltha-protos/v4/go/common/common.pb.go
+++ b/vendor/github.com/opencord/voltha-protos/v4/go/common/common.pb.go
@@ -99,6 +99,8 @@
 	OperStatus_ACTIVE OperStatus_Types = 4
 	// The device has failed and cannot fulfill its intended role
 	OperStatus_FAILED OperStatus_Types = 5
+	// The device is reconciling
+	OperStatus_RECONCILING OperStatus_Types = 6
 )
 
 var OperStatus_Types_name = map[int32]string{
@@ -108,15 +110,17 @@
 	3: "TESTING",
 	4: "ACTIVE",
 	5: "FAILED",
+	6: "RECONCILING",
 }
 
 var OperStatus_Types_value = map[string]int32{
-	"UNKNOWN":    0,
-	"DISCOVERED": 1,
-	"ACTIVATING": 2,
-	"TESTING":    3,
-	"ACTIVE":     4,
-	"FAILED":     5,
+	"UNKNOWN":     0,
+	"DISCOVERED":  1,
+	"ACTIVATING":  2,
+	"TESTING":     3,
+	"ACTIVE":      4,
+	"FAILED":      5,
+	"RECONCILING": 6,
 }
 
 func (x OperStatus_Types) String() string {
@@ -165,18 +169,21 @@
 	OperationResp_OPERATION_SUCCESS     OperationResp_OperationReturnCode = 0
 	OperationResp_OPERATION_FAILURE     OperationResp_OperationReturnCode = 1
 	OperationResp_OPERATION_UNSUPPORTED OperationResp_OperationReturnCode = 2
+	OperationResp_OPERATION_IN_PROGRESS OperationResp_OperationReturnCode = 3
 )
 
 var OperationResp_OperationReturnCode_name = map[int32]string{
 	0: "OPERATION_SUCCESS",
 	1: "OPERATION_FAILURE",
 	2: "OPERATION_UNSUPPORTED",
+	3: "OPERATION_IN_PROGRESS",
 }
 
 var OperationResp_OperationReturnCode_value = map[string]int32{
 	"OPERATION_SUCCESS":     0,
 	"OPERATION_FAILURE":     1,
 	"OPERATION_UNSUPPORTED": 2,
+	"OPERATION_IN_PROGRESS": 3,
 }
 
 func (x OperationResp_OperationReturnCode) String() string {
@@ -596,43 +603,44 @@
 func init() { proto.RegisterFile("voltha_protos/common.proto", fileDescriptor_c2e3fd231961e826) }
 
 var fileDescriptor_c2e3fd231961e826 = []byte{
-	// 598 bytes of a gzipped FileDescriptorProto
+	// 619 bytes of a gzipped FileDescriptorProto
 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x53, 0x5f, 0x4f, 0xdb, 0x3e,
-	0x14, 0x6d, 0xd2, 0x96, 0x1f, 0xbd, 0xa5, 0x21, 0x3f, 0x03, 0x53, 0x87, 0x26, 0xad, 0xca, 0x0b,
-	0x6c, 0x62, 0xad, 0xc4, 0x78, 0xdd, 0x43, 0x48, 0x3c, 0x66, 0x01, 0x4e, 0xe5, 0x24, 0x45, 0xf0,
-	0xb0, 0x2a, 0x34, 0xa6, 0x44, 0xa2, 0x71, 0x94, 0xb8, 0x48, 0x7c, 0xd2, 0x7d, 0x9d, 0xc9, 0x4e,
-	0xf9, 0x37, 0xf5, 0x25, 0xf1, 0xb9, 0xe7, 0xe4, 0x1e, 0xdf, 0xe3, 0x18, 0xf6, 0x1f, 0xc5, 0x83,
-	0xbc, 0x4f, 0xa6, 0x45, 0x29, 0xa4, 0xa8, 0x46, 0x33, 0xb1, 0x58, 0x88, 0x7c, 0xa8, 0x11, 0xda,
-	0xa8, 0x91, 0xb3, 0x0b, 0x26, 0xf1, 0x91, 0x05, 0x66, 0x96, 0xf6, 0x8d, 0x81, 0x71, 0xd8, 0x61,
-	0x66, 0x96, 0x3a, 0x07, 0xd0, 0x24, 0x7e, 0x85, 0x06, 0xd0, 0xce, 0x24, 0x5f, 0x54, 0x7d, 0x63,
-	0xd0, 0x3c, 0xec, 0x1e, 0xc3, 0x70, 0xd5, 0x82, 0xf8, 0xac, 0x26, 0x9c, 0x7b, 0x00, 0x37, 0x5d,
-	0x64, 0x79, 0x28, 0x13, 0xc9, 0x9d, 0x1b, 0x68, 0x47, 0x4f, 0x05, 0xaf, 0x50, 0x17, 0xfe, 0x8b,
-	0xe9, 0x39, 0x0d, 0xae, 0xa8, 0xdd, 0x40, 0x08, 0xac, 0x31, 0xc3, 0x63, 0x16, 0x4c, 0x48, 0x48,
-	0x02, 0x8a, 0x7d, 0xdb, 0x50, 0x02, 0x4c, 0xdd, 0xd3, 0x0b, 0xec, 0xdb, 0x26, 0xda, 0x82, 0x4d,
-	0x9f, 0x84, 0x35, 0x6a, 0xa2, 0x3d, 0xf8, 0xdf, 0x0f, 0xae, 0xe8, 0x45, 0xe0, 0xfa, 0x84, 0x9e,
-	0x4d, 0xc9, 0xa5, 0x7b, 0x86, 0xed, 0x96, 0x33, 0x07, 0x08, 0x0a, 0x5e, 0x2a, 0xa3, 0x65, 0xe5,
-	0x5c, 0xaf, 0x75, 0xb2, 0x00, 0x7c, 0x12, 0x7a, 0xc1, 0x04, 0x33, 0xed, 0x62, 0x01, 0xb8, 0x5e,
-	0x44, 0x26, 0x6e, 0x44, 0xe8, 0x99, 0x6d, 0x2a, 0x71, 0x84, 0x43, 0x0d, 0x9a, 0x08, 0x60, 0x43,
-	0x93, 0xd8, 0x6e, 0xa9, 0xf5, 0x4f, 0x97, 0x28, 0xff, 0xb6, 0x83, 0xa1, 0xe7, 0x89, 0x3c, 0xe7,
-	0x33, 0xb9, 0xf2, 0x3a, 0x59, 0xeb, 0xb5, 0x0d, 0xdd, 0x98, 0x32, 0xec, 0x7a, 0xbf, 0xd4, 0xc6,
-	0x6d, 0x03, 0xf5, 0xa0, 0xf3, 0x0a, 0x4d, 0xe7, 0x8f, 0x01, 0x3d, 0xb5, 0xe1, 0x44, 0x66, 0x22,
-	0x67, 0xbc, 0x2a, 0xd0, 0x0f, 0x68, 0xcd, 0x44, 0xca, 0x75, 0xcc, 0xd6, 0xf1, 0x97, 0xe7, 0x30,
-	0xdf, 0x89, 0xde, 0x22, 0xb9, 0x2c, 0x73, 0x4f, 0xa4, 0x9c, 0xe9, 0xcf, 0xd0, 0x01, 0x6c, 0x27,
-	0x69, 0x9a, 0x29, 0x2e, 0x79, 0x98, 0x66, 0xf9, 0x9d, 0xe8, 0x9b, 0xfa, 0xc0, 0xac, 0xd7, 0x32,
-	0xc9, 0xef, 0x84, 0xf3, 0x1b, 0x76, 0xd6, 0x74, 0x51, 0xb9, 0x06, 0x63, 0xcc, 0xdc, 0x88, 0x04,
-	0x74, 0x1a, 0xc6, 0x9e, 0x87, 0xc3, 0xd0, 0x6e, 0xbc, 0x2f, 0xab, 0x10, 0x62, 0xa6, 0xa6, 0xf9,
-	0x08, 0x7b, 0xaf, 0xe5, 0x98, 0x86, 0xf1, 0x78, 0x1c, 0xb0, 0x48, 0x1d, 0x97, 0x73, 0x04, 0x9d,
-	0x49, 0xf2, 0xb0, 0xe4, 0x2a, 0x14, 0xe7, 0x33, 0xb4, 0xd4, 0x1b, 0x75, 0xa0, 0x8d, 0x2f, 0xc7,
-	0xd1, 0xb5, 0xdd, 0x58, 0x1d, 0x67, 0xe4, 0x52, 0x0f, 0xdb, 0x86, 0x43, 0xc1, 0xd2, 0xea, 0xb0,
-	0xe0, 0xb3, 0xec, 0x2e, 0xe3, 0xe5, 0xbf, 0x3f, 0x1b, 0x3a, 0x82, 0xf6, 0xa3, 0x52, 0xe8, 0x71,
-	0xac, 0xe3, 0x0f, 0xcf, 0xc1, 0xbc, 0x98, 0x0c, 0xd5, 0x83, 0xd5, 0x22, 0x47, 0xc2, 0x56, 0x3d,
-	0x94, 0xa6, 0x2b, 0x64, 0x43, 0x33, 0xe4, 0x52, 0xb7, 0xeb, 0x31, 0xb5, 0x44, 0x03, 0xe8, 0xc6,
-	0x79, 0xb5, 0x2c, 0x0a, 0x51, 0x4a, 0x9e, 0xea, 0xae, 0x3d, 0xf6, 0xb6, 0x84, 0x76, 0xa1, 0x8d,
-	0xcb, 0x52, 0x94, 0xfd, 0xa6, 0xe6, 0x6a, 0x80, 0xf6, 0x61, 0xd3, 0xcf, 0x2a, 0x99, 0xe4, 0x33,
-	0xde, 0x6f, 0x69, 0xe2, 0x05, 0x7f, 0xfd, 0x04, 0x5b, 0x11, 0xaf, 0xe4, 0xa5, 0x48, 0xf9, 0x39,
-	0x7f, 0xaa, 0xd4, 0x8c, 0x49, 0x91, 0x4d, 0x25, 0xaf, 0xa4, 0xdd, 0x38, 0xc5, 0xb0, 0x23, 0xca,
-	0xf9, 0x50, 0x14, 0x3c, 0x9f, 0x89, 0x32, 0x1d, 0xd6, 0xf7, 0xee, 0x66, 0x38, 0xcf, 0xe4, 0xfd,
-	0xf2, 0x56, 0xcd, 0x33, 0x7a, 0xe6, 0x46, 0x35, 0xf7, 0x6d, 0x75, 0x27, 0x1f, 0x4f, 0x46, 0x73,
-	0xb1, 0xba, 0x99, 0xb7, 0x1b, 0xba, 0xf8, 0xfd, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x7d, 0x32,
-	0x70, 0x38, 0xb8, 0x03, 0x00, 0x00,
+	0x14, 0x6d, 0x9b, 0xb6, 0x3f, 0x7a, 0x4b, 0x43, 0x7e, 0x06, 0xa6, 0x0e, 0x4d, 0x5a, 0x95, 0x17,
+	0xd8, 0xc4, 0x5a, 0x89, 0xf1, 0xba, 0x87, 0x90, 0x78, 0x9d, 0x05, 0x38, 0x91, 0x93, 0x14, 0x8d,
+	0x97, 0x2a, 0x34, 0x06, 0x32, 0xd1, 0x38, 0x4a, 0x5c, 0x34, 0xbe, 0xf6, 0x3e, 0xc1, 0x64, 0xa7,
+	0xfc, 0x9b, 0x78, 0x49, 0x7c, 0xee, 0x39, 0xb9, 0x47, 0xe7, 0x3a, 0x17, 0xf6, 0xee, 0xc5, 0x9d,
+	0xbc, 0x4d, 0xe6, 0x45, 0x29, 0xa4, 0xa8, 0x26, 0x0b, 0xb1, 0x5c, 0x8a, 0x7c, 0xac, 0x11, 0xea,
+	0xd6, 0xc8, 0xde, 0x81, 0x16, 0xf1, 0x90, 0x09, 0xad, 0x2c, 0x1d, 0x36, 0x47, 0xcd, 0x83, 0x1e,
+	0x6b, 0x65, 0xa9, 0xbd, 0x0f, 0x06, 0xf1, 0x2a, 0x34, 0x82, 0x4e, 0x26, 0xf9, 0xb2, 0x1a, 0x36,
+	0x47, 0xc6, 0x41, 0xff, 0x08, 0xc6, 0xeb, 0x16, 0xc4, 0x63, 0x35, 0x61, 0xdf, 0x02, 0x38, 0xe9,
+	0x32, 0xcb, 0x43, 0x99, 0x48, 0x6e, 0x5f, 0x42, 0x27, 0x7a, 0x28, 0x78, 0x85, 0xfa, 0xf0, 0x5f,
+	0x4c, 0x4f, 0xa9, 0x7f, 0x41, 0xad, 0x06, 0x42, 0x60, 0x06, 0x0c, 0x07, 0xcc, 0x9f, 0x91, 0x90,
+	0xf8, 0x14, 0x7b, 0x56, 0x53, 0x09, 0x30, 0x75, 0x4e, 0xce, 0xb0, 0x67, 0xb5, 0xd0, 0x26, 0x6c,
+	0x78, 0x24, 0xac, 0x91, 0x81, 0x76, 0xe1, 0x7f, 0xcf, 0xbf, 0xa0, 0x67, 0xbe, 0xe3, 0x11, 0x3a,
+	0x9d, 0x93, 0x73, 0x67, 0x8a, 0xad, 0xb6, 0xfd, 0x1b, 0xc0, 0x2f, 0x78, 0xa9, 0x8c, 0x56, 0x95,
+	0xfd, 0xeb, 0x4d, 0x27, 0x13, 0xc0, 0x23, 0xa1, 0xeb, 0xcf, 0x30, 0xd3, 0x2e, 0x26, 0x80, 0xe3,
+	0x46, 0x64, 0xe6, 0x44, 0x84, 0x4e, 0xad, 0x96, 0x12, 0x47, 0x38, 0xd4, 0xc0, 0x40, 0x00, 0x5d,
+	0x4d, 0x62, 0xab, 0xad, 0xce, 0xdf, 0x1d, 0xa2, 0xfc, 0x3b, 0x68, 0x0b, 0xfa, 0x0c, 0xbb, 0x3e,
+	0x75, 0xc9, 0x99, 0x12, 0x76, 0x6d, 0x0c, 0x03, 0x57, 0xe4, 0x39, 0x5f, 0xc8, 0xb5, 0xf9, 0xf1,
+	0x9b, 0xe6, 0x5b, 0xd0, 0x8f, 0x29, 0xc3, 0x8e, 0xfb, 0x43, 0x25, 0xb1, 0x9a, 0x68, 0x00, 0xbd,
+	0x67, 0xd8, 0xb2, 0xff, 0x34, 0x61, 0xa0, 0x12, 0x24, 0x32, 0x13, 0x39, 0xe3, 0x55, 0x81, 0xbe,
+	0x41, 0x7b, 0x21, 0x52, 0xae, 0xe7, 0x6e, 0x1e, 0x7d, 0x7a, 0x9c, 0xee, 0x2b, 0xd1, 0x4b, 0x24,
+	0x57, 0x65, 0xee, 0x8a, 0x94, 0x33, 0xfd, 0x19, 0xda, 0x87, 0xad, 0x24, 0x4d, 0x33, 0xc5, 0x25,
+	0x77, 0xf3, 0x2c, 0xbf, 0x16, 0xc3, 0x96, 0xbe, 0x41, 0xf3, 0xb9, 0x4c, 0xf2, 0x6b, 0x61, 0x3f,
+	0xc0, 0xf6, 0x1b, 0x5d, 0xd4, 0xa0, 0xfd, 0x00, 0x33, 0x27, 0x22, 0x3e, 0x9d, 0x87, 0xb1, 0xeb,
+	0xe2, 0x30, 0xb4, 0x1a, 0xaf, 0xcb, 0x6a, 0x2a, 0x31, 0x53, 0x69, 0xde, 0xc3, 0xee, 0x73, 0x39,
+	0xa6, 0x61, 0x1c, 0x04, 0x3e, 0x8b, 0xf4, 0xfd, 0xbd, 0xa2, 0x08, 0x9d, 0x07, 0xcc, 0x9f, 0x32,
+	0xd5, 0xcc, 0xb0, 0x0f, 0xa1, 0x37, 0x4b, 0xee, 0x56, 0x5c, 0xcd, 0xcb, 0xfe, 0x08, 0x6d, 0xf5,
+	0x46, 0x3d, 0xe8, 0xe0, 0xf3, 0x20, 0xfa, 0x69, 0x35, 0xd6, 0x57, 0x1f, 0x39, 0xd4, 0xc5, 0x56,
+	0xd3, 0xa6, 0x60, 0x6a, 0x75, 0x58, 0xf0, 0x45, 0x76, 0x9d, 0xf1, 0xf2, 0xdf, 0x1f, 0x13, 0x1d,
+	0x42, 0xe7, 0x5e, 0x29, 0x74, 0x52, 0xf3, 0xe8, 0xdd, 0xe3, 0xcc, 0x9e, 0x4c, 0xc6, 0xea, 0xc1,
+	0x6a, 0x91, 0x2d, 0x61, 0xb3, 0xce, 0xab, 0xe9, 0x0a, 0x59, 0x60, 0x84, 0x5c, 0xea, 0x76, 0x03,
+	0xa6, 0x8e, 0x68, 0x04, 0xfd, 0x38, 0xaf, 0x56, 0x45, 0x21, 0x4a, 0xc9, 0x53, 0xdd, 0x75, 0xc0,
+	0x5e, 0x96, 0xd0, 0x0e, 0x74, 0x70, 0x59, 0x8a, 0x72, 0x68, 0x68, 0xae, 0x06, 0x68, 0x0f, 0x36,
+	0xbc, 0xac, 0x92, 0x49, 0xbe, 0xe0, 0xc3, 0xb6, 0x26, 0x9e, 0xf0, 0xe7, 0x0f, 0xb0, 0x19, 0xf1,
+	0x4a, 0x9e, 0x8b, 0x94, 0x9f, 0xf2, 0x87, 0x4a, 0x65, 0x4c, 0x8a, 0x6c, 0x2e, 0x79, 0x25, 0xad,
+	0xc6, 0x09, 0x86, 0x6d, 0x51, 0xde, 0x8c, 0x45, 0xc1, 0xf3, 0x85, 0x28, 0xd3, 0x71, 0xbd, 0xa3,
+	0x97, 0xe3, 0x9b, 0x4c, 0xde, 0xae, 0xae, 0x54, 0x9e, 0xc9, 0x23, 0x37, 0xa9, 0xb9, 0x2f, 0xeb,
+	0xfd, 0xbd, 0x3f, 0x9e, 0xdc, 0x88, 0xf5, 0x16, 0x5f, 0x75, 0x75, 0xf1, 0xeb, 0xdf, 0x00, 0x00,
+	0x00, 0xff, 0xff, 0x4d, 0x6f, 0x2b, 0x79, 0xe4, 0x03, 0x00, 0x00,
 }
diff --git a/vendor/github.com/opencord/voltha-protos/v4/go/extension/extensions.pb.go b/vendor/github.com/opencord/voltha-protos/v4/go/extension/extensions.pb.go
index e6ebe01..ea6b404 100644
--- a/vendor/github.com/opencord/voltha-protos/v4/go/extension/extensions.pb.go
+++ b/vendor/github.com/opencord/voltha-protos/v4/go/extension/extensions.pb.go
@@ -10,6 +10,8 @@
 	empty "github.com/golang/protobuf/ptypes/empty"
 	config "github.com/opencord/voltha-protos/v4/go/ext/config"
 	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
 	math "math"
 )
 
@@ -1918,6 +1920,17 @@
 	SetExtValue(context.Context, *SingleSetValueRequest) (*SingleSetValueResponse, error)
 }
 
+// UnimplementedExtensionServer can be embedded to have forward compatible implementations.
+type UnimplementedExtensionServer struct {
+}
+
+func (*UnimplementedExtensionServer) GetExtValue(ctx context.Context, req *SingleGetValueRequest) (*SingleGetValueResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetExtValue not implemented")
+}
+func (*UnimplementedExtensionServer) SetExtValue(ctx context.Context, req *SingleSetValueRequest) (*SingleSetValueResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method SetExtValue not implemented")
+}
+
 func RegisterExtensionServer(s *grpc.Server, srv ExtensionServer) {
 	s.RegisterService(&_Extension_serviceDesc, srv)
 }
diff --git a/vendor/github.com/opencord/voltha-protos/v4/go/inter_container/inter_container.pb.go b/vendor/github.com/opencord/voltha-protos/v4/go/inter_container/inter_container.pb.go
index 752eecb..04f2b14 100644
--- a/vendor/github.com/opencord/voltha-protos/v4/go/inter_container/inter_container.pb.go
+++ b/vendor/github.com/opencord/voltha-protos/v4/go/inter_container/inter_container.pb.go
@@ -84,6 +84,7 @@
 const OperStatus_TESTING = OperStatus_Types(common.OperStatus_TESTING)
 const OperStatus_ACTIVE = OperStatus_Types(common.OperStatus_ACTIVE)
 const OperStatus_FAILED = OperStatus_Types(common.OperStatus_FAILED)
+const OperStatus_RECONCILING = OperStatus_Types(common.OperStatus_RECONCILING)
 
 // ConnectStatus_Types from public import voltha_protos/common.proto
 type ConnectStatus_Types = common.ConnectStatus_Types
@@ -104,6 +105,7 @@
 const OperationResp_OPERATION_SUCCESS = OperationResp_OperationReturnCode(common.OperationResp_OPERATION_SUCCESS)
 const OperationResp_OPERATION_FAILURE = OperationResp_OperationReturnCode(common.OperationResp_OPERATION_FAILURE)
 const OperationResp_OPERATION_UNSUPPORTED = OperationResp_OperationReturnCode(common.OperationResp_OPERATION_UNSUPPORTED)
+const OperationResp_OPERATION_IN_PROGRESS = OperationResp_OperationReturnCode(common.OperationResp_OPERATION_IN_PROGRESS)
 
 // ValueType_Type from public import voltha_protos/common.proto
 type ValueType_Type = common.ValueType_Type
@@ -160,6 +162,15 @@
 // Membership from public import voltha_protos/voltha.proto
 type Membership = voltha.Membership
 
+// DeviceImageDownloadRequest from public import voltha_protos/voltha.proto
+type DeviceImageDownloadRequest = voltha.DeviceImageDownloadRequest
+
+// DeviceImageRequest from public import voltha_protos/voltha.proto
+type DeviceImageRequest = voltha.DeviceImageRequest
+
+// DeviceImageResponse from public import voltha_protos/voltha.proto
+type DeviceImageResponse = voltha.DeviceImageResponse
+
 // FlowMetadata from public import voltha_protos/voltha.proto
 type FlowMetadata = voltha.FlowMetadata
 
diff --git a/vendor/github.com/opencord/voltha-protos/v4/go/voltha/device.pb.go b/vendor/github.com/opencord/voltha-protos/v4/go/voltha/device.pb.go
index 2499fd1..957af8f 100644
--- a/vendor/github.com/opencord/voltha-protos/v4/go/voltha/device.pb.go
+++ b/vendor/github.com/opencord/voltha-protos/v4/go/voltha/device.pb.go
@@ -91,7 +91,7 @@
 }
 
 func (ImageDownload_ImageDownloadState) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_200940f73d155856, []int{7, 0}
+	return fileDescriptor_200940f73d155856, []int{6, 0}
 }
 
 type ImageDownload_ImageDownloadFailureReason int32
@@ -128,7 +128,7 @@
 }
 
 func (ImageDownload_ImageDownloadFailureReason) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_200940f73d155856, []int{7, 1}
+	return fileDescriptor_200940f73d155856, []int{6, 1}
 }
 
 type ImageDownload_ImageActivateState int32
@@ -165,7 +165,151 @@
 }
 
 func (ImageDownload_ImageActivateState) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_200940f73d155856, []int{7, 2}
+	return fileDescriptor_200940f73d155856, []int{6, 2}
+}
+
+type ImageState_ImageDownloadState int32
+
+const (
+	ImageState_DOWNLOAD_UNKNOWN     ImageState_ImageDownloadState = 0
+	ImageState_DOWNLOAD_SUCCEEDED   ImageState_ImageDownloadState = 1
+	ImageState_DOWNLOAD_REQUESTED   ImageState_ImageDownloadState = 2
+	ImageState_DOWNLOAD_STARTED     ImageState_ImageDownloadState = 3
+	ImageState_DOWNLOAD_FAILED      ImageState_ImageDownloadState = 4
+	ImageState_DOWNLOAD_UNSUPPORTED ImageState_ImageDownloadState = 5
+	ImageState_DOWNLOAD_CANCELLING  ImageState_ImageDownloadState = 6
+	ImageState_DOWNLOAD_CANCELLED   ImageState_ImageDownloadState = 7
+)
+
+var ImageState_ImageDownloadState_name = map[int32]string{
+	0: "DOWNLOAD_UNKNOWN",
+	1: "DOWNLOAD_SUCCEEDED",
+	2: "DOWNLOAD_REQUESTED",
+	3: "DOWNLOAD_STARTED",
+	4: "DOWNLOAD_FAILED",
+	5: "DOWNLOAD_UNSUPPORTED",
+	6: "DOWNLOAD_CANCELLING",
+	7: "DOWNLOAD_CANCELLED",
+}
+
+var ImageState_ImageDownloadState_value = map[string]int32{
+	"DOWNLOAD_UNKNOWN":     0,
+	"DOWNLOAD_SUCCEEDED":   1,
+	"DOWNLOAD_REQUESTED":   2,
+	"DOWNLOAD_STARTED":     3,
+	"DOWNLOAD_FAILED":      4,
+	"DOWNLOAD_UNSUPPORTED": 5,
+	"DOWNLOAD_CANCELLING":  6,
+	"DOWNLOAD_CANCELLED":   7,
+}
+
+func (x ImageState_ImageDownloadState) String() string {
+	return proto.EnumName(ImageState_ImageDownloadState_name, int32(x))
+}
+
+func (ImageState_ImageDownloadState) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_200940f73d155856, []int{12, 0}
+}
+
+type ImageState_ImageFailureReason int32
+
+const (
+	ImageState_NO_ERROR               ImageState_ImageFailureReason = 0
+	ImageState_INVALID_URL            ImageState_ImageFailureReason = 1
+	ImageState_DEVICE_BUSY            ImageState_ImageFailureReason = 2
+	ImageState_INSUFFICIENT_SPACE     ImageState_ImageFailureReason = 3
+	ImageState_UNKNOWN_ERROR          ImageState_ImageFailureReason = 4
+	ImageState_CANCELLED_ON_REQUEST   ImageState_ImageFailureReason = 5
+	ImageState_CANCELLED_ON_ONU_STATE ImageState_ImageFailureReason = 6
+	ImageState_VENDOR_DEVICE_MISMATCH ImageState_ImageFailureReason = 7
+	ImageState_OMCI_TRANSFER_ERROR    ImageState_ImageFailureReason = 8
+	ImageState_IMAGE_REFUSED_BY_ONU   ImageState_ImageFailureReason = 9
+)
+
+var ImageState_ImageFailureReason_name = map[int32]string{
+	0: "NO_ERROR",
+	1: "INVALID_URL",
+	2: "DEVICE_BUSY",
+	3: "INSUFFICIENT_SPACE",
+	4: "UNKNOWN_ERROR",
+	5: "CANCELLED_ON_REQUEST",
+	6: "CANCELLED_ON_ONU_STATE",
+	7: "VENDOR_DEVICE_MISMATCH",
+	8: "OMCI_TRANSFER_ERROR",
+	9: "IMAGE_REFUSED_BY_ONU",
+}
+
+var ImageState_ImageFailureReason_value = map[string]int32{
+	"NO_ERROR":               0,
+	"INVALID_URL":            1,
+	"DEVICE_BUSY":            2,
+	"INSUFFICIENT_SPACE":     3,
+	"UNKNOWN_ERROR":          4,
+	"CANCELLED_ON_REQUEST":   5,
+	"CANCELLED_ON_ONU_STATE": 6,
+	"VENDOR_DEVICE_MISMATCH": 7,
+	"OMCI_TRANSFER_ERROR":    8,
+	"IMAGE_REFUSED_BY_ONU":   9,
+}
+
+func (x ImageState_ImageFailureReason) String() string {
+	return proto.EnumName(ImageState_ImageFailureReason_name, int32(x))
+}
+
+func (ImageState_ImageFailureReason) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_200940f73d155856, []int{12, 1}
+}
+
+type ImageState_ImageActivationState int32
+
+const (
+	ImageState_IMAGE_UNKNOWN             ImageState_ImageActivationState = 0
+	ImageState_IMAGE_INACTIVE            ImageState_ImageActivationState = 1
+	ImageState_IMAGE_ACTIVATING          ImageState_ImageActivationState = 2
+	ImageState_IMAGE_ACTIVE              ImageState_ImageActivationState = 3
+	ImageState_IMAGE_COMMITTING          ImageState_ImageActivationState = 4
+	ImageState_IMAGE_COMMITTED           ImageState_ImageActivationState = 5
+	ImageState_IMAGE_ACTIVATION_ABORTING ImageState_ImageActivationState = 6
+	ImageState_IMAGE_ACTIVATION_ABORTED  ImageState_ImageActivationState = 7
+	ImageState_IMAGE_COMMIT_ABORTING     ImageState_ImageActivationState = 8
+	ImageState_IMAGE_COMMIT_ABORTED      ImageState_ImageActivationState = 9
+	ImageState_IMAGE_DOWNLOADING         ImageState_ImageActivationState = 10
+)
+
+var ImageState_ImageActivationState_name = map[int32]string{
+	0:  "IMAGE_UNKNOWN",
+	1:  "IMAGE_INACTIVE",
+	2:  "IMAGE_ACTIVATING",
+	3:  "IMAGE_ACTIVE",
+	4:  "IMAGE_COMMITTING",
+	5:  "IMAGE_COMMITTED",
+	6:  "IMAGE_ACTIVATION_ABORTING",
+	7:  "IMAGE_ACTIVATION_ABORTED",
+	8:  "IMAGE_COMMIT_ABORTING",
+	9:  "IMAGE_COMMIT_ABORTED",
+	10: "IMAGE_DOWNLOADING",
+}
+
+var ImageState_ImageActivationState_value = map[string]int32{
+	"IMAGE_UNKNOWN":             0,
+	"IMAGE_INACTIVE":            1,
+	"IMAGE_ACTIVATING":          2,
+	"IMAGE_ACTIVE":              3,
+	"IMAGE_COMMITTING":          4,
+	"IMAGE_COMMITTED":           5,
+	"IMAGE_ACTIVATION_ABORTING": 6,
+	"IMAGE_ACTIVATION_ABORTED":  7,
+	"IMAGE_COMMIT_ABORTING":     8,
+	"IMAGE_COMMIT_ABORTED":      9,
+	"IMAGE_DOWNLOADING":         10,
+}
+
+func (x ImageState_ImageActivationState) String() string {
+	return proto.EnumName(ImageState_ImageActivationState_name, int32(x))
+}
+
+func (ImageState_ImageActivationState) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_200940f73d155856, []int{12, 2}
 }
 
 type Port_PortType int32
@@ -205,7 +349,7 @@
 }
 
 func (Port_PortType) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_200940f73d155856, []int{9, 0}
+	return fileDescriptor_200940f73d155856, []int{13, 0}
 }
 
 type SimulateAlarmRequest_OperationType int32
@@ -230,7 +374,7 @@
 }
 
 func (SimulateAlarmRequest_OperationType) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_200940f73d155856, []int{13, 0}
+	return fileDescriptor_200940f73d155856, []int{17, 0}
 }
 
 // A Device Type
@@ -581,26 +725,47 @@
 	return 0
 }
 
-// Describes instance of software image on the device
+//Object representing an image
 type Image struct {
-	Name            string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
-	Version         string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"`
-	Hash            string `protobuf:"bytes,3,opt,name=hash,proto3" json:"hash,omitempty"`
+	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	// Version, this is the sole identifier of the image. it's the vendor specified OMCI version
+	// must be known at the time of initiating a download, activate, commit image on an onu.
+	Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"`
+	// hash of the image to be verified against
+	// Deprecated in voltha 2.8, will be removed
+	Hash uint32 `protobuf:"varint,3,opt,name=hash,proto3" json:"hash,omitempty"`
+	// Deprecated in voltha 2.8, will be removed
 	InstallDatetime string `protobuf:"bytes,4,opt,name=install_datetime,json=installDatetime,proto3" json:"install_datetime,omitempty"`
 	// The active software image is one that is currently loaded and executing
 	// in the ONU or circuit pack. Under normal operation, one software image
 	// is always active while the other is inactive. Under no circumstances are
 	// both software images allowed to be active at the same time
+	// Deprecated in voltha 2.8, will be removed
 	IsActive bool `protobuf:"varint,5,opt,name=is_active,json=isActive,proto3" json:"is_active,omitempty"`
 	// The committed software image is loaded and executed upon reboot of the
 	// ONU and/or circuit pack. During normal operation, one software image is
 	// always committed, while the other is uncommitted.
+	// Deprecated in voltha 2.8, will be removed
 	IsCommitted bool `protobuf:"varint,6,opt,name=is_committed,json=isCommitted,proto3" json:"is_committed,omitempty"`
 	// A software image is valid if it has been verified to be an executable
 	// code image. The verification mechanism is not subject to standardization;
 	// however, it should include at least a data integrity (e.g., CRC) check of
 	// the entire code image.
-	IsValid              bool     `protobuf:"varint,7,opt,name=is_valid,json=isValid,proto3" json:"is_valid,omitempty"`
+	// Deprecated in voltha 2.8, will be removed
+	IsValid bool `protobuf:"varint,7,opt,name=is_valid,json=isValid,proto3" json:"is_valid,omitempty"`
+	// URL where the image is available
+	// URL MUST be fully qualified,
+	// including filename, username and password
+	Url string `protobuf:"bytes,8,opt,name=url,proto3" json:"url,omitempty"`
+	// Represents the vendor/device mfr
+	// Needs to match the vendor of the device the image will be installed on
+	// optional, if not matched no check will be performed
+	Vendor string `protobuf:"bytes,9,opt,name=vendor,proto3" json:"vendor,omitempty"`
+	// Represents the ONU Image CRC value.
+	// Default to value 0 if not specified.
+	// If different then 0 it's used to verify the image retrieved from outside before sending it to the ONU.
+	// Calculation of this needs to be done according to ITU-T I.363.5 as per OMCI spec (section A.2.27)
+	Crc32                uint32   `protobuf:"varint,10,opt,name=crc32,proto3" json:"crc32,omitempty"`
 	XXX_NoUnkeyedLiteral struct{} `json:"-"`
 	XXX_unrecognized     []byte   `json:"-"`
 	XXX_sizecache        int32    `json:"-"`
@@ -645,11 +810,11 @@
 	return ""
 }
 
-func (m *Image) GetHash() string {
+func (m *Image) GetHash() uint32 {
 	if m != nil {
 		return m.Hash
 	}
-	return ""
+	return 0
 }
 
 func (m *Image) GetInstallDatetime() string {
@@ -680,47 +845,29 @@
 	return false
 }
 
-// List of software on the device
-type Images struct {
-	Image                []*Image `protobuf:"bytes,1,rep,name=image,proto3" json:"image,omitempty"`
-	XXX_NoUnkeyedLiteral struct{} `json:"-"`
-	XXX_unrecognized     []byte   `json:"-"`
-	XXX_sizecache        int32    `json:"-"`
-}
-
-func (m *Images) Reset()         { *m = Images{} }
-func (m *Images) String() string { return proto.CompactTextString(m) }
-func (*Images) ProtoMessage()    {}
-func (*Images) Descriptor() ([]byte, []int) {
-	return fileDescriptor_200940f73d155856, []int{6}
-}
-
-func (m *Images) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_Images.Unmarshal(m, b)
-}
-func (m *Images) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_Images.Marshal(b, m, deterministic)
-}
-func (m *Images) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_Images.Merge(m, src)
-}
-func (m *Images) XXX_Size() int {
-	return xxx_messageInfo_Images.Size(m)
-}
-func (m *Images) XXX_DiscardUnknown() {
-	xxx_messageInfo_Images.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_Images proto.InternalMessageInfo
-
-func (m *Images) GetImage() []*Image {
+func (m *Image) GetUrl() string {
 	if m != nil {
-		return m.Image
+		return m.Url
 	}
-	return nil
+	return ""
 }
 
-//TODO: ImageDownload is not actively used (05/19/2020).  When this is tackled, can remove extra/unnecessary fields.
+func (m *Image) GetVendor() string {
+	if m != nil {
+		return m.Vendor
+	}
+	return ""
+}
+
+func (m *Image) GetCrc32() uint32 {
+	if m != nil {
+		return m.Crc32
+	}
+	return 0
+}
+
+// Older version of the API please see DeviceImageDownloadRequest
+// Deprecated in voltha 2.8, will be removed
 type ImageDownload struct {
 	// Device Identifier
 	Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
@@ -758,7 +905,7 @@
 func (m *ImageDownload) String() string { return proto.CompactTextString(m) }
 func (*ImageDownload) ProtoMessage()    {}
 func (*ImageDownload) Descriptor() ([]byte, []int) {
-	return fileDescriptor_200940f73d155856, []int{7}
+	return fileDescriptor_200940f73d155856, []int{6}
 }
 
 func (m *ImageDownload) XXX_Unmarshal(b []byte) error {
@@ -870,6 +1017,7 @@
 	return 0
 }
 
+// Deprecated in voltha 2.8, will be removed
 type ImageDownloads struct {
 	Items                []*ImageDownload `protobuf:"bytes,2,rep,name=items,proto3" json:"items,omitempty"`
 	XXX_NoUnkeyedLiteral struct{}         `json:"-"`
@@ -881,7 +1029,7 @@
 func (m *ImageDownloads) String() string { return proto.CompactTextString(m) }
 func (*ImageDownloads) ProtoMessage()    {}
 func (*ImageDownloads) Descriptor() ([]byte, []int) {
-	return fileDescriptor_200940f73d155856, []int{8}
+	return fileDescriptor_200940f73d155856, []int{7}
 }
 
 func (m *ImageDownloads) XXX_Unmarshal(b []byte) error {
@@ -909,6 +1057,282 @@
 	return nil
 }
 
+type Images struct {
+	Image                []*Image `protobuf:"bytes,1,rep,name=image,proto3" json:"image,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *Images) Reset()         { *m = Images{} }
+func (m *Images) String() string { return proto.CompactTextString(m) }
+func (*Images) ProtoMessage()    {}
+func (*Images) Descriptor() ([]byte, []int) {
+	return fileDescriptor_200940f73d155856, []int{8}
+}
+
+func (m *Images) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Images.Unmarshal(m, b)
+}
+func (m *Images) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Images.Marshal(b, m, deterministic)
+}
+func (m *Images) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Images.Merge(m, src)
+}
+func (m *Images) XXX_Size() int {
+	return xxx_messageInfo_Images.Size(m)
+}
+func (m *Images) XXX_DiscardUnknown() {
+	xxx_messageInfo_Images.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Images proto.InternalMessageInfo
+
+func (m *Images) GetImage() []*Image {
+	if m != nil {
+		return m.Image
+	}
+	return nil
+}
+
+// OnuImage represents the OMCI information as per OMCI spec
+// the information will be populates exactly as extracted from the device.
+type OnuImage struct {
+	//image version
+	Version     string `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"`
+	IsCommited  bool   `protobuf:"varint,2,opt,name=isCommited,proto3" json:"isCommited,omitempty"`
+	IsActive    bool   `protobuf:"varint,3,opt,name=isActive,proto3" json:"isActive,omitempty"`
+	IsValid     bool   `protobuf:"varint,4,opt,name=isValid,proto3" json:"isValid,omitempty"`
+	ProductCode string `protobuf:"bytes,5,opt,name=productCode,proto3" json:"productCode,omitempty"`
+	// Hash is computed by the ONU and is optional as per OMCI spec (paragraph 9.1.4)
+	// No assumption should be made on the existence of this attribute at any time.
+	Hash                 string   `protobuf:"bytes,6,opt,name=hash,proto3" json:"hash,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *OnuImage) Reset()         { *m = OnuImage{} }
+func (m *OnuImage) String() string { return proto.CompactTextString(m) }
+func (*OnuImage) ProtoMessage()    {}
+func (*OnuImage) Descriptor() ([]byte, []int) {
+	return fileDescriptor_200940f73d155856, []int{9}
+}
+
+func (m *OnuImage) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OnuImage.Unmarshal(m, b)
+}
+func (m *OnuImage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OnuImage.Marshal(b, m, deterministic)
+}
+func (m *OnuImage) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OnuImage.Merge(m, src)
+}
+func (m *OnuImage) XXX_Size() int {
+	return xxx_messageInfo_OnuImage.Size(m)
+}
+func (m *OnuImage) XXX_DiscardUnknown() {
+	xxx_messageInfo_OnuImage.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OnuImage proto.InternalMessageInfo
+
+func (m *OnuImage) GetVersion() string {
+	if m != nil {
+		return m.Version
+	}
+	return ""
+}
+
+func (m *OnuImage) GetIsCommited() bool {
+	if m != nil {
+		return m.IsCommited
+	}
+	return false
+}
+
+func (m *OnuImage) GetIsActive() bool {
+	if m != nil {
+		return m.IsActive
+	}
+	return false
+}
+
+func (m *OnuImage) GetIsValid() bool {
+	if m != nil {
+		return m.IsValid
+	}
+	return false
+}
+
+func (m *OnuImage) GetProductCode() string {
+	if m != nil {
+		return m.ProductCode
+	}
+	return ""
+}
+
+func (m *OnuImage) GetHash() string {
+	if m != nil {
+		return m.Hash
+	}
+	return ""
+}
+
+type OnuImages struct {
+	Items                []*OnuImage `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}    `json:"-"`
+	XXX_unrecognized     []byte      `json:"-"`
+	XXX_sizecache        int32       `json:"-"`
+}
+
+func (m *OnuImages) Reset()         { *m = OnuImages{} }
+func (m *OnuImages) String() string { return proto.CompactTextString(m) }
+func (*OnuImages) ProtoMessage()    {}
+func (*OnuImages) Descriptor() ([]byte, []int) {
+	return fileDescriptor_200940f73d155856, []int{10}
+}
+
+func (m *OnuImages) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OnuImages.Unmarshal(m, b)
+}
+func (m *OnuImages) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OnuImages.Marshal(b, m, deterministic)
+}
+func (m *OnuImages) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OnuImages.Merge(m, src)
+}
+func (m *OnuImages) XXX_Size() int {
+	return xxx_messageInfo_OnuImages.Size(m)
+}
+func (m *OnuImages) XXX_DiscardUnknown() {
+	xxx_messageInfo_OnuImages.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OnuImages proto.InternalMessageInfo
+
+func (m *OnuImages) GetItems() []*OnuImage {
+	if m != nil {
+		return m.Items
+	}
+	return nil
+}
+
+type DeviceImageState struct {
+	DeviceId             string      `protobuf:"bytes,1,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"`
+	ImageState           *ImageState `protobuf:"bytes,2,opt,name=imageState,proto3" json:"imageState,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}    `json:"-"`
+	XXX_unrecognized     []byte      `json:"-"`
+	XXX_sizecache        int32       `json:"-"`
+}
+
+func (m *DeviceImageState) Reset()         { *m = DeviceImageState{} }
+func (m *DeviceImageState) String() string { return proto.CompactTextString(m) }
+func (*DeviceImageState) ProtoMessage()    {}
+func (*DeviceImageState) Descriptor() ([]byte, []int) {
+	return fileDescriptor_200940f73d155856, []int{11}
+}
+
+func (m *DeviceImageState) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DeviceImageState.Unmarshal(m, b)
+}
+func (m *DeviceImageState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DeviceImageState.Marshal(b, m, deterministic)
+}
+func (m *DeviceImageState) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DeviceImageState.Merge(m, src)
+}
+func (m *DeviceImageState) XXX_Size() int {
+	return xxx_messageInfo_DeviceImageState.Size(m)
+}
+func (m *DeviceImageState) XXX_DiscardUnknown() {
+	xxx_messageInfo_DeviceImageState.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DeviceImageState proto.InternalMessageInfo
+
+func (m *DeviceImageState) GetDeviceId() string {
+	if m != nil {
+		return m.DeviceId
+	}
+	return ""
+}
+
+func (m *DeviceImageState) GetImageState() *ImageState {
+	if m != nil {
+		return m.ImageState
+	}
+	return nil
+}
+
+type ImageState struct {
+	// image version
+	Version string `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"`
+	// Download state
+	DownloadState ImageState_ImageDownloadState `protobuf:"varint,2,opt,name=download_state,json=downloadState,proto3,enum=voltha.ImageState_ImageDownloadState" json:"download_state,omitempty"`
+	// Image Operation Failure reason (use for both Download and Activate)
+	Reason ImageState_ImageFailureReason `protobuf:"varint,3,opt,name=reason,proto3,enum=voltha.ImageState_ImageFailureReason" json:"reason,omitempty"`
+	// Image activation state
+	ImageState           ImageState_ImageActivationState `protobuf:"varint,4,opt,name=image_state,json=imageState,proto3,enum=voltha.ImageState_ImageActivationState" json:"image_state,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                        `json:"-"`
+	XXX_unrecognized     []byte                          `json:"-"`
+	XXX_sizecache        int32                           `json:"-"`
+}
+
+func (m *ImageState) Reset()         { *m = ImageState{} }
+func (m *ImageState) String() string { return proto.CompactTextString(m) }
+func (*ImageState) ProtoMessage()    {}
+func (*ImageState) Descriptor() ([]byte, []int) {
+	return fileDescriptor_200940f73d155856, []int{12}
+}
+
+func (m *ImageState) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ImageState.Unmarshal(m, b)
+}
+func (m *ImageState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ImageState.Marshal(b, m, deterministic)
+}
+func (m *ImageState) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ImageState.Merge(m, src)
+}
+func (m *ImageState) XXX_Size() int {
+	return xxx_messageInfo_ImageState.Size(m)
+}
+func (m *ImageState) XXX_DiscardUnknown() {
+	xxx_messageInfo_ImageState.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ImageState proto.InternalMessageInfo
+
+func (m *ImageState) GetVersion() string {
+	if m != nil {
+		return m.Version
+	}
+	return ""
+}
+
+func (m *ImageState) GetDownloadState() ImageState_ImageDownloadState {
+	if m != nil {
+		return m.DownloadState
+	}
+	return ImageState_DOWNLOAD_UNKNOWN
+}
+
+func (m *ImageState) GetReason() ImageState_ImageFailureReason {
+	if m != nil {
+		return m.Reason
+	}
+	return ImageState_NO_ERROR
+}
+
+func (m *ImageState) GetImageState() ImageState_ImageActivationState {
+	if m != nil {
+		return m.ImageState
+	}
+	return ImageState_IMAGE_UNKNOWN
+}
+
 type Port struct {
 	PortNo     uint32                  `protobuf:"varint,1,opt,name=port_no,json=portNo,proto3" json:"port_no,omitempty"`
 	Label      string                  `protobuf:"bytes,2,opt,name=label,proto3" json:"label,omitempty"`
@@ -936,7 +1360,7 @@
 func (m *Port) String() string { return proto.CompactTextString(m) }
 func (*Port) ProtoMessage()    {}
 func (*Port) Descriptor() ([]byte, []int) {
-	return fileDescriptor_200940f73d155856, []int{9}
+	return fileDescriptor_200940f73d155856, []int{13}
 }
 
 func (m *Port) XXX_Unmarshal(b []byte) error {
@@ -1067,7 +1491,7 @@
 func (m *Port_PeerPort) String() string { return proto.CompactTextString(m) }
 func (*Port_PeerPort) ProtoMessage()    {}
 func (*Port_PeerPort) Descriptor() ([]byte, []int) {
-	return fileDescriptor_200940f73d155856, []int{9, 0}
+	return fileDescriptor_200940f73d155856, []int{13, 0}
 }
 
 func (m *Port_PeerPort) XXX_Unmarshal(b []byte) error {
@@ -1113,7 +1537,7 @@
 func (m *Ports) String() string { return proto.CompactTextString(m) }
 func (*Ports) ProtoMessage()    {}
 func (*Ports) Descriptor() ([]byte, []int) {
-	return fileDescriptor_200940f73d155856, []int{10}
+	return fileDescriptor_200940f73d155856, []int{14}
 }
 
 func (m *Ports) XXX_Unmarshal(b []byte) error {
@@ -1163,7 +1587,7 @@
 	Images       *Images `protobuf:"bytes,9,opt,name=images,proto3" json:"images,omitempty"`
 	SerialNumber string  `protobuf:"bytes,10,opt,name=serial_number,json=serialNumber,proto3" json:"serial_number,omitempty"`
 	VendorId     string  `protobuf:"bytes,24,opt,name=vendor_id,json=vendorId,proto3" json:"vendor_id,omitempty"`
-	// Addapter that takes care of device
+	// Adapter that takes care of device
 	Adapter string `protobuf:"bytes,11,opt,name=adapter,proto3" json:"adapter,omitempty"`
 	// Device contact on vlan (if 0, no vlan)
 	Vlan uint32 `protobuf:"varint,12,opt,name=vlan,proto3" json:"vlan,omitempty"`
@@ -1195,7 +1619,7 @@
 func (m *Device) String() string { return proto.CompactTextString(m) }
 func (*Device) ProtoMessage()    {}
 func (*Device) Descriptor() ([]byte, []int) {
-	return fileDescriptor_200940f73d155856, []int{11}
+	return fileDescriptor_200940f73d155856, []int{15}
 }
 
 func (m *Device) XXX_Unmarshal(b []byte) error {
@@ -1460,7 +1884,7 @@
 func (m *Device_ProxyAddress) String() string { return proto.CompactTextString(m) }
 func (*Device_ProxyAddress) ProtoMessage()    {}
 func (*Device_ProxyAddress) Descriptor() ([]byte, []int) {
-	return fileDescriptor_200940f73d155856, []int{11, 0}
+	return fileDescriptor_200940f73d155856, []int{15, 0}
 }
 
 func (m *Device_ProxyAddress) XXX_Unmarshal(b []byte) error {
@@ -1541,7 +1965,7 @@
 func (m *Devices) String() string { return proto.CompactTextString(m) }
 func (*Devices) ProtoMessage()    {}
 func (*Devices) Descriptor() ([]byte, []int) {
-	return fileDescriptor_200940f73d155856, []int{12}
+	return fileDescriptor_200940f73d155856, []int{16}
 }
 
 func (m *Devices) XXX_Unmarshal(b []byte) error {
@@ -1590,7 +2014,7 @@
 func (m *SimulateAlarmRequest) String() string { return proto.CompactTextString(m) }
 func (*SimulateAlarmRequest) ProtoMessage()    {}
 func (*SimulateAlarmRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_200940f73d155856, []int{13}
+	return fileDescriptor_200940f73d155856, []int{17}
 }
 
 func (m *SimulateAlarmRequest) XXX_Unmarshal(b []byte) error {
@@ -1686,6 +2110,9 @@
 	proto.RegisterEnum("voltha.ImageDownload_ImageDownloadState", ImageDownload_ImageDownloadState_name, ImageDownload_ImageDownloadState_value)
 	proto.RegisterEnum("voltha.ImageDownload_ImageDownloadFailureReason", ImageDownload_ImageDownloadFailureReason_name, ImageDownload_ImageDownloadFailureReason_value)
 	proto.RegisterEnum("voltha.ImageDownload_ImageActivateState", ImageDownload_ImageActivateState_name, ImageDownload_ImageActivateState_value)
+	proto.RegisterEnum("voltha.ImageState_ImageDownloadState", ImageState_ImageDownloadState_name, ImageState_ImageDownloadState_value)
+	proto.RegisterEnum("voltha.ImageState_ImageFailureReason", ImageState_ImageFailureReason_name, ImageState_ImageFailureReason_value)
+	proto.RegisterEnum("voltha.ImageState_ImageActivationState", ImageState_ImageActivationState_name, ImageState_ImageActivationState_value)
 	proto.RegisterEnum("voltha.Port_PortType", Port_PortType_name, Port_PortType_value)
 	proto.RegisterEnum("voltha.SimulateAlarmRequest_OperationType", SimulateAlarmRequest_OperationType_name, SimulateAlarmRequest_OperationType_value)
 	proto.RegisterType((*DeviceType)(nil), "voltha.DeviceType")
@@ -1694,9 +2121,13 @@
 	proto.RegisterType((*PmGroupConfig)(nil), "voltha.PmGroupConfig")
 	proto.RegisterType((*PmConfigs)(nil), "voltha.PmConfigs")
 	proto.RegisterType((*Image)(nil), "voltha.Image")
-	proto.RegisterType((*Images)(nil), "voltha.Images")
 	proto.RegisterType((*ImageDownload)(nil), "voltha.ImageDownload")
 	proto.RegisterType((*ImageDownloads)(nil), "voltha.ImageDownloads")
+	proto.RegisterType((*Images)(nil), "voltha.Images")
+	proto.RegisterType((*OnuImage)(nil), "voltha.OnuImage")
+	proto.RegisterType((*OnuImages)(nil), "voltha.OnuImages")
+	proto.RegisterType((*DeviceImageState)(nil), "voltha.DeviceImageState")
+	proto.RegisterType((*ImageState)(nil), "voltha.ImageState")
 	proto.RegisterType((*Port)(nil), "voltha.Port")
 	proto.RegisterType((*Port_PeerPort)(nil), "voltha.Port.PeerPort")
 	proto.RegisterType((*Ports)(nil), "voltha.Ports")
@@ -1709,152 +2140,174 @@
 func init() { proto.RegisterFile("voltha_protos/device.proto", fileDescriptor_200940f73d155856) }
 
 var fileDescriptor_200940f73d155856 = []byte{
-	// 2341 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x58, 0xcd, 0x72, 0xdb, 0xb8,
-	0x1d, 0x8f, 0x64, 0x8b, 0x12, 0xff, 0xfa, 0x30, 0x83, 0x38, 0x09, 0x63, 0xd7, 0xe3, 0x54, 0xd9,
-	0x4e, 0x9d, 0xa4, 0xb1, 0xd3, 0x64, 0x67, 0x77, 0x7b, 0xe8, 0x4c, 0x64, 0x89, 0x4e, 0x38, 0x75,
-	0x25, 0x17, 0x92, 0xbc, 0x6d, 0x2f, 0x1c, 0x5a, 0x84, 0x6c, 0x4e, 0x48, 0x42, 0x01, 0x28, 0xd9,
-	0xde, 0x5b, 0x67, 0xa7, 0x3d, 0xf5, 0xd6, 0x5b, 0x9f, 0xa0, 0x6f, 0xb0, 0xc7, 0xf6, 0x05, 0x76,
-	0xfa, 0x0e, 0xed, 0xa5, 0x4f, 0xb0, 0xe7, 0x0e, 0x00, 0x42, 0x22, 0x9d, 0x34, 0xdb, 0xbd, 0xd8,
-	0xc4, 0xef, 0xff, 0x01, 0xe0, 0x07, 0xfc, 0x3f, 0x20, 0xd8, 0x5a, 0xd0, 0x28, 0xbd, 0xf0, 0xbd,
-	0x19, 0xa3, 0x29, 0xe5, 0x07, 0x01, 0x59, 0x84, 0x13, 0xb2, 0x2f, 0x47, 0xc8, 0x50, 0xb2, 0xad,
-	0x07, 0xe7, 0x94, 0x9e, 0x47, 0xe4, 0x40, 0xa2, 0x67, 0xf3, 0xe9, 0x81, 0x9f, 0x5c, 0x2b, 0x95,
-	0xad, 0x1b, 0xe6, 0x13, 0x1a, 0xc7, 0x34, 0xc9, 0x64, 0x76, 0x51, 0x16, 0x93, 0xd4, 0xcf, 0x24,
-	0xbb, 0x45, 0x09, 0x9d, 0x91, 0x64, 0x1a, 0xd1, 0x4b, 0xef, 0xe7, 0x2f, 0x95, 0x42, 0xfb, 0xef,
-	0x65, 0x80, 0x9e, 0x5c, 0xca, 0xe8, 0x7a, 0x46, 0x50, 0x0b, 0xca, 0x61, 0x60, 0x97, 0x1e, 0x96,
-	0xf6, 0x4c, 0x5c, 0x0e, 0x03, 0xb4, 0x0d, 0xe6, 0x82, 0x24, 0x01, 0x65, 0x5e, 0x18, 0xd8, 0x15,
-	0x09, 0xd7, 0x14, 0xe0, 0x06, 0x68, 0x07, 0x60, 0x29, 0xe4, 0xb6, 0xf1, 0x70, 0x6d, 0xcf, 0xc4,
-	0xa6, 0x96, 0x72, 0x64, 0x43, 0xd5, 0x0f, 0xfc, 0x59, 0x4a, 0x98, 0x5d, 0x96, 0x96, 0x7a, 0x88,
-	0x3e, 0x07, 0xdb, 0x9f, 0x4c, 0xc8, 0x2c, 0xe5, 0xde, 0xd9, 0x3c, 0x7a, 0xeb, 0xc9, 0x25, 0xcd,
-	0x67, 0x81, 0x9f, 0x12, 0x7b, 0xed, 0x61, 0x69, 0xaf, 0x86, 0xef, 0x66, 0xf2, 0xc3, 0x79, 0xf4,
-	0xf6, 0x28, 0xa2, 0x97, 0x63, 0x29, 0x44, 0x3d, 0xd8, 0xd5, 0x86, 0x7e, 0x10, 0x78, 0x8c, 0xc4,
-	0x74, 0x41, 0xf2, 0xe6, 0xdc, 0x5e, 0x97, 0xf6, 0xdb, 0x99, 0x5a, 0x27, 0x08, 0xb0, 0x54, 0x5a,
-	0x39, 0xe1, 0xe8, 0x18, 0x1e, 0x69, 0x2f, 0x41, 0xc8, 0xc8, 0x24, 0xf5, 0x22, 0x7a, 0x1e, 0x4e,
-	0xfc, 0x48, 0x7a, 0xe2, 0x7a, 0x25, 0x55, 0xe9, 0x49, 0x4f, 0xd8, 0x93, 0x9a, 0xc7, 0x4a, 0x51,
-	0x78, 0xe3, 0xca, 0x5d, 0xfb, 0x73, 0xa8, 0xaf, 0x08, 0xe4, 0x68, 0x0f, 0x2a, 0x61, 0x4a, 0x62,
-	0x6e, 0x97, 0x1e, 0xae, 0xed, 0xd5, 0x5f, 0xa0, 0x7d, 0x75, 0x02, 0xfb, 0x2b, 0x1d, 0xac, 0x14,
-	0xda, 0xff, 0x28, 0x41, 0xed, 0x24, 0xee, 0xd2, 0x64, 0x1a, 0x9e, 0x23, 0x04, 0xeb, 0x89, 0x1f,
-	0x93, 0x8c, 0x7a, 0xf9, 0x8d, 0x9e, 0xc2, 0x7a, 0x7a, 0x3d, 0x23, 0x92, 0xbd, 0xd6, 0x8b, 0xfb,
-	0xda, 0x93, 0xb6, 0xd9, 0x3f, 0x89, 0xa5, 0x3b, 0xa9, 0x24, 0xd8, 0x26, 0x89, 0x7f, 0x16, 0x91,
-	0x20, 0xa3, 0x50, 0x0f, 0xd1, 0x2e, 0xd4, 0xb9, 0x1f, 0xcf, 0x22, 0xe2, 0x4d, 0x19, 0x79, 0x27,
-	0x09, 0x6a, 0x62, 0x50, 0xd0, 0x11, 0x23, 0xef, 0xda, 0x5f, 0x80, 0xa1, 0x5c, 0xa1, 0x3a, 0x54,
-	0xbb, 0x83, 0x71, 0x7f, 0xe4, 0x60, 0xeb, 0x16, 0x32, 0xa1, 0xf2, 0xba, 0x33, 0x7e, 0xed, 0x58,
-	0x25, 0xf1, 0x39, 0x1c, 0x75, 0x46, 0x8e, 0x55, 0x56, 0x2a, 0xfd, 0x91, 0xf3, 0xdb, 0x91, 0xb5,
-	0xd6, 0xfe, 0x4b, 0x09, 0x9a, 0x27, 0xf1, 0x6b, 0x46, 0xe7, 0xb3, 0x6c, 0x1f, 0x3b, 0x00, 0xe7,
-	0x62, 0xe8, 0xe5, 0x76, 0x63, 0x4a, 0xa4, 0x2f, 0xb6, 0xb4, 0x14, 0xcb, 0xa5, 0x94, 0xe5, 0x52,
-	0x94, 0x58, 0xac, 0xe4, 0x23, 0x9b, 0x78, 0x02, 0xd5, 0x98, 0xa4, 0x2c, 0x9c, 0x88, 0x13, 0x16,
-	0xc4, 0x5a, 0x37, 0xe9, 0xc0, 0x5a, 0xa1, 0xfd, 0x87, 0x32, 0x98, 0x1a, 0xe5, 0xef, 0x5d, 0xe9,
-	0x1f, 0x43, 0x23, 0x20, 0x53, 0x7f, 0x1e, 0xa5, 0xf9, 0x45, 0xd4, 0x33, 0x4c, 0x2e, 0x63, 0x17,
-	0xaa, 0x72, 0x4d, 0x7a, 0x19, 0x87, 0x95, 0xff, 0x7c, 0xf7, 0xed, 0x4e, 0x09, 0x6b, 0x14, 0x3d,
-	0x81, 0xa6, 0xb0, 0xf5, 0xe8, 0x82, 0x30, 0x16, 0x06, 0x44, 0xdd, 0x3a, 0xad, 0xd6, 0x10, 0xb2,
-	0x41, 0x26, 0x42, 0xcf, 0xc0, 0x90, 0x66, 0xdc, 0xae, 0xc8, 0x85, 0xdf, 0x5d, 0x2d, 0x3c, 0x47,
-	0x1c, 0xce, 0x94, 0xf2, 0x1b, 0x35, 0xbe, 0x67, 0xa3, 0xe8, 0x01, 0xd4, 0x62, 0xff, 0xca, 0xe3,
-	0x6f, 0xc9, 0xa5, 0xbc, 0xad, 0x4d, 0x5c, 0x8d, 0xfd, 0xab, 0xe1, 0x5b, 0x72, 0xd9, 0xfe, 0x67,
-	0x09, 0x2a, 0x6e, 0xec, 0x9f, 0x93, 0x0f, 0xde, 0x2c, 0x1b, 0xaa, 0x0b, 0xc2, 0x78, 0x48, 0x13,
-	0x1d, 0x9a, 0xd9, 0x50, 0x68, 0x5f, 0xf8, 0xfc, 0x42, 0xee, 0xdb, 0xc4, 0xf2, 0x1b, 0x3d, 0x06,
-	0x2b, 0x4c, 0x78, 0xea, 0x47, 0x91, 0x27, 0x6e, 0x7c, 0x1a, 0xc6, 0x6a, 0xc3, 0x26, 0xde, 0xc8,
-	0xf0, 0x5e, 0x06, 0x8b, 0x7c, 0x11, 0x72, 0xcf, 0x9f, 0xa4, 0xe1, 0x82, 0xc8, 0x7c, 0x51, 0xc3,
-	0xb5, 0x90, 0x77, 0xe4, 0x58, 0x30, 0x1f, 0x72, 0x4f, 0x64, 0xae, 0x30, 0x4d, 0x49, 0x60, 0x1b,
-	0x52, 0x5e, 0x0f, 0x79, 0x57, 0x43, 0x62, 0x47, 0x21, 0xf7, 0x16, 0x7e, 0x14, 0x06, 0x59, 0xfc,
-	0x55, 0x43, 0x7e, 0x2a, 0x86, 0xed, 0x67, 0x60, 0xc8, 0x0d, 0x71, 0xf4, 0x08, 0x2a, 0xa1, 0xf8,
-	0xca, 0x42, 0xac, 0xa9, 0x09, 0x92, 0x62, 0xac, 0x64, 0xed, 0x7f, 0x57, 0xa1, 0x29, 0x81, 0x1e,
-	0xbd, 0x4c, 0x22, 0xea, 0x07, 0xef, 0x5d, 0x04, 0x4d, 0x4c, 0x39, 0x47, 0x8c, 0x05, 0x6b, 0x73,
-	0x16, 0x65, 0xbb, 0x17, 0x9f, 0x02, 0x99, 0xb0, 0x49, 0x16, 0x35, 0xe2, 0x13, 0x0d, 0xa0, 0x15,
-	0x64, 0x3e, 0x3d, 0x9e, 0x8a, 0x4c, 0x51, 0x91, 0x01, 0xba, 0x57, 0x58, 0x87, 0x9e, 0xb6, 0x38,
-	0x1a, 0x0a, 0x7d, 0xdc, 0x0c, 0xf2, 0x43, 0xf4, 0x08, 0x9a, 0x72, 0xcd, 0x9e, 0x3e, 0x13, 0x43,
-	0x4e, 0xdf, 0x90, 0xe0, 0x69, 0x76, 0x30, 0x8f, 0xc1, 0xd2, 0x56, 0x24, 0xf0, 0xce, 0xae, 0x45,
-	0xae, 0x53, 0x67, 0xbe, 0xb1, 0xc2, 0x0f, 0x05, 0x8c, 0xde, 0x80, 0xc1, 0x88, 0xcf, 0x69, 0x62,
-	0xd7, 0xe4, 0xc2, 0x9e, 0xff, 0x1f, 0x0b, 0x3b, 0xf2, 0xc3, 0x68, 0xce, 0x08, 0x96, 0x76, 0x38,
-	0xb3, 0x47, 0x3f, 0x85, 0x0d, 0x3f, 0x08, 0xc2, 0x34, 0xa4, 0x89, 0x1f, 0x79, 0x61, 0x32, 0xa5,
-	0xb6, 0x29, 0xd7, 0xd6, 0x5a, 0xc1, 0x6e, 0x32, 0xa5, 0x2a, 0xc7, 0x2c, 0x88, 0x37, 0x91, 0x37,
-	0xd4, 0x06, 0x79, 0x74, 0x20, 0xa0, 0x2c, 0x2f, 0x6c, 0x83, 0x19, 0x51, 0x91, 0x62, 0x83, 0x90,
-	0xd9, 0x75, 0x55, 0x48, 0x24, 0xd0, 0x0b, 0x19, 0x72, 0xa1, 0xae, 0x08, 0x50, 0x74, 0x36, 0xbe,
-	0x97, 0x4e, 0x79, 0xa1, 0xfc, 0x94, 0x28, 0x3a, 0x41, 0x1a, 0x2b, 0x2e, 0xb7, 0xc1, 0x9c, 0x86,
-	0x11, 0xf1, 0x78, 0xf8, 0x15, 0xb1, 0x9b, 0x92, 0x9f, 0x9a, 0x00, 0x86, 0xe1, 0x57, 0xa4, 0xfd,
-	0x4d, 0x09, 0xd0, 0xfb, 0xc7, 0x81, 0x36, 0xc1, 0xea, 0x0d, 0xbe, 0xec, 0x1f, 0x0f, 0x3a, 0x3d,
-	0x6f, 0xdc, 0xff, 0x55, 0x7f, 0xf0, 0x65, 0xdf, 0xba, 0x85, 0xee, 0x01, 0x5a, 0xa2, 0xc3, 0x71,
-	0xb7, 0xeb, 0x38, 0x3d, 0xa7, 0x67, 0x95, 0x0a, 0x38, 0x76, 0x7e, 0x33, 0x76, 0x86, 0x23, 0xa7,
-	0x67, 0x95, 0x0b, 0x5e, 0x86, 0xa3, 0x0e, 0x16, 0xe8, 0x1a, 0xba, 0x03, 0x1b, 0x4b, 0xf4, 0xa8,
-	0xe3, 0x1e, 0x3b, 0x3d, 0x6b, 0x1d, 0xd9, 0xb0, 0x99, 0x9b, 0x70, 0x38, 0x3e, 0x39, 0x19, 0x48,
-	0xf5, 0x4a, 0xc1, 0x79, 0xb7, 0xd3, 0xef, 0x3a, 0xc7, 0xc2, 0xc2, 0x68, 0xff, 0xa9, 0x04, 0x5b,
-	0xff, 0xfb, 0xbc, 0x50, 0x03, 0x6a, 0xfd, 0x81, 0xe7, 0x60, 0x3c, 0x10, 0x89, 0x7b, 0x03, 0xea,
-	0x6e, 0xff, 0xb4, 0x73, 0xec, 0xf6, 0xbc, 0x31, 0x3e, 0xb6, 0x4a, 0x02, 0xe8, 0x39, 0xa7, 0x6e,
-	0xd7, 0xf1, 0x0e, 0xc7, 0xc3, 0xdf, 0x59, 0x65, 0x31, 0x8d, 0xdb, 0x1f, 0x8e, 0x8f, 0x8e, 0xdc,
-	0xae, 0xeb, 0xf4, 0x47, 0xde, 0xf0, 0xa4, 0xd3, 0x75, 0xac, 0x35, 0x74, 0x1b, 0x9a, 0x19, 0x01,
-	0x99, 0xb3, 0x75, 0xd4, 0x04, 0x73, 0xb5, 0x90, 0x4a, 0xfb, 0xcf, 0x9a, 0xc2, 0xc2, 0x11, 0x08,
-	0x43, 0xf7, 0xd7, 0x9d, 0xd7, 0x4e, 0x8e, 0x3f, 0x04, 0x2d, 0x05, 0xb9, 0xfd, 0x4e, 0x77, 0xe4,
-	0x9e, 0x8a, 0x3a, 0xb2, 0x09, 0x96, 0xc2, 0x24, 0xd2, 0x19, 0xb9, 0xfd, 0xd7, 0x56, 0x19, 0x59,
-	0xd0, 0xc8, 0xa1, 0x8e, 0x62, 0x4d, 0x21, 0xd8, 0x39, 0x75, 0xb0, 0x54, 0x5b, 0x5f, 0x39, 0x54,
-	0xa0, 0x5c, 0xce, 0x2f, 0xa1, 0x55, 0xa0, 0x85, 0xa3, 0xa7, 0xba, 0xfe, 0x96, 0x8b, 0xd9, 0xb6,
-	0xa0, 0xa6, 0x4b, 0xf0, 0x37, 0x15, 0x58, 0x3f, 0xa1, 0x2c, 0x45, 0xf7, 0xa1, 0x3a, 0xa3, 0x2c,
-	0xf5, 0x12, 0x2a, 0x13, 0x44, 0x13, 0x1b, 0x62, 0xd8, 0xa7, 0x68, 0x13, 0x2a, 0x91, 0x7f, 0x46,
-	0xa2, 0x2c, 0x4b, 0xa8, 0x01, 0x7a, 0x9c, 0x55, 0xe6, 0x35, 0x79, 0x53, 0x57, 0x19, 0x9d, 0xb2,
-	0x54, 0xfe, 0xc9, 0xd5, 0xe5, 0x5f, 0x40, 0xdd, 0x0f, 0xe2, 0x30, 0x29, 0xa4, 0x0a, 0x7b, 0x3f,
-	0xeb, 0xdf, 0x3a, 0x42, 0x24, 0x29, 0xdc, 0x97, 0xed, 0x03, 0x06, 0x7f, 0x89, 0x08, 0x53, 0x3a,
-	0x23, 0x4c, 0x5a, 0xce, 0xb9, 0xcc, 0x0a, 0x39, 0xd3, 0xc1, 0x8c, 0xb0, 0xa1, 0x94, 0x68, 0x53,
-	0xba, 0x44, 0x44, 0x18, 0xa8, 0x06, 0xd3, 0xcb, 0x12, 0xa9, 0x89, 0x6b, 0x0a, 0x70, 0x03, 0x41,
-	0xd1, 0x8c, 0x10, 0xc6, 0xed, 0xda, 0x8d, 0x82, 0x24, 0x97, 0x4f, 0x08, 0x13, 0x1f, 0x58, 0xe9,
-	0x88, 0x8a, 0xcd, 0xae, 0xbc, 0x99, 0x3f, 0x79, 0x4b, 0x52, 0x2e, 0xa3, 0xdf, 0xc0, 0x26, 0xbb,
-	0x3a, 0x51, 0x80, 0x48, 0xd8, 0xec, 0x2a, 0x4b, 0x47, 0x20, 0x85, 0x55, 0x76, 0xa5, 0xd2, 0xd0,
-	0x36, 0x98, 0xec, 0xca, 0x23, 0x8c, 0x51, 0xc6, 0x65, 0xc8, 0x1b, 0xb8, 0xc6, 0xae, 0x1c, 0x39,
-	0x16, 0x6e, 0xd3, 0x95, 0xdb, 0x86, 0x72, 0x9b, 0xe6, 0xdd, 0xa6, 0xda, 0x6d, 0x53, 0xb9, 0x4d,
-	0x57, 0x6e, 0xd3, 0xa5, 0xdb, 0x96, 0x72, 0x9b, 0x6a, 0xb7, 0xcf, 0xa1, 0x46, 0xa7, 0x33, 0x4f,
-	0x1c, 0x9e, 0xbd, 0xf1, 0xb0, 0x24, 0x77, 0x97, 0x6f, 0x7a, 0xb5, 0x10, 0x57, 0xe9, 0x74, 0x26,
-	0xb6, 0xb9, 0xf5, 0x0a, 0x6a, 0x7a, 0xcb, 0x45, 0xd6, 0x4a, 0x37, 0x58, 0xcb, 0x5d, 0x91, 0x72,
-	0xfe, 0x8a, 0xb4, 0x39, 0xd4, 0xf4, 0x99, 0x8b, 0xee, 0x68, 0x15, 0x01, 0x16, 0x34, 0x9c, 0xd1,
-	0x1b, 0x07, 0xf7, 0x9d, 0x91, 0xd7, 0xef, 0xbb, 0x56, 0xa9, 0x80, 0x8c, 0xfb, 0xae, 0x6a, 0xa7,
-	0x4e, 0x06, 0x7d, 0x6f, 0x70, 0x3c, 0xb2, 0xd6, 0x96, 0x83, 0xfe, 0x58, 0x05, 0xde, 0xa9, 0x23,
-	0x14, 0x85, 0xac, 0x92, 0x1b, 0xf6, 0xc7, 0x96, 0xd1, 0x7e, 0x0a, 0x15, 0x31, 0x29, 0x47, 0xed,
-	0x62, 0xbf, 0xd9, 0xc8, 0x1f, 0xa6, 0xbe, 0xe6, 0x7f, 0xad, 0x83, 0xa1, 0xfa, 0x4f, 0x74, 0x77,
-	0x55, 0x04, 0x75, 0xbb, 0x22, 0x6a, 0xe1, 0x83, 0x5c, 0xab, 0xb9, 0x14, 0xa8, 0x0b, 0xfc, 0x00,
-	0xd6, 0x19, 0xa5, 0x69, 0xb1, 0x13, 0x92, 0x10, 0x6a, 0x83, 0x39, 0xf3, 0x19, 0x49, 0x52, 0xc1,
-	0xd7, 0x7a, 0xde, 0xb4, 0xa6, 0x70, 0x79, 0xd9, 0x5a, 0x99, 0x8e, 0x66, 0x6f, 0x53, 0xb0, 0xb7,
-	0xec, 0x95, 0x94, 0xf0, 0x44, 0x45, 0xdb, 0x0e, 0x18, 0xea, 0xfd, 0xa0, 0xde, 0x1a, 0x5a, 0x29,
-	0x03, 0xd1, 0x36, 0x54, 0x62, 0x1a, 0x90, 0x48, 0x15, 0x48, 0x2d, 0x55, 0x18, 0x7a, 0x0e, 0xd6,
-	0x85, 0xcf, 0x82, 0x4b, 0x9f, 0xad, 0x0a, 0x69, 0x35, 0xaf, 0xb7, 0xa1, 0xc5, 0xba, 0xa4, 0x3e,
-	0x07, 0x6b, 0x1a, 0xb2, 0xb8, 0x60, 0x51, 0x2b, 0x58, 0x68, 0xb1, 0xb6, 0x78, 0x06, 0x86, 0xac,
-	0x35, 0x2a, 0x10, 0xea, 0x2f, 0x5a, 0x85, 0xec, 0xc2, 0x97, 0xeb, 0x55, 0x4a, 0xa2, 0x4d, 0xe4,
-	0x84, 0x85, 0x7e, 0xe4, 0x25, 0xf3, 0xf8, 0x8c, 0x30, 0x19, 0x21, 0x4b, 0xef, 0x0d, 0x25, 0xeb,
-	0x4b, 0x91, 0xe0, 0x72, 0xf5, 0xd2, 0xb2, 0x0b, 0x5c, 0x2e, 0x1f, 0x5c, 0xbb, 0xab, 0x17, 0x55,
-	0x3d, 0xaf, 0xb1, 0x7c, 0x58, 0x21, 0x58, 0x5f, 0x44, 0x7e, 0x22, 0xe3, 0xa9, 0x89, 0xe5, 0xb7,
-	0x28, 0xcd, 0xb1, 0x3f, 0x11, 0xef, 0x25, 0x46, 0xb8, 0x8a, 0x26, 0x13, 0x43, 0xec, 0x4f, 0x3a,
-	0x0a, 0x41, 0x8f, 0xa0, 0x11, 0xce, 0x16, 0x9f, 0x2e, 0x35, 0x44, 0x4c, 0x99, 0x6f, 0x6e, 0xe1,
-	0xba, 0x40, 0x8b, 0x4a, 0x9f, 0x2d, 0x95, 0x36, 0x72, 0x4a, 0x9f, 0x69, 0xa5, 0x4f, 0xa0, 0x79,
-	0x41, 0x79, 0xea, 0xf9, 0x49, 0xa0, 0x42, 0xf0, 0xae, 0xd6, 0x12, 0x70, 0x27, 0x09, 0x64, 0x94,
-	0xed, 0x00, 0x90, 0xab, 0x94, 0xf9, 0x9e, 0xcf, 0xce, 0xb9, 0x7d, 0x5f, 0x3d, 0x11, 0x24, 0xd2,
-	0x61, 0xe7, 0x1c, 0xbd, 0x82, 0xe6, 0x8c, 0xd1, 0xab, 0xeb, 0xe5, 0x54, 0x77, 0x24, 0xd5, 0xdb,
-	0xc5, 0x87, 0xd4, 0xfe, 0x89, 0xd0, 0xc9, 0x26, 0xc6, 0x8d, 0x59, 0x6e, 0x74, 0x33, 0xe5, 0x5a,
-	0x3f, 0x20, 0xe5, 0xbe, 0x2a, 0xa6, 0xdc, 0xdb, 0x1f, 0x4f, 0xb9, 0x9a, 0xff, 0x7c, 0xe6, 0xdd,
-	0x59, 0x36, 0x5f, 0xf7, 0x0a, 0x57, 0x38, 0xeb, 0xa8, 0x5c, 0x68, 0x4d, 0x68, 0x92, 0x88, 0x47,
-	0x67, 0x36, 0x07, 0x92, 0x73, 0x6c, 0xeb, 0x39, 0xba, 0x4a, 0xfa, 0xa1, 0x69, 0x9a, 0x93, 0xbc,
-	0x0c, 0xfd, 0x0c, 0x8c, 0xc9, 0x9c, 0xa7, 0x34, 0xb6, 0x5f, 0x49, 0x86, 0x36, 0xf7, 0xd5, 0xaf,
-	0x07, 0xfb, 0xfa, 0xd7, 0x83, 0xfd, 0x4e, 0x72, 0x8d, 0x33, 0x1d, 0xf4, 0x05, 0xc0, 0x2c, 0xce,
-	0xfa, 0x33, 0x6e, 0x7f, 0x5d, 0x92, 0x26, 0xb7, 0x6f, 0xbe, 0x2d, 0xf8, 0x61, 0xe5, 0x5f, 0xdf,
-	0x7d, 0xbb, 0x73, 0x0b, 0x9b, 0xb3, 0xe5, 0x03, 0xea, 0x18, 0x36, 0x54, 0x77, 0xa6, 0xfb, 0x4c,
-	0x6e, 0xff, 0xb1, 0xf4, 0x91, 0xe2, 0x7a, 0x58, 0x17, 0x2e, 0x0c, 0xd5, 0x5d, 0xe3, 0x56, 0x58,
-	0xa8, 0xcf, 0x5b, 0x5f, 0x97, 0xa1, 0x91, 0x3f, 0xbb, 0x8f, 0x27, 0xdd, 0x5d, 0xa8, 0x67, 0xc2,
-	0x55, 0x7a, 0xc2, 0x10, 0xac, 0x7e, 0xb0, 0xd8, 0x01, 0x98, 0x5c, 0xf8, 0x49, 0x42, 0x22, 0x61,
-	0xbe, 0xa6, 0x1e, 0x94, 0x19, 0xe2, 0x06, 0x68, 0x0f, 0x2c, 0x2d, 0x56, 0xef, 0xce, 0x2c, 0x51,
-	0x35, 0x71, 0x2b, 0xc3, 0xe5, 0x1b, 0xcc, 0x0d, 0xd0, 0x01, 0xdc, 0xd1, 0x9a, 0x29, 0x61, 0x71,
-	0x98, 0xf8, 0xa2, 0xbd, 0xcd, 0x7e, 0xf3, 0x40, 0x99, 0x68, 0xb4, 0x92, 0xa0, 0xbb, 0x60, 0xd0,
-	0x64, 0x2e, 0x1c, 0x1a, 0xd2, 0x61, 0x85, 0x26, 0x73, 0x37, 0x40, 0x9f, 0x40, 0x4b, 0xc0, 0x9c,
-	0x70, 0x91, 0x31, 0x74, 0xf9, 0x6d, 0xe2, 0x06, 0x4d, 0xe6, 0x43, 0x05, 0xba, 0xc1, 0xa1, 0x29,
-	0x22, 0x59, 0xee, 0xbf, 0x7d, 0x00, 0x55, 0x75, 0xa5, 0x45, 0xfc, 0x14, 0x72, 0x79, 0xab, 0x78,
-	0xe5, 0x75, 0x36, 0xff, 0xdb, 0x1a, 0x6c, 0x0e, 0xc3, 0x78, 0x1e, 0xf9, 0x29, 0xe9, 0x44, 0x3e,
-	0x8b, 0x31, 0x79, 0x37, 0x27, 0x3c, 0x7d, 0xef, 0x81, 0xf3, 0x23, 0x30, 0xc3, 0x24, 0x08, 0x27,
-	0x7e, 0x4a, 0xf5, 0x4f, 0x30, 0x2b, 0x40, 0xd4, 0xb3, 0x30, 0x49, 0xa7, 0x9a, 0x36, 0x13, 0x1b,
-	0x62, 0xa8, 0x76, 0x20, 0x53, 0xb5, 0x60, 0x5c, 0x3d, 0xe3, 0xd5, 0x63, 0xaf, 0x31, 0xcb, 0xaa,
-	0x9c, 0x7c, 0xc9, 0xb7, 0xa1, 0x29, 0xf6, 0xb9, 0x3a, 0x3a, 0xc5, 0x54, 0x9d, 0x26, 0xf3, 0x9e,
-	0x3e, 0xbd, 0x97, 0x70, 0x2f, 0x4c, 0x44, 0x66, 0x25, 0xde, 0x59, 0x98, 0xaa, 0x9a, 0xed, 0x31,
-	0x11, 0x93, 0x82, 0xb2, 0x0a, 0xbe, 0x93, 0x49, 0x0f, 0xc3, 0x54, 0xd6, 0x6f, 0xac, 0xba, 0xf1,
-	0x4a, 0xc0, 0xc2, 0x69, 0x2a, 0x79, 0xab, 0x60, 0x35, 0x10, 0xab, 0x4d, 0xc8, 0xa5, 0x47, 0xde,
-	0x05, 0x32, 0x45, 0x57, 0xb0, 0x91, 0x90, 0x4b, 0xe7, 0x9d, 0x78, 0x8a, 0xdf, 0x56, 0x7c, 0xe7,
-	0xf3, 0xac, 0x7a, 0xa4, 0x6c, 0x48, 0xca, 0x73, 0x39, 0xf6, 0x0d, 0x98, 0x22, 0x52, 0xd5, 0xc9,
-	0x82, 0x8c, 0xbb, 0x27, 0x9a, 0xe3, 0x0f, 0x31, 0x2a, 0x03, 0x5e, 0x6a, 0xcb, 0x86, 0x6e, 0x65,
-	0xdc, 0xfe, 0x09, 0x34, 0x0b, 0x32, 0x64, 0x42, 0x05, 0x77, 0xdc, 0xa1, 0xa3, 0x7e, 0x37, 0xe9,
-	0x1e, 0x3b, 0x1d, 0x6c, 0x95, 0x0e, 0x87, 0x70, 0x87, 0xb2, 0x73, 0xd9, 0x81, 0x4c, 0x28, 0x0b,
-	0xb2, 0xb9, 0x0e, 0x1b, 0xa7, 0xf2, 0xbf, 0xe2, 0xe9, 0xf7, 0xfb, 0xe7, 0x61, 0x7a, 0x31, 0x3f,
-	0x13, 0x09, 0xe0, 0x40, 0x6b, 0x1e, 0x28, 0xcd, 0x67, 0xd9, 0xef, 0x76, 0x8b, 0x4f, 0x0f, 0xce,
-	0x69, 0x86, 0x9d, 0x19, 0x12, 0x7c, 0xf9, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x8e, 0x96, 0xa4,
-	0xa3, 0x51, 0x14, 0x00, 0x00,
+	// 2701 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x59, 0xcb, 0x72, 0x1b, 0xc7,
+	0xd5, 0x16, 0x40, 0x62, 0x80, 0x39, 0xb8, 0x70, 0xd4, 0x22, 0xa5, 0x11, 0x69, 0xfe, 0xd2, 0x0f,
+	0xd9, 0xbf, 0x69, 0xe9, 0x17, 0xa9, 0x48, 0x2e, 0xdb, 0x59, 0xb8, 0x4a, 0x20, 0x30, 0x94, 0xa6,
+	0x42, 0x0d, 0x98, 0x06, 0x40, 0xc7, 0xd9, 0x4c, 0x0d, 0x31, 0x4d, 0x72, 0x4a, 0x83, 0x19, 0xa8,
+	0x67, 0x40, 0x52, 0xde, 0xa5, 0x5c, 0xc9, 0x2a, 0x55, 0x59, 0x64, 0x95, 0x3c, 0x41, 0x96, 0xd9,
+	0x79, 0x99, 0xbc, 0x80, 0xab, 0xf2, 0x0c, 0xc9, 0x26, 0x0f, 0x90, 0xf2, 0x3a, 0xd5, 0xb7, 0xb9,
+	0x90, 0x92, 0xec, 0x54, 0xa5, 0x52, 0xd9, 0x90, 0xd3, 0xdf, 0xb9, 0x74, 0xf7, 0xe9, 0x3e, 0x5f,
+	0x9f, 0x6e, 0xc0, 0xfa, 0x59, 0x1c, 0xa6, 0xa7, 0x9e, 0x3b, 0xa7, 0x71, 0x1a, 0x27, 0x3b, 0x3e,
+	0x39, 0x0b, 0xa6, 0x64, 0x9b, 0xb7, 0x90, 0x26, 0x64, 0xeb, 0xb7, 0x4f, 0xe2, 0xf8, 0x24, 0x24,
+	0x3b, 0x1c, 0x3d, 0x5a, 0x1c, 0xef, 0x78, 0xd1, 0x6b, 0xa1, 0xb2, 0x7e, 0xc9, 0x7c, 0x1a, 0xcf,
+	0x66, 0x71, 0x24, 0x65, 0x66, 0x59, 0x36, 0x23, 0xa9, 0x27, 0x25, 0x77, 0xca, 0x92, 0x78, 0x4e,
+	0xa2, 0xe3, 0x30, 0x3e, 0x77, 0x7f, 0xf4, 0x44, 0x28, 0x74, 0xff, 0x54, 0x05, 0x18, 0xf0, 0xa1,
+	0x8c, 0x5f, 0xcf, 0x09, 0xea, 0x40, 0x35, 0xf0, 0xcd, 0xca, 0xdd, 0xca, 0x96, 0x8e, 0xab, 0x81,
+	0x8f, 0x36, 0x40, 0x3f, 0x23, 0x91, 0x1f, 0x53, 0x37, 0xf0, 0xcd, 0x1a, 0x87, 0x1b, 0x02, 0xb0,
+	0x7d, 0xb4, 0x09, 0x90, 0x09, 0x13, 0x53, 0xbb, 0xbb, 0xb4, 0xa5, 0x63, 0x5d, 0x49, 0x13, 0x64,
+	0x42, 0xdd, 0xf3, 0xbd, 0x79, 0x4a, 0xa8, 0x59, 0xe5, 0x96, 0xaa, 0x89, 0x3e, 0x05, 0xd3, 0x9b,
+	0x4e, 0xc9, 0x3c, 0x4d, 0xdc, 0xa3, 0x45, 0xf8, 0xd2, 0xe5, 0x43, 0x5a, 0xcc, 0x7d, 0x2f, 0x25,
+	0xe6, 0xd2, 0xdd, 0xca, 0x56, 0x03, 0xaf, 0x49, 0xf9, 0xee, 0x22, 0x7c, 0xb9, 0x17, 0xc6, 0xe7,
+	0x13, 0x2e, 0x44, 0x03, 0xb8, 0xa3, 0x0c, 0x3d, 0xdf, 0x77, 0x29, 0x99, 0xc5, 0x67, 0xa4, 0x68,
+	0x9e, 0x98, 0xcb, 0xdc, 0x7e, 0x43, 0xaa, 0xf5, 0x7c, 0x1f, 0x73, 0xa5, 0xdc, 0x49, 0x82, 0xf6,
+	0xe1, 0x9e, 0xf2, 0xe2, 0x07, 0x94, 0x4c, 0x53, 0x37, 0x8c, 0x4f, 0x82, 0xa9, 0x17, 0x72, 0x4f,
+	0x89, 0x1a, 0x49, 0x9d, 0x7b, 0x52, 0x1d, 0x0e, 0xb8, 0xe6, 0xbe, 0x50, 0x64, 0xde, 0x12, 0xe1,
+	0xae, 0xfb, 0x29, 0x34, 0xf3, 0x00, 0x26, 0x68, 0x0b, 0x6a, 0x41, 0x4a, 0x66, 0x89, 0x59, 0xb9,
+	0xbb, 0xb4, 0xd5, 0x7c, 0x8c, 0xb6, 0xc5, 0x0a, 0x6c, 0xe7, 0x3a, 0x58, 0x28, 0x74, 0xff, 0x5c,
+	0x81, 0xc6, 0xc1, 0xac, 0x1f, 0x47, 0xc7, 0xc1, 0x09, 0x42, 0xb0, 0x1c, 0x79, 0x33, 0x22, 0x43,
+	0xcf, 0xbf, 0xd1, 0x03, 0x58, 0x4e, 0x5f, 0xcf, 0x09, 0x8f, 0x5e, 0xe7, 0xf1, 0x2d, 0xe5, 0x49,
+	0xd9, 0x6c, 0x1f, 0xcc, 0xb8, 0x3b, 0xae, 0xc4, 0xa2, 0x4d, 0x22, 0xef, 0x28, 0x24, 0xbe, 0x0c,
+	0xa1, 0x6a, 0xa2, 0x3b, 0xd0, 0x4c, 0xbc, 0xd9, 0x3c, 0x24, 0xee, 0x31, 0x25, 0xaf, 0x78, 0x80,
+	0xda, 0x18, 0x04, 0xb4, 0x47, 0xc9, 0xab, 0xee, 0x67, 0xa0, 0x09, 0x57, 0xa8, 0x09, 0xf5, 0xfe,
+	0x70, 0xe2, 0x8c, 0x2d, 0x6c, 0x5c, 0x43, 0x3a, 0xd4, 0x9e, 0xf5, 0x26, 0xcf, 0x2c, 0xa3, 0xc2,
+	0x3e, 0x47, 0xe3, 0xde, 0xd8, 0x32, 0xaa, 0x42, 0xc5, 0x19, 0x5b, 0x3f, 0x1b, 0x1b, 0x4b, 0xdd,
+	0xdf, 0x56, 0xa0, 0x7d, 0x30, 0x7b, 0x46, 0xe3, 0xc5, 0x5c, 0xce, 0x63, 0x13, 0xe0, 0x84, 0x35,
+	0xdd, 0xc2, 0x6c, 0x74, 0x8e, 0x38, 0x6c, 0x4a, 0x99, 0x98, 0x0f, 0xa5, 0xca, 0x87, 0x22, 0xc4,
+	0x6c, 0x24, 0xef, 0x98, 0xc4, 0x7d, 0xa8, 0xcf, 0x48, 0x4a, 0x83, 0x29, 0x5b, 0x61, 0x16, 0x58,
+	0xe3, 0x72, 0x38, 0xb0, 0x52, 0xe8, 0xfe, 0xa2, 0x0a, 0xba, 0x42, 0x93, 0x2b, 0x5b, 0xfa, 0x7f,
+	0xa1, 0xe5, 0x93, 0x63, 0x6f, 0x11, 0xa6, 0xc5, 0x41, 0x34, 0x25, 0xc6, 0x87, 0x71, 0x07, 0xea,
+	0x7c, 0x4c, 0x6a, 0x18, 0xbb, 0xb5, 0xbf, 0x7f, 0xf7, 0xed, 0x66, 0x05, 0x2b, 0x14, 0xdd, 0x87,
+	0x36, 0xb3, 0x75, 0xe3, 0x33, 0x42, 0x69, 0xe0, 0x13, 0xb1, 0xeb, 0x94, 0x5a, 0x8b, 0xc9, 0x86,
+	0x52, 0x84, 0x1e, 0x82, 0xc6, 0xcd, 0x12, 0xb3, 0xc6, 0x07, 0xbe, 0x96, 0x0f, 0xbc, 0x10, 0x38,
+	0x2c, 0x95, 0x8a, 0x13, 0xd5, 0xbe, 0x67, 0xa2, 0xe8, 0x36, 0x34, 0x66, 0xde, 0x85, 0x9b, 0xbc,
+	0x24, 0xe7, 0x7c, 0xb7, 0xb6, 0x71, 0x7d, 0xe6, 0x5d, 0x8c, 0x5e, 0x92, 0xf3, 0xee, 0x6f, 0xaa,
+	0x50, 0xb3, 0x67, 0xde, 0x09, 0x79, 0xe3, 0xce, 0x32, 0xa1, 0x7e, 0x46, 0x68, 0x12, 0xc4, 0x91,
+	0x4a, 0x4d, 0xd9, 0x64, 0xda, 0xa7, 0x5e, 0x72, 0xca, 0xe7, 0xdd, 0xc6, 0xfc, 0x1b, 0x7d, 0x04,
+	0x46, 0x10, 0x25, 0xa9, 0x17, 0x86, 0x2e, 0xdb, 0xf1, 0x69, 0x30, 0x13, 0x13, 0xd6, 0xf1, 0x8a,
+	0xc4, 0x07, 0x12, 0x66, 0x7c, 0x11, 0x24, 0xae, 0x37, 0x4d, 0x83, 0x33, 0xc2, 0xf9, 0xa2, 0x81,
+	0x1b, 0x41, 0xd2, 0xe3, 0x6d, 0x16, 0xf9, 0x20, 0x71, 0x19, 0x73, 0x05, 0x69, 0x4a, 0x7c, 0x53,
+	0xe3, 0xf2, 0x66, 0x90, 0xf4, 0x15, 0xc4, 0x66, 0x14, 0x24, 0xee, 0x99, 0x17, 0x06, 0xbe, 0xcc,
+	0xbf, 0x7a, 0x90, 0x1c, 0xb2, 0x26, 0x32, 0x60, 0x69, 0x41, 0x43, 0xb3, 0xc1, 0x3b, 0x66, 0x9f,
+	0xe8, 0x26, 0x68, 0x82, 0x6d, 0x4c, 0x9d, 0x83, 0xb2, 0x85, 0x56, 0xa1, 0x36, 0xa5, 0xd3, 0x27,
+	0x8f, 0x4d, 0xe0, 0x93, 0x10, 0x8d, 0xee, 0xdf, 0xea, 0xd0, 0xe6, 0x11, 0x19, 0xc4, 0xe7, 0x51,
+	0x18, 0x7b, 0xfe, 0x95, 0x9d, 0xa1, 0x22, 0x55, 0x2d, 0x44, 0x4a, 0xf6, 0xba, 0x94, 0xf7, 0x6a,
+	0xc0, 0xd2, 0x94, 0x4e, 0x65, 0x1a, 0xb1, 0x4f, 0x34, 0x84, 0x8e, 0x2f, 0x7d, 0xba, 0x49, 0xca,
+	0xa8, 0xa3, 0xc6, 0x33, 0x76, 0x4b, 0xad, 0x5c, 0xa9, 0xdb, 0x72, 0x6b, 0xc4, 0xf4, 0x71, 0xdb,
+	0x2f, 0x36, 0xd1, 0x3d, 0x68, 0x07, 0x4c, 0xc9, 0x55, 0x8b, 0xa4, 0xf1, 0xee, 0x5b, 0x1c, 0x3c,
+	0x94, 0x2b, 0xf5, 0x11, 0x18, 0xca, 0x8a, 0xf8, 0xee, 0xd1, 0x6b, 0x46, 0x7e, 0x62, 0x13, 0xac,
+	0xe4, 0xf8, 0x2e, 0x83, 0xd1, 0x73, 0xd0, 0x28, 0xf1, 0x92, 0x38, 0xe2, 0xd1, 0xeb, 0x3c, 0x7e,
+	0xf4, 0x03, 0x06, 0xb6, 0xe7, 0x05, 0xe1, 0x82, 0x12, 0xcc, 0xed, 0xb0, 0xb4, 0x47, 0x1f, 0xc2,
+	0x8a, 0xe7, 0xfb, 0x41, 0x1a, 0xc4, 0x91, 0x17, 0xba, 0x41, 0x74, 0x1c, 0xcb, 0xd8, 0x77, 0x72,
+	0xd8, 0x8e, 0x8e, 0x63, 0x41, 0x3a, 0x67, 0xc4, 0x9d, 0xf2, 0x2d, 0xcb, 0x57, 0xa2, 0xc1, 0x48,
+	0xe7, 0x8c, 0x48, 0xa2, 0xd8, 0x00, 0x3d, 0x8c, 0x19, 0xe7, 0xfa, 0x01, 0x35, 0x9b, 0xe2, 0x64,
+	0xe1, 0xc0, 0x20, 0xa0, 0xc8, 0x86, 0xa6, 0x08, 0x80, 0x08, 0x67, 0xeb, 0x7b, 0xc3, 0xc9, 0x77,
+	0x98, 0x97, 0x12, 0x11, 0x4e, 0xe0, 0xc6, 0x22, 0x96, 0x1b, 0xa0, 0x1f, 0x07, 0x21, 0x71, 0x93,
+	0xe0, 0x2b, 0x62, 0xb6, 0x79, 0x7c, 0x1a, 0x0c, 0x18, 0x05, 0x5f, 0x91, 0xee, 0x37, 0x15, 0x40,
+	0x57, 0x97, 0x03, 0xad, 0x82, 0x31, 0x18, 0x7e, 0xe1, 0xec, 0x0f, 0x7b, 0x03, 0x77, 0xe2, 0xfc,
+	0xc4, 0x19, 0x7e, 0xe1, 0x18, 0xd7, 0xd0, 0x4d, 0x40, 0x19, 0x3a, 0x9a, 0xf4, 0xfb, 0x96, 0x35,
+	0xb0, 0x06, 0x46, 0xa5, 0x84, 0x63, 0xeb, 0xa7, 0x13, 0x6b, 0x34, 0xb6, 0x06, 0x46, 0xb5, 0xe4,
+	0x65, 0x34, 0xee, 0x61, 0x86, 0x2e, 0xa1, 0x1b, 0xb0, 0x92, 0xa1, 0x7b, 0x3d, 0x7b, 0xdf, 0x1a,
+	0x18, 0xcb, 0xc8, 0x84, 0xd5, 0x42, 0x87, 0xa3, 0xc9, 0xc1, 0xc1, 0x90, 0xab, 0xd7, 0x4a, 0xce,
+	0xfb, 0x3d, 0xa7, 0x6f, 0xed, 0x33, 0x0b, 0xad, 0xfb, 0xab, 0x0a, 0xac, 0xbf, 0x7d, 0xbd, 0x50,
+	0x0b, 0x1a, 0xce, 0xd0, 0xb5, 0x30, 0x1e, 0x32, 0x26, 0x5f, 0x81, 0xa6, 0xed, 0x1c, 0xf6, 0xf6,
+	0xed, 0x81, 0x3b, 0xc1, 0xfb, 0x46, 0x85, 0x01, 0x03, 0xeb, 0xd0, 0xee, 0x5b, 0xee, 0xee, 0x64,
+	0xf4, 0xa5, 0x51, 0x65, 0xdd, 0xd8, 0xce, 0x68, 0xb2, 0xb7, 0x67, 0xf7, 0x6d, 0xcb, 0x19, 0xbb,
+	0xa3, 0x83, 0x5e, 0xdf, 0x32, 0x96, 0xd0, 0x75, 0x68, 0xcb, 0x00, 0x48, 0x67, 0xcb, 0xa8, 0x0d,
+	0x7a, 0x3e, 0x90, 0x5a, 0xf7, 0xd7, 0x2a, 0x84, 0xa5, 0x25, 0x60, 0x86, 0xf6, 0x8b, 0xde, 0x33,
+	0xab, 0x10, 0x3f, 0x04, 0x1d, 0x01, 0xd9, 0x4e, 0xaf, 0x3f, 0xb6, 0x0f, 0xd9, 0xc1, 0xb2, 0x0a,
+	0x86, 0xc0, 0x38, 0xd2, 0x1b, 0xdb, 0xce, 0x33, 0xa3, 0x8a, 0x0c, 0x68, 0x15, 0x50, 0x4b, 0x44,
+	0x4d, 0x20, 0xd8, 0x3a, 0xb4, 0x30, 0x57, 0x5b, 0xce, 0x1d, 0x0a, 0x90, 0x0f, 0xe7, 0x73, 0xe8,
+	0x94, 0xc2, 0x92, 0xa0, 0x07, 0xea, 0x40, 0xae, 0x96, 0xe9, 0xb7, 0xa4, 0xa6, 0xce, 0xe4, 0x87,
+	0xa0, 0x71, 0x3c, 0x41, 0xf7, 0xa0, 0xc6, 0x77, 0x91, 0x3c, 0xc7, 0xdb, 0x25, 0x33, 0x2c, 0x64,
+	0xdd, 0x3f, 0x56, 0xa0, 0x31, 0x8c, 0x16, 0x82, 0x68, 0x0b, 0xa4, 0x5a, 0x29, 0x93, 0xea, 0xff,
+	0x00, 0x28, 0x92, 0x23, 0x3e, 0xa7, 0x97, 0x06, 0x2e, 0x20, 0x68, 0x1d, 0x32, 0x92, 0x94, 0xe7,
+	0x5e, 0x4e, 0x9a, 0x26, 0x28, 0x06, 0x94, 0xa5, 0x4d, 0x46, 0x88, 0x77, 0xa1, 0x39, 0xa7, 0xb1,
+	0xbf, 0x98, 0xa6, 0xfd, 0xd8, 0x27, 0xb2, 0x3a, 0x2b, 0x42, 0x19, 0x99, 0x0b, 0xfa, 0xe0, 0xdf,
+	0xdd, 0x27, 0xa0, 0xab, 0x11, 0x27, 0xe8, 0xff, 0xca, 0xc5, 0x4a, 0x76, 0xd4, 0x28, 0x0d, 0x15,
+	0x96, 0x29, 0x18, 0xa2, 0x7e, 0xb1, 0x4b, 0x89, 0x25, 0x6a, 0x58, 0x37, 0x23, 0xd1, 0x86, 0x00,
+	0x6c, 0x1f, 0x3d, 0x86, 0x42, 0x0e, 0xf2, 0x19, 0x17, 0x4a, 0xa1, 0xdc, 0x49, 0x31, 0x53, 0x19,
+	0x41, 0x43, 0xc1, 0xff, 0xdb, 0xc3, 0xb9, 0x7f, 0x85, 0x6f, 0x45, 0x85, 0xf4, 0xc1, 0xd5, 0x0e,
+	0x7e, 0x00, 0xd9, 0x7e, 0x9e, 0x91, 0xe3, 0xd2, 0xbb, 0xbd, 0xbc, 0x99, 0x11, 0x9f, 0x97, 0xa9,
+	0x6a, 0x99, 0xfb, 0xf8, 0xf0, 0x6d, 0x3e, 0x64, 0x92, 0x04, 0x71, 0x74, 0x75, 0xfe, 0x7f, 0xf9,
+	0xaf, 0x27, 0xa3, 0x5b, 0x70, 0xe3, 0x32, 0x19, 0xb1, 0x4c, 0xd4, 0xde, 0xc2, 0x52, 0xf5, 0xee,
+	0x3f, 0xd4, 0x94, 0xfe, 0x63, 0xec, 0x64, 0xc2, 0x6a, 0x36, 0x00, 0x77, 0xe8, 0xa8, 0x18, 0x18,
+	0x35, 0xb4, 0x0e, 0x37, 0x4b, 0x92, 0xa1, 0x33, 0x71, 0x45, 0x51, 0xab, 0x31, 0xd9, 0xa1, 0xe5,
+	0x0c, 0x86, 0xd8, 0x95, 0x1d, 0xbf, 0xb0, 0x47, 0x2f, 0x7a, 0xe3, 0xfe, 0x73, 0xa3, 0xce, 0x26,
+	0x3d, 0x7c, 0xd1, 0xb7, 0xdd, 0x31, 0xee, 0x39, 0xa3, 0x3d, 0x0b, 0xcb, 0xae, 0x1a, 0xac, 0x2b,
+	0x45, 0x3f, 0x7b, 0x93, 0x91, 0x35, 0x70, 0x77, 0xbf, 0x64, 0x4e, 0x0d, 0xbd, 0xfb, 0xbb, 0x2a,
+	0xac, 0xbe, 0x69, 0xb9, 0xff, 0xdd, 0xac, 0x98, 0xe9, 0xf5, 0x87, 0x2f, 0x5e, 0xd8, 0x63, 0x49,
+	0x8b, 0x19, 0x57, 0x4a, 0x94, 0x2f, 0xdd, 0x26, 0xdc, 0x2e, 0xbb, 0x1c, 0x3a, 0x6e, 0x6f, 0x77,
+	0x28, 0xa8, 0x54, 0x43, 0xef, 0x81, 0xf9, 0x66, 0x31, 0x5b, 0x46, 0x74, 0x1b, 0xd6, 0x8a, 0x1e,
+	0x73, 0xc3, 0x42, 0x10, 0x8a, 0x22, 0x6b, 0x60, 0xe8, 0x68, 0x0d, 0xae, 0x0b, 0x89, 0xda, 0x19,
+	0xcc, 0x00, 0xba, 0xdf, 0xd4, 0x60, 0xf9, 0x20, 0xa6, 0x29, 0xba, 0x05, 0xf5, 0x79, 0x4c, 0x53,
+	0x37, 0x8a, 0x79, 0x7e, 0xb7, 0xb1, 0xc6, 0x9a, 0x4e, 0xcc, 0xca, 0xb7, 0xd0, 0x3b, 0x22, 0xa1,
+	0xac, 0xc3, 0x44, 0x03, 0x7d, 0x24, 0x2f, 0x43, 0x22, 0x49, 0xf3, 0x22, 0x3a, 0xa6, 0x29, 0xff,
+	0x53, 0xb8, 0x0a, 0xfd, 0x18, 0x9a, 0x9e, 0x3f, 0x0b, 0xa2, 0x52, 0x31, 0x66, 0x6e, 0xcb, 0x2b,
+	0x73, 0x8f, 0x89, 0x44, 0x4a, 0xf2, 0x1b, 0x1b, 0x06, 0x2f, 0x43, 0x98, 0x69, 0x3c, 0x27, 0x94,
+	0x5b, 0x2e, 0x12, 0x4e, 0x9c, 0x05, 0xd3, 0xe1, 0x9c, 0xd0, 0x11, 0x97, 0x28, 0xd3, 0x38, 0x43,
+	0xca, 0x7c, 0x58, 0xbf, 0xc4, 0x87, 0x0f, 0xa0, 0x36, 0x27, 0x84, 0x26, 0x66, 0xe3, 0xd2, 0x1d,
+	0x80, 0x0f, 0x9f, 0x10, 0xca, 0x3e, 0xb0, 0xd0, 0x61, 0x97, 0x24, 0x7a, 0xe1, 0xce, 0xbd, 0xe9,
+	0x4b, 0x92, 0x26, 0xbc, 0xbe, 0xd2, 0xb0, 0x4e, 0x2f, 0x0e, 0x04, 0xc0, 0x6a, 0x64, 0x7a, 0x21,
+	0x0b, 0x3e, 0xe0, 0xc2, 0x3a, 0xbd, 0x10, 0x85, 0xde, 0x06, 0xe8, 0xf4, 0xc2, 0x25, 0x94, 0xc6,
+	0x34, 0xe1, 0x45, 0x95, 0x86, 0x1b, 0xf4, 0xc2, 0xe2, 0x6d, 0xe6, 0x36, 0xcd, 0xdd, 0xb6, 0x84,
+	0xdb, 0xb4, 0xe8, 0x36, 0x55, 0x6e, 0xdb, 0xc2, 0x6d, 0x9a, 0xbb, 0x4d, 0x33, 0xb7, 0x1d, 0xe1,
+	0x36, 0x55, 0x6e, 0x1f, 0x41, 0x23, 0x3e, 0x9e, 0xbb, 0x6c, 0xf1, 0xcc, 0x15, 0x4e, 0xf4, 0x6b,
+	0xdb, 0xc5, 0x77, 0x06, 0x25, 0xc4, 0xf5, 0xf8, 0x78, 0xce, 0xa6, 0xb9, 0xfe, 0x14, 0x1a, 0x6a,
+	0xca, 0xef, 0x3e, 0x45, 0x0a, 0x5b, 0xa4, 0x5a, 0xdc, 0x22, 0xdd, 0x04, 0x1a, 0x6a, 0xcd, 0xd9,
+	0x85, 0x34, 0xcf, 0x26, 0x03, 0x5a, 0xd6, 0xf8, 0xb9, 0x85, 0x1d, 0x6b, 0xec, 0x3a, 0x8e, 0x6d,
+	0x54, 0x4a, 0xc8, 0xc4, 0xb1, 0xc5, 0x0d, 0xf6, 0x80, 0xe5, 0xff, 0xfe, 0xd8, 0x58, 0xca, 0x1a,
+	0xce, 0x44, 0x94, 0x36, 0x87, 0x16, 0x53, 0x64, 0xb2, 0x5a, 0xa1, 0xe9, 0x4c, 0x0c, 0xad, 0xfb,
+	0x00, 0x6a, 0xac, 0xd3, 0x04, 0x75, 0xcb, 0xa7, 0x66, 0xab, 0xb8, 0x98, 0xea, 0xc4, 0xfc, 0x7d,
+	0x13, 0x34, 0x71, 0x64, 0xa2, 0xb5, 0xfc, 0x9a, 0xa1, 0x6e, 0x88, 0xec, 0xb6, 0x71, 0xbb, 0x70,
+	0xbb, 0xcf, 0x04, 0x62, 0x03, 0xdf, 0x86, 0x65, 0x1a, 0xc7, 0x69, 0xf9, 0xf2, 0xc9, 0x21, 0xd4,
+	0x05, 0x7d, 0xee, 0x51, 0x12, 0xa5, 0xae, 0x2c, 0x08, 0x32, 0xd3, 0x86, 0xc0, 0xf9, 0x66, 0xeb,
+	0x48, 0x1d, 0x15, 0xbd, 0x55, 0x16, 0xbd, 0xec, 0x7a, 0x2a, 0x84, 0x07, 0x22, 0xdb, 0x36, 0xb3,
+	0x4b, 0x54, 0xad, 0xe8, 0x4d, 0xdd, 0xa5, 0x36, 0xa0, 0x36, 0x8b, 0x7d, 0x12, 0x8a, 0x1a, 0x42,
+	0x49, 0x05, 0x86, 0x1e, 0x81, 0x71, 0xea, 0x51, 0xff, 0xdc, 0xa3, 0xf9, 0x55, 0xa5, 0x5e, 0xd4,
+	0x5b, 0x51, 0x62, 0x75, 0x69, 0x79, 0x04, 0xc6, 0x71, 0x40, 0x67, 0x25, 0x8b, 0x46, 0xc9, 0x42,
+	0x89, 0x95, 0xc5, 0x43, 0xd0, 0xf8, 0x19, 0x29, 0x12, 0xa1, 0xf9, 0xb8, 0x53, 0x3a, 0x5a, 0x93,
+	0x6c, 0xbc, 0x42, 0x89, 0xdd, 0xcc, 0x13, 0x42, 0x03, 0x2f, 0x74, 0xa3, 0xc5, 0xec, 0x88, 0x50,
+	0x9e, 0x21, 0x99, 0xf7, 0x96, 0x90, 0x39, 0x5c, 0xc4, 0x62, 0x99, 0x3f, 0x6e, 0x99, 0xa5, 0x58,
+	0x66, 0x6f, 0x5c, 0x77, 0xf2, 0x47, 0xac, 0x66, 0x51, 0x23, 0x7b, 0xcb, 0x42, 0xb0, 0x7c, 0x16,
+	0x7a, 0x11, 0xcf, 0xa7, 0x36, 0xe6, 0xdf, 0xec, 0xf2, 0x33, 0xf3, 0xa6, 0xae, 0xe7, 0xfb, 0x94,
+	0x24, 0x22, 0x9b, 0x74, 0x0c, 0x33, 0x6f, 0xda, 0x13, 0x08, 0xba, 0x07, 0xad, 0x60, 0x7e, 0xf6,
+	0x71, 0xa6, 0xc1, 0x72, 0x4a, 0x7f, 0x7e, 0x0d, 0x37, 0x19, 0x5a, 0x56, 0xfa, 0x24, 0x53, 0x5a,
+	0x29, 0x28, 0x7d, 0xa2, 0x94, 0xde, 0x87, 0xf6, 0x69, 0x9c, 0xa4, 0xae, 0x17, 0xf9, 0x22, 0x05,
+	0xd7, 0x94, 0x16, 0x83, 0x7b, 0x91, 0xcf, 0xb3, 0x6c, 0x13, 0x80, 0x5c, 0xa4, 0xd4, 0x73, 0x3d,
+	0x7a, 0x92, 0x98, 0xb7, 0xc4, 0xab, 0x0c, 0x47, 0x7a, 0xf4, 0x24, 0x41, 0x4f, 0xa1, 0x3d, 0xa7,
+	0xf1, 0xc5, 0xeb, 0xac, 0xab, 0x1b, 0x3c, 0xd4, 0x1b, 0xe5, 0xb7, 0xab, 0xed, 0x03, 0xa6, 0x23,
+	0x3b, 0xc6, 0xad, 0x79, 0xa1, 0x75, 0x99, 0x72, 0x8d, 0x7f, 0x81, 0x72, 0x9f, 0x96, 0x29, 0xf7,
+	0xfa, 0xbb, 0x29, 0x57, 0xc5, 0xbf, 0xc8, 0xbc, 0x9b, 0x59, 0x05, 0x77, 0xb3, 0xb4, 0x85, 0x65,
+	0x85, 0x66, 0x43, 0x67, 0x1a, 0x47, 0x11, 0x99, 0xa6, 0xaa, 0x0f, 0xc4, 0xfb, 0xd8, 0x50, 0x7d,
+	0xf4, 0x85, 0xf4, 0x4d, 0xdd, 0xb4, 0xa7, 0x45, 0x19, 0xfa, 0x7f, 0xd0, 0xa6, 0x8b, 0x24, 0x8d,
+	0x67, 0xe6, 0x53, 0x1e, 0xa1, 0xd5, 0x6d, 0xf1, 0x60, 0xbb, 0xad, 0x1e, 0x6c, 0xb7, 0x7b, 0xd1,
+	0x6b, 0x2c, 0x75, 0xd0, 0x67, 0x00, 0xf3, 0x99, 0xbc, 0x01, 0x27, 0xe6, 0xd7, 0x15, 0x6e, 0x72,
+	0xfd, 0xf2, 0x73, 0x4e, 0xb2, 0x5b, 0xfb, 0xeb, 0x77, 0xdf, 0x6e, 0x5e, 0xc3, 0xfa, 0x3c, 0x7b,
+	0xb3, 0xda, 0x87, 0x15, 0x51, 0x54, 0xaa, 0x52, 0x35, 0x31, 0x7f, 0x59, 0x79, 0xc7, 0xf5, 0x65,
+	0xb7, 0xc9, 0x5c, 0x68, 0xe2, 0xfd, 0x02, 0x77, 0x82, 0xd2, 0x0d, 0x68, 0xfd, 0xeb, 0x2a, 0xb4,
+	0x8a, 0x6b, 0xf7, 0x6e, 0xd2, 0xbd, 0x03, 0x4d, 0x29, 0xcc, 0xe9, 0x09, 0x83, 0x9f, 0xbf, 0x11,
+	0x6f, 0x02, 0x4c, 0x4f, 0xbd, 0x28, 0x22, 0x21, 0x33, 0x17, 0x0f, 0x45, 0xba, 0x44, 0x6c, 0x1f,
+	0x6d, 0x81, 0xa1, 0xc4, 0xe2, 0xa9, 0x4f, 0x12, 0x55, 0x1b, 0x77, 0x24, 0xce, 0x9f, 0xbd, 0x6c,
+	0x1f, 0xed, 0xc0, 0x0d, 0xa5, 0x99, 0x12, 0x3a, 0x0b, 0x22, 0x5e, 0x29, 0xc9, 0x8b, 0x0c, 0x92,
+	0xa2, 0x71, 0x2e, 0x41, 0x6b, 0xa0, 0xc5, 0xd1, 0x82, 0x39, 0xd4, 0xc4, 0xcb, 0x4e, 0x1c, 0x2d,
+	0x6c, 0x1f, 0xbd, 0x0f, 0x1d, 0x06, 0x27, 0x24, 0x61, 0x8c, 0xa1, 0x8e, 0xdf, 0x36, 0x6e, 0xc5,
+	0xd1, 0x62, 0x24, 0x40, 0xdb, 0xdf, 0xd5, 0x59, 0x26, 0xf3, 0xf9, 0x77, 0x77, 0xa0, 0x2e, 0xb6,
+	0x34, 0xcb, 0x9f, 0x12, 0x97, 0x77, 0xca, 0x5b, 0x5e, 0xb1, 0xf9, 0x1f, 0x96, 0x60, 0x75, 0x14,
+	0xcc, 0x16, 0xa1, 0x97, 0x92, 0x5e, 0xe8, 0xd1, 0x19, 0x26, 0xaf, 0x16, 0x24, 0x49, 0xaf, 0x3c,
+	0x21, 0xbd, 0x07, 0x7a, 0x10, 0xf9, 0xc1, 0xd4, 0x4b, 0x63, 0xf5, 0xea, 0x9d, 0x03, 0xec, 0x3c,
+	0x0b, 0xa2, 0xf4, 0x58, 0x85, 0x4d, 0xc7, 0x1a, 0x6b, 0x8a, 0x19, 0x70, 0xaa, 0x66, 0x11, 0x17,
+	0x2f, 0xa7, 0xe2, 0x7d, 0xad, 0x35, 0x97, 0xa7, 0x1c, 0x7f, 0x3c, 0xed, 0x42, 0x9b, 0xcd, 0x33,
+	0x5f, 0x3a, 0x79, 0xe5, 0x8b, 0xa3, 0xc5, 0x40, 0xad, 0xde, 0x13, 0xb8, 0x19, 0x44, 0x8c, 0x59,
+	0x89, 0x7b, 0x14, 0xa4, 0xe2, 0xcc, 0x76, 0x29, 0xcb, 0x49, 0x16, 0xb2, 0x1a, 0xbe, 0x21, 0xa5,
+	0xbb, 0x41, 0xca, 0xcf, 0x6f, 0x2c, 0xae, 0x18, 0x35, 0x9f, 0x06, 0xc7, 0x29, 0x8f, 0x5b, 0x0d,
+	0x8b, 0x06, 0x1b, 0x6d, 0x44, 0xce, 0x5d, 0xf2, 0xca, 0xe7, 0x14, 0x5d, 0xc3, 0x5a, 0x44, 0xce,
+	0xad, 0x57, 0x3e, 0xba, 0x0f, 0xd7, 0x45, 0xbc, 0x8b, 0x3c, 0x2b, 0x9e, 0x81, 0x56, 0x78, 0xc8,
+	0x0b, 0x1c, 0xfb, 0x1c, 0x74, 0x96, 0xa9, 0x62, 0x65, 0x81, 0xe7, 0xdd, 0x7d, 0x15, 0xe3, 0x37,
+	0x45, 0x94, 0x27, 0x3c, 0xd7, 0xe6, 0x05, 0x5d, 0x6e, 0xdc, 0xfd, 0x00, 0xda, 0x25, 0x19, 0xd2,
+	0xa1, 0x86, 0x7b, 0xf6, 0xc8, 0x12, 0x4f, 0xd5, 0xfd, 0x7d, 0xab, 0x87, 0x8d, 0xca, 0xee, 0x08,
+	0x6e, 0xc4, 0xf4, 0x84, 0x57, 0x20, 0xd3, 0x98, 0xfa, 0xb2, 0xaf, 0xdd, 0xd6, 0x21, 0xff, 0x2f,
+	0xe2, 0xf4, 0xf3, 0xed, 0x93, 0x20, 0x3d, 0x5d, 0x1c, 0x31, 0x02, 0xd8, 0x51, 0x9a, 0x3b, 0x42,
+	0xf3, 0xa1, 0xfc, 0xa9, 0xe4, 0xec, 0xe3, 0x9d, 0x93, 0x58, 0x62, 0x47, 0x1a, 0x07, 0x9f, 0xfc,
+	0x33, 0x00, 0x00, 0xff, 0xff, 0x07, 0x84, 0x3f, 0x04, 0xc4, 0x19, 0x00, 0x00,
 }
diff --git a/vendor/github.com/opencord/voltha-protos/v4/go/voltha/health.pb.go b/vendor/github.com/opencord/voltha-protos/v4/go/voltha/health.pb.go
index 2c8c75b..4bde873 100644
--- a/vendor/github.com/opencord/voltha-protos/v4/go/voltha/health.pb.go
+++ b/vendor/github.com/opencord/voltha-protos/v4/go/voltha/health.pb.go
@@ -11,6 +11,8 @@
 	_ "github.com/opencord/voltha-protos/v4/go/common"
 	_ "google.golang.org/genproto/googleapis/api/annotations"
 	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
 	math "math"
 )
 
@@ -164,6 +166,14 @@
 	GetHealthStatus(context.Context, *empty.Empty) (*HealthStatus, error)
 }
 
+// UnimplementedHealthServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedHealthServiceServer struct {
+}
+
+func (*UnimplementedHealthServiceServer) GetHealthStatus(ctx context.Context, req *empty.Empty) (*HealthStatus, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetHealthStatus not implemented")
+}
+
 func RegisterHealthServiceServer(s *grpc.Server, srv HealthServiceServer) {
 	s.RegisterService(&_HealthService_serviceDesc, srv)
 }
diff --git a/vendor/github.com/opencord/voltha-protos/v4/go/voltha/logical_device.pb.go b/vendor/github.com/opencord/voltha-protos/v4/go/voltha/logical_device.pb.go
index 4b96daa..5428ecc 100644
--- a/vendor/github.com/opencord/voltha-protos/v4/go/voltha/logical_device.pb.go
+++ b/vendor/github.com/opencord/voltha-protos/v4/go/voltha/logical_device.pb.go
@@ -313,7 +313,9 @@
 	proto.RegisterType((*LogicalDevices)(nil), "voltha.LogicalDevices")
 }
 
-func init() { proto.RegisterFile("voltha_protos/logical_device.proto", fileDescriptor_caf139ab3abc8240) }
+func init() {
+	proto.RegisterFile("voltha_protos/logical_device.proto", fileDescriptor_caf139ab3abc8240)
+}
 
 var fileDescriptor_caf139ab3abc8240 = []byte{
 	// 456 bytes of a gzipped FileDescriptorProto
diff --git a/vendor/github.com/opencord/voltha-protos/v4/go/voltha/ponsim.pb.go b/vendor/github.com/opencord/voltha-protos/v4/go/voltha/ponsim.pb.go
index 4b49c5b..e2abe7f 100644
--- a/vendor/github.com/opencord/voltha-protos/v4/go/voltha/ponsim.pb.go
+++ b/vendor/github.com/opencord/voltha-protos/v4/go/voltha/ponsim.pb.go
@@ -10,6 +10,8 @@
 	empty "github.com/golang/protobuf/ptypes/empty"
 	openflow_13 "github.com/opencord/voltha-protos/v4/go/openflow_13"
 	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
 	math "math"
 )
 
@@ -557,6 +559,26 @@
 	GetStats(context.Context, *empty.Empty) (*PonSimMetrics, error)
 }
 
+// UnimplementedPonSimServer can be embedded to have forward compatible implementations.
+type UnimplementedPonSimServer struct {
+}
+
+func (*UnimplementedPonSimServer) SendFrame(ctx context.Context, req *PonSimFrame) (*empty.Empty, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method SendFrame not implemented")
+}
+func (*UnimplementedPonSimServer) ReceiveFrames(req *empty.Empty, srv PonSim_ReceiveFramesServer) error {
+	return status.Errorf(codes.Unimplemented, "method ReceiveFrames not implemented")
+}
+func (*UnimplementedPonSimServer) GetDeviceInfo(ctx context.Context, req *empty.Empty) (*PonSimDeviceInfo, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetDeviceInfo not implemented")
+}
+func (*UnimplementedPonSimServer) UpdateFlowTable(ctx context.Context, req *FlowTable) (*empty.Empty, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method UpdateFlowTable not implemented")
+}
+func (*UnimplementedPonSimServer) GetStats(ctx context.Context, req *empty.Empty) (*PonSimMetrics, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetStats not implemented")
+}
+
 func RegisterPonSimServer(s *grpc.Server, srv PonSimServer) {
 	s.RegisterService(&_PonSim_serviceDesc, srv)
 }
diff --git a/vendor/github.com/opencord/voltha-protos/v4/go/voltha/voltha.pb.go b/vendor/github.com/opencord/voltha-protos/v4/go/voltha/voltha.pb.go
index 2ec3452..7e9a2a5 100644
--- a/vendor/github.com/opencord/voltha-protos/v4/go/voltha/voltha.pb.go
+++ b/vendor/github.com/opencord/voltha-protos/v4/go/voltha/voltha.pb.go
@@ -14,6 +14,8 @@
 	openflow_13 "github.com/opencord/voltha-protos/v4/go/openflow_13"
 	_ "google.golang.org/genproto/googleapis/api/annotations"
 	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
 	math "math"
 )
 
@@ -104,6 +106,7 @@
 const OperStatus_TESTING = OperStatus_Types(common.OperStatus_TESTING)
 const OperStatus_ACTIVE = OperStatus_Types(common.OperStatus_ACTIVE)
 const OperStatus_FAILED = OperStatus_Types(common.OperStatus_FAILED)
+const OperStatus_RECONCILING = OperStatus_Types(common.OperStatus_RECONCILING)
 
 // ConnectStatus_Types from public import voltha_protos/common.proto
 type ConnectStatus_Types = common.ConnectStatus_Types
@@ -124,6 +127,7 @@
 const OperationResp_OPERATION_SUCCESS = OperationResp_OperationReturnCode(common.OperationResp_OPERATION_SUCCESS)
 const OperationResp_OPERATION_FAILURE = OperationResp_OperationReturnCode(common.OperationResp_OPERATION_FAILURE)
 const OperationResp_OPERATION_UNSUPPORTED = OperationResp_OperationReturnCode(common.OperationResp_OPERATION_UNSUPPORTED)
+const OperationResp_OPERATION_IN_PROGRESS = OperationResp_OperationReturnCode(common.OperationResp_OPERATION_IN_PROGRESS)
 
 // ValueType_Type from public import voltha_protos/common.proto
 type ValueType_Type = common.ValueType_Type
@@ -2131,6 +2135,174 @@
 	return ""
 }
 
+type DeviceImageDownloadRequest struct {
+	// Device Id
+	// allows for operations on multiple devices.
+	DeviceId []*common.ID `protobuf:"bytes,1,rep,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"`
+	//The image for the device containing all the information
+	Image *Image `protobuf:"bytes,2,opt,name=image,proto3" json:"image,omitempty"`
+	//Activate the image if the download to the device is successful
+	ActivateOnSuccess bool `protobuf:"varint,3,opt,name=activateOnSuccess,proto3" json:"activateOnSuccess,omitempty"`
+	//Automatically commit the image if the activation on the device is successful
+	CommitOnSuccess      bool     `protobuf:"varint,4,opt,name=commitOnSuccess,proto3" json:"commitOnSuccess,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *DeviceImageDownloadRequest) Reset()         { *m = DeviceImageDownloadRequest{} }
+func (m *DeviceImageDownloadRequest) String() string { return proto.CompactTextString(m) }
+func (*DeviceImageDownloadRequest) ProtoMessage()    {}
+func (*DeviceImageDownloadRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e084f1a60ce7016c, []int{15}
+}
+
+func (m *DeviceImageDownloadRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DeviceImageDownloadRequest.Unmarshal(m, b)
+}
+func (m *DeviceImageDownloadRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DeviceImageDownloadRequest.Marshal(b, m, deterministic)
+}
+func (m *DeviceImageDownloadRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DeviceImageDownloadRequest.Merge(m, src)
+}
+func (m *DeviceImageDownloadRequest) XXX_Size() int {
+	return xxx_messageInfo_DeviceImageDownloadRequest.Size(m)
+}
+func (m *DeviceImageDownloadRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_DeviceImageDownloadRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DeviceImageDownloadRequest proto.InternalMessageInfo
+
+func (m *DeviceImageDownloadRequest) GetDeviceId() []*common.ID {
+	if m != nil {
+		return m.DeviceId
+	}
+	return nil
+}
+
+func (m *DeviceImageDownloadRequest) GetImage() *Image {
+	if m != nil {
+		return m.Image
+	}
+	return nil
+}
+
+func (m *DeviceImageDownloadRequest) GetActivateOnSuccess() bool {
+	if m != nil {
+		return m.ActivateOnSuccess
+	}
+	return false
+}
+
+func (m *DeviceImageDownloadRequest) GetCommitOnSuccess() bool {
+	if m != nil {
+		return m.CommitOnSuccess
+	}
+	return false
+}
+
+type DeviceImageRequest struct {
+	//Device Id
+	//allows for operations on multiple adapters.
+	DeviceId []*common.ID `protobuf:"bytes,1,rep,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"`
+	// Image Version, this is the sole identifier of the image. it's the vendor specified OMCI version
+	// must be known at the time of initiating a download, activate, commit image on an onu.
+	Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"`
+	//Automatically commit the image if the activation on the device is successful
+	CommitOnSuccess      bool     `protobuf:"varint,3,opt,name=commitOnSuccess,proto3" json:"commitOnSuccess,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *DeviceImageRequest) Reset()         { *m = DeviceImageRequest{} }
+func (m *DeviceImageRequest) String() string { return proto.CompactTextString(m) }
+func (*DeviceImageRequest) ProtoMessage()    {}
+func (*DeviceImageRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e084f1a60ce7016c, []int{16}
+}
+
+func (m *DeviceImageRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DeviceImageRequest.Unmarshal(m, b)
+}
+func (m *DeviceImageRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DeviceImageRequest.Marshal(b, m, deterministic)
+}
+func (m *DeviceImageRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DeviceImageRequest.Merge(m, src)
+}
+func (m *DeviceImageRequest) XXX_Size() int {
+	return xxx_messageInfo_DeviceImageRequest.Size(m)
+}
+func (m *DeviceImageRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_DeviceImageRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DeviceImageRequest proto.InternalMessageInfo
+
+func (m *DeviceImageRequest) GetDeviceId() []*common.ID {
+	if m != nil {
+		return m.DeviceId
+	}
+	return nil
+}
+
+func (m *DeviceImageRequest) GetVersion() string {
+	if m != nil {
+		return m.Version
+	}
+	return ""
+}
+
+func (m *DeviceImageRequest) GetCommitOnSuccess() bool {
+	if m != nil {
+		return m.CommitOnSuccess
+	}
+	return false
+}
+
+type DeviceImageResponse struct {
+	//Image state for the different devices
+	DeviceImageStates    []*DeviceImageState `protobuf:"bytes,1,rep,name=device_image_states,json=deviceImageStates,proto3" json:"device_image_states,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
+	XXX_unrecognized     []byte              `json:"-"`
+	XXX_sizecache        int32               `json:"-"`
+}
+
+func (m *DeviceImageResponse) Reset()         { *m = DeviceImageResponse{} }
+func (m *DeviceImageResponse) String() string { return proto.CompactTextString(m) }
+func (*DeviceImageResponse) ProtoMessage()    {}
+func (*DeviceImageResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e084f1a60ce7016c, []int{17}
+}
+
+func (m *DeviceImageResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DeviceImageResponse.Unmarshal(m, b)
+}
+func (m *DeviceImageResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DeviceImageResponse.Marshal(b, m, deterministic)
+}
+func (m *DeviceImageResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DeviceImageResponse.Merge(m, src)
+}
+func (m *DeviceImageResponse) XXX_Size() int {
+	return xxx_messageInfo_DeviceImageResponse.Size(m)
+}
+func (m *DeviceImageResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_DeviceImageResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DeviceImageResponse proto.InternalMessageInfo
+
+func (m *DeviceImageResponse) GetDeviceImageStates() []*DeviceImageState {
+	if m != nil {
+		return m.DeviceImageStates
+	}
+	return nil
+}
+
 // Additional information required to process flow at device adapters
 type FlowMetadata struct {
 	// Meters associated with flow-update to adapter
@@ -2144,7 +2316,7 @@
 func (m *FlowMetadata) String() string { return proto.CompactTextString(m) }
 func (*FlowMetadata) ProtoMessage()    {}
 func (*FlowMetadata) Descriptor() ([]byte, []int) {
-	return fileDescriptor_e084f1a60ce7016c, []int{15}
+	return fileDescriptor_e084f1a60ce7016c, []int{18}
 }
 
 func (m *FlowMetadata) XXX_Unmarshal(b []byte) error {
@@ -2191,177 +2363,198 @@
 	proto.RegisterType((*SelfTestResponse)(nil), "voltha.SelfTestResponse")
 	proto.RegisterType((*OfAgentSubscriber)(nil), "voltha.OfAgentSubscriber")
 	proto.RegisterType((*Membership)(nil), "voltha.Membership")
+	proto.RegisterType((*DeviceImageDownloadRequest)(nil), "voltha.DeviceImageDownloadRequest")
+	proto.RegisterType((*DeviceImageRequest)(nil), "voltha.DeviceImageRequest")
+	proto.RegisterType((*DeviceImageResponse)(nil), "voltha.DeviceImageResponse")
 	proto.RegisterType((*FlowMetadata)(nil), "voltha.FlowMetadata")
 }
 
 func init() { proto.RegisterFile("voltha_protos/voltha.proto", fileDescriptor_e084f1a60ce7016c) }
 
 var fileDescriptor_e084f1a60ce7016c = []byte{
-	// 2613 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x5b, 0x6f, 0x1b, 0xc7,
-	0xf5, 0x17, 0x75, 0xd7, 0x21, 0x25, 0x91, 0x43, 0x5d, 0x68, 0x4a, 0xb2, 0xad, 0xc9, 0x4d, 0x51,
-	0x62, 0xd2, 0xb1, 0x9c, 0x20, 0xff, 0xf8, 0x1f, 0x34, 0xba, 0x59, 0x61, 0x6d, 0x99, 0xec, 0x52,
-	0xb2, 0xd3, 0x36, 0x06, 0xb1, 0xe4, 0x0e, 0xa9, 0x85, 0x97, 0x5c, 0x76, 0x77, 0x28, 0x5b, 0x30,
-	0x82, 0x02, 0xe9, 0x25, 0x7d, 0xcf, 0x7b, 0x9f, 0x5a, 0x14, 0xe8, 0x77, 0xc9, 0x43, 0xd1, 0xa7,
-	0xbe, 0x16, 0x7d, 0xe8, 0x27, 0xc8, 0x73, 0x31, 0x67, 0x66, 0xc9, 0x5d, 0xee, 0xae, 0x24, 0xa6,
-	0x01, 0xfa, 0x24, 0xed, 0x39, 0x67, 0x7e, 0xe7, 0x36, 0x73, 0xe6, 0xec, 0x59, 0x42, 0xfe, 0xdc,
-	0xb6, 0xf8, 0x99, 0x5e, 0xeb, 0x3a, 0x36, 0xb7, 0xdd, 0xa2, 0x7c, 0x2a, 0xe0, 0x13, 0x99, 0x96,
-	0x4f, 0xf9, 0xf5, 0x96, 0x6d, 0xb7, 0x2c, 0x56, 0xd4, 0xbb, 0x66, 0x51, 0xef, 0x74, 0x6c, 0xae,
-	0x73, 0xd3, 0xee, 0xb8, 0x52, 0x2a, 0xbf, 0xa6, 0xb8, 0xf8, 0x54, 0xef, 0x35, 0x8b, 0xac, 0xdd,
-	0xe5, 0x17, 0x8a, 0x99, 0x0b, 0xc2, 0xb7, 0x19, 0x57, 0xe0, 0xf9, 0x21, 0xc5, 0x0d, 0xbb, 0xdd,
-	0xb6, 0x3b, 0xd1, 0xbc, 0x33, 0xa6, 0x5b, 0xfc, 0x4c, 0xf1, 0x68, 0x90, 0x67, 0xd9, 0x2d, 0xb3,
-	0xa1, 0x5b, 0x35, 0x83, 0x9d, 0x9b, 0x0d, 0x16, 0xbd, 0x3e, 0xc0, 0x5b, 0x0b, 0xf2, 0x74, 0x43,
-	0xef, 0x72, 0xe6, 0x28, 0xe6, 0xad, 0x20, 0xd3, 0xee, 0xb2, 0x4e, 0xd3, 0xb2, 0x5f, 0xd6, 0x3e,
-	0xd8, 0x89, 0x11, 0x68, 0x37, 0xcc, 0x5a, 0xdb, 0xac, 0xd7, 0x8c, 0xba, 0x12, 0xd8, 0x8c, 0x10,
-	0xd0, 0x2d, 0xdd, 0x69, 0x0f, 0x44, 0x6e, 0x06, 0x45, 0xd8, 0x2b, 0x5e, 0x6b, 0xd8, 0x9d, 0xa6,
-	0xd9, 0x92, 0x7c, 0xfa, 0xa7, 0x04, 0x24, 0x0f, 0xd0, 0xe4, 0x23, 0xc7, 0xee, 0x75, 0xc9, 0x32,
-	0x8c, 0x9b, 0x46, 0x2e, 0x71, 0x3b, 0xb1, 0x35, 0xb7, 0x37, 0xf5, 0xef, 0xef, 0xbf, 0xdb, 0x48,
-	0x68, 0xe3, 0xa6, 0x41, 0x4a, 0xb0, 0x18, 0x74, 0xde, 0xcd, 0x8d, 0xdf, 0x9e, 0xd8, 0x4a, 0xde,
-	0x5b, 0x2e, 0xa8, 0x2c, 0x3e, 0x96, 0x6c, 0x89, 0xb5, 0x37, 0xf7, 0xcf, 0xef, 0xbf, 0xdb, 0x98,
-	0x14, 0x58, 0xda, 0x82, 0xe5, 0xe7, 0xb8, 0x64, 0x07, 0x66, 0x3c, 0x88, 0x09, 0x84, 0x58, 0xf0,
-	0x20, 0xc2, 0x6b, 0x3d, 0x49, 0xfa, 0x7f, 0x90, 0xf2, 0x59, 0xe9, 0x92, 0x77, 0x61, 0xca, 0xe4,
-	0xac, 0xed, 0xe6, 0x12, 0x08, 0x91, 0x0d, 0x42, 0xa0, 0x90, 0x26, 0x25, 0xe8, 0x1f, 0x13, 0x40,
-	0x0e, 0xcf, 0x59, 0x87, 0x3f, 0x34, 0x2d, 0xce, 0x1c, 0xad, 0x67, 0xb1, 0x47, 0xec, 0x82, 0x7e,
-	0x93, 0x80, 0xec, 0x10, 0xf9, 0xe4, 0xa2, 0xcb, 0xc8, 0x02, 0x40, 0x13, 0x29, 0x35, 0xdd, 0xb2,
-	0xd2, 0x63, 0x24, 0x05, 0xb3, 0x0d, 0x9d, 0xb3, 0x96, 0xed, 0x5c, 0xa4, 0x13, 0x24, 0x0d, 0x29,
-	0xb7, 0x57, 0xaf, 0xf5, 0x29, 0xe3, 0x84, 0xc0, 0xc2, 0x8b, 0xae, 0x59, 0x63, 0x02, 0xaa, 0xc6,
-	0x2f, 0xba, 0x2c, 0x3d, 0x41, 0x96, 0x21, 0x23, 0x83, 0xec, 0x27, 0x4f, 0x0a, 0xb2, 0xf4, 0xc7,
-	0x4f, 0x9e, 0xa2, 0x26, 0x2c, 0x0e, 0x19, 0x42, 0x3e, 0x83, 0x89, 0x17, 0xec, 0x02, 0xd3, 0xb0,
-	0x70, 0xaf, 0xe0, 0x39, 0x17, 0xf6, 0xa2, 0x10, 0xe1, 0x81, 0x26, 0x96, 0x92, 0x25, 0x98, 0x3a,
-	0xd7, 0xad, 0x1e, 0xcb, 0x8d, 0x8b, 0x54, 0x6a, 0xf2, 0x81, 0xfe, 0x25, 0x01, 0x49, 0xdf, 0x92,
-	0xb8, 0x6c, 0xaf, 0xc0, 0x34, 0xeb, 0xe8, 0x75, 0x4b, 0xae, 0x9e, 0xd5, 0xd4, 0x13, 0x59, 0x83,
-	0x39, 0xe5, 0x80, 0x69, 0xe4, 0x26, 0x10, 0x78, 0x56, 0x12, 0x4a, 0x06, 0xd9, 0x00, 0x18, 0xb8,
-	0x95, 0x9b, 0x44, 0xee, 0x1c, 0x52, 0x30, 0xae, 0x77, 0x60, 0xca, 0xe9, 0x59, 0xcc, 0xcd, 0x4d,
-	0x61, 0xc6, 0x56, 0x63, 0x9c, 0xd2, 0xa4, 0x14, 0xfd, 0x14, 0x52, 0x3e, 0x8e, 0x4b, 0xee, 0xc0,
-	0x8c, 0x4c, 0x4b, 0x28, 0xe5, 0x7e, 0x00, 0x4f, 0x86, 0xbe, 0x80, 0xd4, 0xbe, 0xed, 0xb0, 0x52,
-	0xc7, 0xe5, 0x7a, 0xa7, 0xc1, 0xc8, 0xdb, 0x90, 0x34, 0xd5, 0xff, 0xb5, 0x61, 0x8f, 0xc1, 0xe3,
-	0x94, 0x0c, 0xb2, 0x03, 0xd3, 0xb2, 0x00, 0xa0, 0xe7, 0xc9, 0x7b, 0x4b, 0x9e, 0x96, 0xcf, 0x91,
-	0x5a, 0xe5, 0x3a, 0xef, 0xb9, 0x7b, 0x53, 0x62, 0x87, 0x8e, 0x69, 0x4a, 0x94, 0x3e, 0x80, 0x79,
-	0xbf, 0x32, 0x97, 0x6c, 0x07, 0x77, 0x67, 0x1f, 0xc4, 0x2f, 0xe5, 0x6d, 0xcf, 0x0f, 0x61, 0xb1,
-	0xdc, 0x6e, 0x98, 0x27, 0xcc, 0xe5, 0x1a, 0xfb, 0x55, 0x8f, 0xb9, 0x9c, 0x2c, 0x0c, 0xb2, 0x82,
-	0xe9, 0x20, 0x30, 0xd9, 0xeb, 0x99, 0x86, 0x4a, 0x25, 0xfe, 0x4f, 0x7f, 0x0d, 0x29, 0xb9, 0xc4,
-	0xed, 0xda, 0x1d, 0x97, 0x91, 0x9f, 0xc0, 0xb4, 0xc3, 0xdc, 0x9e, 0xc5, 0xd5, 0xa6, 0x79, 0xc7,
-	0xd3, 0xe9, 0x97, 0x0a, 0x3c, 0x68, 0x28, 0xae, 0xa9, 0x65, 0xb4, 0x00, 0x24, 0xcc, 0x25, 0x49,
-	0x98, 0xa9, 0x9e, 0xee, 0xef, 0x1f, 0x56, 0xab, 0xe9, 0x31, 0xf1, 0xf0, 0x70, 0xb7, 0xf4, 0xf8,
-	0x54, 0x3b, 0x4c, 0x27, 0xe8, 0x73, 0x98, 0x7d, 0x2a, 0xf6, 0x54, 0x95, 0x85, 0x0d, 0xfe, 0x18,
-	0x52, 0xb2, 0x0c, 0xc9, 0x53, 0xa0, 0x62, 0x99, 0x2d, 0xa8, 0xca, 0xb3, 0x2b, 0x78, 0xfb, 0xf8,
-	0xff, 0xe7, 0x63, 0x5a, 0x52, 0x1f, 0x3c, 0xee, 0xcd, 0xa8, 0x6d, 0x4b, 0xff, 0x31, 0x09, 0xd3,
-	0x4f, 0xd1, 0x03, 0x72, 0x0b, 0x66, 0xce, 0x99, 0xe3, 0x9a, 0x76, 0x27, 0x98, 0x37, 0x8f, 0x4a,
-	0x3e, 0x82, 0x59, 0x55, 0x59, 0xbd, 0xaa, 0xb4, 0xe8, 0x79, 0xbf, 0x2b, 0xe9, 0xfe, 0x9a, 0xd2,
-	0x97, 0x8d, 0x2a, 0x6a, 0x13, 0xff, 0x7d, 0x51, 0x9b, 0xbc, 0x6e, 0x51, 0x23, 0x9f, 0x41, 0x4a,
-	0x1d, 0x27, 0x71, 0x64, 0xbc, 0x93, 0x41, 0x82, 0x2b, 0xc5, 0xe1, 0xf1, 0xaf, 0x4e, 0x1a, 0x7d,
-	0xb2, 0x4b, 0xf6, 0x61, 0x5e, 0x21, 0xb4, 0xb0, 0x2e, 0xe6, 0xa6, 0x63, 0xcb, 0xa1, 0x1f, 0x43,
-	0xa9, 0x55, 0xb5, 0x74, 0x1f, 0xe6, 0xe5, 0xc1, 0xf5, 0x0e, 0xd8, 0x4c, 0xec, 0x01, 0x0b, 0x80,
-	0x30, 0xff, 0xf9, 0xfc, 0x19, 0x64, 0x06, 0xf7, 0x93, 0xce, 0xf5, 0xba, 0xee, 0xb2, 0xdc, 0xba,
-	0x02, 0x12, 0x9c, 0xc2, 0xb1, 0x59, 0x97, 0xe6, 0x1c, 0xe8, 0x5c, 0xdf, 0x4b, 0x0b, 0xa0, 0xa4,
-	0xaf, 0x9e, 0x68, 0x8b, 0x42, 0x4a, 0x08, 0xa9, 0xd5, 0xe4, 0x19, 0x64, 0xfd, 0x37, 0x9a, 0x07,
-	0xba, 0xa1, 0x52, 0x84, 0xa0, 0xb8, 0x95, 0x2e, 0x85, 0x45, 0xb3, 0xa4, 0x98, 0x42, 0xa0, 0x7f,
-	0x4e, 0x40, 0xba, 0xca, 0xac, 0xe6, 0xf5, 0x0e, 0xd0, 0xb0, 0xa4, 0x9f, 0xe0, 0x3f, 0x40, 0x15,
-	0x58, 0x08, 0x72, 0xe2, 0x0f, 0x0f, 0xc9, 0xc0, 0xfc, 0x93, 0xf2, 0x49, 0xad, 0x7a, 0x5a, 0xa9,
-	0x94, 0xb5, 0x93, 0xc3, 0x83, 0xf4, 0xb8, 0x20, 0x9d, 0x3e, 0x79, 0xf4, 0xa4, 0xfc, 0xec, 0x49,
-	0xed, 0x50, 0xd3, 0xca, 0x5a, 0x7a, 0x82, 0x96, 0x21, 0x53, 0x6e, 0xee, 0xb6, 0x58, 0x87, 0x57,
-	0x7b, 0x75, 0xb7, 0xe1, 0x98, 0x75, 0xe6, 0x88, 0x32, 0x6b, 0x37, 0x75, 0x41, 0xec, 0x17, 0x32,
-	0x6d, 0x4e, 0x51, 0x4a, 0x86, 0x28, 0xd1, 0xea, 0xc6, 0xef, 0x17, 0x8c, 0x59, 0x49, 0x28, 0x19,
-	0xf4, 0x01, 0xc0, 0x31, 0x6b, 0xd7, 0x99, 0xe3, 0x9e, 0x99, 0x5d, 0x81, 0x84, 0xbb, 0xa6, 0xd6,
-	0xd1, 0xdb, 0xcc, 0x43, 0x42, 0xca, 0x13, 0xbd, 0xcd, 0xd4, 0xa1, 0x1e, 0xf7, 0x0e, 0x35, 0x3d,
-	0x84, 0xd4, 0x43, 0xcb, 0x7e, 0x79, 0xcc, 0xb8, 0x2e, 0x72, 0x41, 0x3e, 0x84, 0xe9, 0x36, 0xf3,
-	0x15, 0xe4, 0x8d, 0x82, 0xbf, 0x83, 0xb1, 0x9b, 0xdd, 0x1a, 0xb2, 0x55, 0x0d, 0xd0, 0x94, 0xf0,
-	0xbd, 0xbf, 0xdd, 0x85, 0x79, 0x79, 0xb0, 0xab, 0xcc, 0x11, 0x49, 0x22, 0xcf, 0x60, 0xfe, 0x88,
-	0x71, 0x9f, 0x61, 0x2b, 0x05, 0xd9, 0xe5, 0x15, 0xbc, 0x2e, 0xaf, 0x70, 0x28, 0xba, 0xbc, 0x7c,
-	0xff, 0x64, 0x0c, 0x64, 0x69, 0xfe, 0xeb, 0xbf, 0xff, 0xeb, 0xdb, 0xf1, 0x25, 0x42, 0xb0, 0x61,
-	0x3c, 0xff, 0xa0, 0xd8, 0x1e, 0xe0, 0x3c, 0x87, 0xf4, 0x69, 0xd7, 0xd0, 0x39, 0xf3, 0x61, 0x47,
-	0x60, 0xe4, 0x63, 0xf4, 0xd1, 0x0d, 0xc4, 0x5e, 0xa5, 0x11, 0xd8, 0x9f, 0x24, 0xb6, 0xc9, 0x01,
-	0xcc, 0x1d, 0x31, 0xae, 0x8a, 0x54, 0x9c, 0xcd, 0xfd, 0x3a, 0x20, 0xe5, 0xe8, 0x22, 0x62, 0xce,
-	0x91, 0x19, 0x85, 0x49, 0x9e, 0x43, 0xe6, 0xb1, 0xe9, 0xf2, 0xe0, 0x05, 0x12, 0x87, 0xb6, 0x1c,
-	0x75, 0x93, 0xb8, 0xf4, 0x06, 0x82, 0x66, 0x49, 0xc6, 0x33, 0xd4, 0xec, 0x23, 0x55, 0x61, 0xf1,
-	0x88, 0x05, 0xd0, 0x09, 0x14, 0x54, 0xff, 0x5b, 0x3a, 0xc8, 0x47, 0x5e, 0x4d, 0xf4, 0x26, 0xe2,
-	0xe5, 0xc8, 0x4a, 0x08, 0xaf, 0xf8, 0xda, 0x34, 0xbe, 0x22, 0x1a, 0xa4, 0x84, 0xcd, 0xbb, 0x5e,
-	0x21, 0x8d, 0x33, 0x37, 0x3d, 0x54, 0x86, 0x5d, 0x9a, 0x43, 0x64, 0x42, 0xd2, 0x1e, 0x72, 0xbf,
-	0x18, 0x33, 0x20, 0x02, 0xf3, 0x71, 0xb0, 0xae, 0xc6, 0x21, 0xaf, 0x44, 0x56, 0x68, 0x97, 0xde,
-	0x42, 0xfc, 0x1b, 0x64, 0xd5, 0xc3, 0x1f, 0x2a, 0xf0, 0xe4, 0x97, 0x90, 0x3e, 0x62, 0x41, 0x2d,
-	0x81, 0x80, 0x44, 0x97, 0x7e, 0xfa, 0x26, 0xe2, 0xde, 0x24, 0xeb, 0x31, 0xb8, 0x32, 0x2e, 0x4d,
-	0x58, 0x09, 0xf9, 0x50, 0xb1, 0x1d, 0xee, 0x46, 0xc7, 0x5c, 0xc9, 0xa1, 0x04, 0xdd, 0x46, 0x0d,
-	0x6f, 0x12, 0x7a, 0x99, 0x86, 0x62, 0x17, 0xd1, 0x5e, 0xc1, 0xd2, 0xb0, 0x13, 0x02, 0x84, 0x2c,
-	0x47, 0x20, 0x97, 0x8c, 0x7c, 0x36, 0x82, 0x4c, 0xef, 0xa3, 0xbe, 0x02, 0x79, 0xff, 0x6a, 0x7d,
-	0xc5, 0xd7, 0xe2, 0x4f, 0x4d, 0x78, 0xf8, 0xbb, 0x04, 0xac, 0x1e, 0x62, 0x33, 0x78, 0x6d, 0xed,
-	0x71, 0xa7, 0xeb, 0x01, 0x1a, 0xf0, 0x21, 0xdd, 0x19, 0xc5, 0x80, 0xa2, 0xea, 0x44, 0xbf, 0x49,
-	0x40, 0xee, 0xc0, 0x74, 0x7f, 0x14, 0x43, 0xfe, 0x1f, 0x0d, 0xf9, 0x88, 0xde, 0x1f, 0xc9, 0x10,
-	0x43, 0x6a, 0x27, 0x46, 0x44, 0xce, 0x45, 0x9d, 0x0c, 0xe6, 0x9c, 0x04, 0x8a, 0x23, 0xf2, 0xaf,
-	0x99, 0xf1, 0x26, 0x62, 0xfd, 0x26, 0x01, 0xeb, 0xb2, 0x96, 0x85, 0x14, 0x9d, 0xa0, 0x19, 0xeb,
-	0x21, 0x05, 0x48, 0x97, 0x6b, 0x62, 0x5d, 0xbf, 0x83, 0x26, 0xbc, 0x43, 0xaf, 0x61, 0x82, 0xa8,
-	0x78, 0xbf, 0x4d, 0xc0, 0x46, 0x84, 0x15, 0xc7, 0xa2, 0xb2, 0x4b, 0x33, 0xd6, 0x02, 0x66, 0x20,
-	0xe3, 0xd8, 0x36, 0xae, 0xb0, 0xa2, 0x80, 0x56, 0x6c, 0xd1, 0x37, 0x2e, 0xb5, 0x42, 0xde, 0x1f,
-	0xc2, 0x8c, 0x16, 0xac, 0x86, 0x42, 0x8e, 0xaa, 0x82, 0x31, 0xcf, 0x86, 0x6d, 0x71, 0xe9, 0x7b,
-	0xa8, 0xeb, 0x2d, 0x72, 0x1d, 0x5d, 0x84, 0xc3, 0x5a, 0x64, 0x6e, 0x55, 0xe3, 0xe4, 0x57, 0xb6,
-	0x1a, 0x8a, 0xbf, 0x14, 0xa2, 0x77, 0x51, 0xe1, 0x36, 0xd9, 0xba, 0x32, 0xc4, 0xaa, 0x87, 0x23,
-	0xdf, 0x26, 0x60, 0x33, 0x26, 0xd7, 0x88, 0x29, 0x23, 0xbd, 0x19, 0xad, 0xf0, 0x3a, 0x59, 0xdf,
-	0x41, 0x93, 0xee, 0xd0, 0x6b, 0x9b, 0x24, 0x82, 0x5e, 0x86, 0xa4, 0x88, 0xc5, 0x55, 0x85, 0x79,
-	0x31, 0xd8, 0x7a, 0xba, 0x74, 0x15, 0x95, 0x65, 0xc8, 0xa2, 0xa7, 0xcc, 0xab, 0xc4, 0x65, 0x98,
-	0x1f, 0x00, 0x96, 0x8c, 0x78, 0xc8, 0xe4, 0x20, 0xcc, 0x11, 0x57, 0x9d, 0x84, 0x33, 0x0d, 0x97,
-	0x9c, 0x42, 0x5a, 0x63, 0x0d, 0xbb, 0xd3, 0x30, 0x2d, 0xe6, 0x99, 0xe9, 0x5f, 0x1b, 0x1b, 0x8f,
-	0x75, 0xc4, 0x5c, 0xa1, 0x61, 0x4c, 0xe1, 0xf8, 0x21, 0x5e, 0xf3, 0x11, 0x57, 0xc5, 0x50, 0x8b,
-	0xef, 0xc1, 0x90, 0xa5, 0x21, 0x4f, 0xe5, 0xdd, 0xf0, 0x53, 0x48, 0xed, 0x3b, 0x4c, 0xe7, 0xca,
-	0x34, 0x32, 0xb4, 0x3a, 0x84, 0xa6, 0x1a, 0x1b, 0x3a, 0x1c, 0x37, 0x61, 0xd2, 0x33, 0x48, 0xc9,
-	0x22, 0x1c, 0x61, 0x55, 0x9c, 0x93, 0x6f, 0x20, 0xde, 0x06, 0x5d, 0x8b, 0xb2, 0xce, 0x2b, 0xab,
-	0x3f, 0x87, 0x79, 0x55, 0x55, 0x47, 0x40, 0x56, 0x77, 0x23, 0x5d, 0x8f, 0x44, 0xf6, 0xea, 0xe4,
-	0x33, 0x48, 0x69, 0xac, 0x6e, 0xdb, 0xfc, 0x47, 0xb3, 0xd9, 0x41, 0x38, 0x01, 0x7c, 0xc0, 0x2c,
-	0xc6, 0x7f, 0x40, 0x30, 0xb6, 0xa3, 0x81, 0x0d, 0x84, 0x23, 0x75, 0xc8, 0x3c, 0xb4, 0x9d, 0x06,
-	0x1b, 0x19, 0xfd, 0x5d, 0x44, 0x7f, 0x63, 0x7b, 0x33, 0x12, 0xbd, 0x29, 0x30, 0x6b, 0x4a, 0x47,
-	0x0f, 0xe6, 0x0f, 0xec, 0x97, 0x1d, 0xcb, 0xd6, 0x8d, 0x52, 0x5b, 0x6f, 0xb1, 0xc1, 0xdd, 0x85,
-	0x8f, 0x1e, 0x2f, 0xbf, 0xec, 0xa9, 0x2d, 0x77, 0x99, 0x83, 0x13, 0x51, 0xf1, 0x3a, 0x42, 0x3f,
-	0x42, 0x4d, 0x77, 0xe9, 0x7b, 0x91, 0x9a, 0x4c, 0x01, 0x51, 0x33, 0x14, 0x86, 0x5b, 0x7c, 0x2d,
-	0x1a, 0xfd, 0xaf, 0xc4, 0x06, 0xfa, 0x3a, 0x01, 0x2b, 0x47, 0x8c, 0x07, 0x74, 0xc8, 0xd9, 0x46,
-	0xbc, 0x01, 0x51, 0x64, 0xfa, 0x09, 0x1a, 0x70, 0x9f, 0xdc, 0x1b, 0xc1, 0x80, 0xa2, 0x2b, 0x35,
-	0xf5, 0xb0, 0x15, 0x0b, 0xe0, 0x8d, 0xa8, 0x5d, 0x15, 0x32, 0x32, 0x8a, 0xfb, 0xa4, 0x29, 0x1b,
-	0xcd, 0x00, 0x92, 0x3b, 0x94, 0xd7, 0x28, 0x6d, 0x2e, 0x7d, 0x1f, 0xd5, 0xbd, 0x4d, 0xde, 0xbc,
-	0x8e, 0x3a, 0xf2, 0x0a, 0xb2, 0xfb, 0xa2, 0x67, 0xb6, 0xae, 0xe9, 0x61, 0x64, 0x82, 0x95, 0x87,
-	0xdb, 0x23, 0x79, 0xf8, 0x87, 0x04, 0x64, 0x77, 0x1b, 0xdc, 0x3c, 0xd7, 0x39, 0x43, 0x2d, 0xf2,
-	0x3e, 0x18, 0x51, 0xf5, 0x3e, 0xaa, 0xfe, 0x94, 0x7e, 0x3c, 0x4a, 0x6a, 0x25, 0xb9, 0x87, 0xfa,
-	0xc4, 0x46, 0xfb, 0x7d, 0x02, 0x32, 0x1a, 0x3b, 0x67, 0x0e, 0xff, 0x9f, 0x18, 0xe2, 0xa0, 0x6a,
-	0x61, 0x48, 0x05, 0x16, 0x07, 0xb7, 0x4d, 0xb8, 0x27, 0x9f, 0xf7, 0x2c, 0x92, 0xcd, 0x38, 0x45,
-	0x95, 0xeb, 0x24, 0x1f, 0xa9, 0x52, 0x36, 0xe1, 0xcf, 0x21, 0xeb, 0x43, 0x54, 0x03, 0xac, 0x20,
-	0x6a, 0xa6, 0x8f, 0xea, 0xb1, 0xe9, 0x3b, 0x88, 0xbc, 0x49, 0x6e, 0x45, 0x23, 0x7b, 0x23, 0x33,
-	0x97, 0x74, 0x60, 0x59, 0x46, 0x6b, 0x58, 0x41, 0x18, 0x34, 0xb6, 0x10, 0xa9, 0x0e, 0x93, 0x5e,
-	0xa5, 0x4c, 0x04, 0xe8, 0xd4, 0x1f, 0xa0, 0xeb, 0x35, 0xb0, 0x97, 0x47, 0x49, 0x36, 0xae, 0x0c,
-	0x96, 0x82, 0xb0, 0xa3, 0xf4, 0x4e, 0x5b, 0xa8, 0x80, 0x92, 0xdb, 0xb1, 0x0a, 0xbc, 0x9e, 0xe9,
-	0x4b, 0xbf, 0xf5, 0x72, 0x36, 0x16, 0xd7, 0x4e, 0x64, 0xc3, 0xf3, 0x35, 0x37, 0xee, 0xee, 0x96,
-	0x83, 0x39, 0xa2, 0xe1, 0x84, 0x62, 0x20, 0x3f, 0x14, 0x99, 0x10, 0x1e, 0xdd, 0x44, 0xb8, 0x35,
-	0x72, 0x23, 0x0a, 0x4e, 0xf6, 0x03, 0x35, 0x48, 0x0f, 0x2c, 0x56, 0x41, 0x89, 0x33, 0x79, 0x29,
-	0x62, 0x9e, 0xe7, 0x7a, 0xe3, 0x09, 0xb2, 0x3c, 0xa4, 0x44, 0x85, 0xe4, 0x21, 0xa4, 0xab, 0xdc,
-	0x61, 0x7a, 0xbb, 0xa2, 0x37, 0x5e, 0x30, 0xee, 0x96, 0x7b, 0x9c, 0xac, 0x04, 0x22, 0x2d, 0x19,
-	0xe5, 0x1e, 0x8f, 0xdd, 0x40, 0x63, 0x5b, 0x09, 0x72, 0x88, 0x6d, 0x15, 0x33, 0xcf, 0x99, 0x02,
-	0x2a, 0x75, 0x2e, 0x99, 0x4f, 0x84, 0xf1, 0x4b, 0x1d, 0x3a, 0x76, 0x37, 0x41, 0x1e, 0x41, 0x56,
-	0xc1, 0xec, 0x9f, 0xe9, 0x9d, 0x16, 0xc3, 0xa9, 0x62, 0xbc, 0xcb, 0xb9, 0x00, 0x92, 0x6f, 0x09,
-	0x82, 0x9d, 0xc2, 0x42, 0x3f, 0x21, 0xf2, 0xbb, 0x55, 0xb0, 0xf1, 0x0f, 0x87, 0x2b, 0x6e, 0xb3,
-	0xaa, 0x68, 0x79, 0x39, 0xc9, 0xc8, 0x1e, 0xcd, 0xff, 0x8d, 0x24, 0x6a, 0x0e, 0x9a, 0x8f, 0x22,
-	0xd2, 0xdb, 0xa8, 0x22, 0x4f, 0xfb, 0x09, 0x09, 0x8c, 0x55, 0xc5, 0x21, 0x7b, 0x8a, 0x76, 0xfb,
-	0xd1, 0x23, 0x07, 0x03, 0xfe, 0x2f, 0x1f, 0x61, 0xc3, 0x03, 0xa8, 0xd2, 0x70, 0x03, 0x32, 0xb2,
-	0x58, 0xfc, 0x30, 0xc3, 0xdf, 0x42, 0x15, 0xb7, 0xf2, 0x97, 0xa8, 0x10, 0xd6, 0x1b, 0x90, 0x91,
-	0xbd, 0xd0, 0x95, 0x5a, 0xe2, 0xf6, 0x93, 0xf2, 0x65, 0xfb, 0x32, 0x5f, 0xd4, 0xc1, 0x08, 0x7c,
-	0xfd, 0xb9, 0xf2, 0x60, 0x04, 0x22, 0x16, 0x3a, 0x18, 0x01, 0x2d, 0xe4, 0x31, 0x36, 0xf4, 0x78,
-	0xf5, 0xb8, 0xd1, 0x0d, 0xbd, 0xe4, 0x79, 0x5d, 0x22, 0x59, 0x8b, 0xbf, 0x78, 0x5c, 0xf2, 0x05,
-	0xcc, 0x7a, 0x63, 0xdf, 0x00, 0x58, 0x2e, 0x6e, 0x7e, 0x4c, 0xdf, 0x46, 0xd8, 0xdb, 0xf4, 0x66,
-	0x24, 0xac, 0xcb, 0xac, 0x66, 0x8d, 0x0b, 0xb4, 0xa7, 0xd8, 0x1f, 0x05, 0xc6, 0xe6, 0xc3, 0xef,
-	0xb7, 0xa1, 0xb9, 0x7a, 0xb8, 0xf2, 0x88, 0x63, 0x24, 0xe4, 0xd4, 0x8b, 0xad, 0x59, 0x27, 0x5f,
-	0x02, 0x39, 0x62, 0x7c, 0x68, 0x72, 0x3e, 0x34, 0x04, 0x8b, 0x1a, 0xae, 0x87, 0xe3, 0x11, 0xc4,
-	0xc6, 0x39, 0x3d, 0x71, 0x61, 0xbe, 0x6a, 0xb6, 0x7b, 0x96, 0xce, 0x19, 0xae, 0x27, 0xeb, 0xfd,
-	0x40, 0xf8, 0xc9, 0xea, 0x5b, 0x57, 0xdc, 0x9d, 0x1f, 0x1a, 0x4c, 0x04, 0x63, 0xa4, 0x90, 0x6a,
-	0x02, 0x49, 0xec, 0xcc, 0x7d, 0x98, 0xeb, 0x8f, 0xc8, 0xc9, 0x0d, 0x4f, 0x61, 0x68, 0x78, 0x9e,
-	0x8f, 0x67, 0xd1, 0x31, 0x72, 0x0c, 0x20, 0xdf, 0xaa, 0x70, 0x88, 0x94, 0xf2, 0x77, 0x04, 0xb1,
-	0x1b, 0x5a, 0xbd, 0x8e, 0xd2, 0x05, 0x61, 0xe3, 0x60, 0xb5, 0x7a, 0x61, 0x56, 0xef, 0x52, 0x23,
-	0xe0, 0x0d, 0xde, 0xfa, 0xce, 0x3f, 0x28, 0xfa, 0x96, 0x0b, 0xc0, 0x2f, 0x20, 0x29, 0x8a, 0xc7,
-	0x2b, 0x8e, 0xdf, 0xdd, 0xc8, 0x8a, 0x17, 0x39, 0xf9, 0x19, 0xae, 0xcb, 0x1a, 0x66, 0xd3, 0x64,
-	0x4e, 0x7e, 0xc9, 0xa3, 0x6b, 0x8c, 0xf7, 0x9c, 0x0e, 0x72, 0x5d, 0xba, 0x86, 0xc0, 0xcb, 0x24,
-	0xeb, 0x05, 0xd4, 0x0f, 0x75, 0x02, 0xc9, 0xaa, 0xef, 0xb1, 0x3f, 0xb6, 0xf5, 0x3e, 0xf0, 0xc5,
-	0x9a, 0x1b, 0x42, 0xf5, 0xc3, 0x9c, 0x41, 0xb6, 0xca, 0x75, 0x87, 0x7b, 0x9f, 0x37, 0x45, 0x4b,
-	0x6a, 0x77, 0x48, 0xff, 0xcb, 0xef, 0xd0, 0x67, 0xcf, 0xc1, 0x61, 0x0e, 0x9c, 0x16, 0x55, 0x32,
-	0x68, 0x7f, 0xa2, 0xeb, 0x0a, 0xcc, 0x1a, 0x7e, 0x19, 0x12, 0xc7, 0xe4, 0x93, 0xc4, 0xf6, 0x9e,
-	0x05, 0x59, 0xdb, 0x69, 0xe1, 0x8d, 0xd1, 0xb0, 0x1d, 0x43, 0xe1, 0xec, 0xa5, 0xe4, 0xcc, 0xbd,
-	0x82, 0x3f, 0x7d, 0xf8, 0x45, 0xa1, 0x65, 0xf2, 0xb3, 0x5e, 0x5d, 0x44, 0xa7, 0xe8, 0x49, 0xaa,
-	0x9f, 0xa0, 0xdc, 0xf1, 0x7e, 0x90, 0x72, 0xbf, 0xd8, 0xb2, 0x15, 0xed, 0xaf, 0xe3, 0x2b, 0x65,
-	0x0f, 0xef, 0xa9, 0x7f, 0x84, 0x5f, 0x19, 0xaf, 0x4c, 0x54, 0x26, 0x2b, 0x53, 0x95, 0xe9, 0xca,
-	0x4c, 0x65, 0xb6, 0x3e, 0x8d, 0x6b, 0x77, 0xfe, 0x13, 0x00, 0x00, 0xff, 0xff, 0xb4, 0x0e, 0xe5,
-	0xbc, 0xdc, 0x22, 0x00, 0x00,
+	// 2900 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x49, 0x73, 0x1b, 0xc7,
+	0x15, 0x16, 0xb8, 0xf3, 0x01, 0x24, 0x81, 0x06, 0x17, 0x08, 0x24, 0xb5, 0xb4, 0x6c, 0x89, 0xa6,
+	0x2d, 0xc0, 0x5a, 0xac, 0x72, 0xec, 0xb8, 0x62, 0x6e, 0xa2, 0x11, 0x4b, 0x02, 0x32, 0x20, 0x25,
+	0x27, 0xb1, 0x0a, 0x35, 0xc0, 0x34, 0xc0, 0x29, 0x01, 0x18, 0x64, 0xa6, 0x41, 0x49, 0xa5, 0x72,
+	0xa5, 0xe2, 0x2c, 0x76, 0xce, 0xbe, 0xe7, 0x94, 0x54, 0xaa, 0x72, 0xc9, 0x7f, 0xc8, 0xdd, 0xa7,
+	0x9c, 0x72, 0x4d, 0xe5, 0x90, 0x5f, 0xe0, 0x73, 0xaa, 0x5f, 0x77, 0x03, 0x33, 0x98, 0x19, 0x2e,
+	0xb2, 0xab, 0x72, 0x22, 0xa7, 0xfb, 0xf5, 0xf7, 0xbd, 0x7e, 0xdd, 0x6f, 0xe9, 0x6e, 0x40, 0xfe,
+	0xd8, 0x69, 0xf3, 0x23, 0xb3, 0xd6, 0x73, 0x1d, 0xee, 0x78, 0x45, 0xf9, 0x55, 0xc0, 0x2f, 0x32,
+	0x25, 0xbf, 0xf2, 0x6b, 0x2d, 0xc7, 0x69, 0xb5, 0x59, 0xd1, 0xec, 0xd9, 0x45, 0xb3, 0xdb, 0x75,
+	0xb8, 0xc9, 0x6d, 0xa7, 0xeb, 0x49, 0xa9, 0xfc, 0xaa, 0xea, 0xc5, 0xaf, 0x7a, 0xbf, 0x59, 0x64,
+	0x9d, 0x1e, 0x7f, 0xa9, 0x3a, 0x73, 0x41, 0xf8, 0x0e, 0xe3, 0x0a, 0x3c, 0x3f, 0x42, 0xdc, 0x70,
+	0x3a, 0x1d, 0xa7, 0x1b, 0xdd, 0x77, 0xc4, 0xcc, 0x36, 0x3f, 0x52, 0x7d, 0x34, 0xd8, 0xd7, 0x76,
+	0x5a, 0x76, 0xc3, 0x6c, 0xd7, 0x2c, 0x76, 0x6c, 0x37, 0x58, 0xf4, 0xf8, 0x40, 0xdf, 0x6a, 0xb0,
+	0xcf, 0xb4, 0xcc, 0x1e, 0x67, 0xae, 0xea, 0xbc, 0x1c, 0xec, 0x74, 0x7a, 0xac, 0xdb, 0x6c, 0x3b,
+	0xcf, 0x6b, 0xb7, 0xee, 0xc4, 0x08, 0x74, 0x1a, 0x76, 0xad, 0x63, 0xd7, 0x6b, 0x56, 0x5d, 0x09,
+	0x5c, 0x8d, 0x10, 0x30, 0xdb, 0xa6, 0xdb, 0x19, 0x8a, 0x5c, 0x0a, 0x8a, 0xb0, 0x17, 0xbc, 0xd6,
+	0x70, 0xba, 0x4d, 0xbb, 0x25, 0xfb, 0xe9, 0x9f, 0x13, 0x90, 0xdc, 0x45, 0x95, 0xf7, 0x5d, 0xa7,
+	0xdf, 0x23, 0x4b, 0x30, 0x66, 0x5b, 0xb9, 0xc4, 0x95, 0xc4, 0xc6, 0xec, 0xf6, 0xe4, 0x7f, 0xbf,
+	0xfb, 0x76, 0x3d, 0x61, 0x8c, 0xd9, 0x16, 0x29, 0xc1, 0x42, 0x70, 0xf2, 0x5e, 0x6e, 0xec, 0xca,
+	0xf8, 0x46, 0xf2, 0xf6, 0x52, 0x41, 0xad, 0xe2, 0x03, 0xd9, 0x2d, 0xb1, 0xb6, 0x67, 0xff, 0xfd,
+	0xdd, 0xb7, 0xeb, 0x13, 0x02, 0xcb, 0x98, 0x6f, 0xfb, 0x7b, 0x3c, 0x72, 0x07, 0xa6, 0x35, 0xc4,
+	0x38, 0x42, 0xcc, 0x6b, 0x88, 0xf0, 0x58, 0x2d, 0x49, 0x7f, 0x04, 0x29, 0x9f, 0x96, 0x1e, 0x79,
+	0x0b, 0x26, 0x6d, 0xce, 0x3a, 0x5e, 0x2e, 0x81, 0x10, 0xd9, 0x20, 0x04, 0x0a, 0x19, 0x52, 0x82,
+	0xfe, 0x29, 0x01, 0x64, 0xef, 0x98, 0x75, 0xf9, 0x7d, 0xbb, 0xcd, 0x99, 0x6b, 0xf4, 0xdb, 0xec,
+	0x53, 0xf6, 0x92, 0x7e, 0x95, 0x80, 0xec, 0x48, 0xf3, 0xc1, 0xcb, 0x1e, 0x23, 0xf3, 0x00, 0x4d,
+	0x6c, 0xa9, 0x99, 0xed, 0x76, 0xfa, 0x02, 0x49, 0xc1, 0x4c, 0xc3, 0xe4, 0xac, 0xe5, 0xb8, 0x2f,
+	0xd3, 0x09, 0x92, 0x86, 0x94, 0xd7, 0xaf, 0xd7, 0x06, 0x2d, 0x63, 0x84, 0xc0, 0xfc, 0xb3, 0x9e,
+	0x5d, 0x63, 0x02, 0xaa, 0xc6, 0x5f, 0xf6, 0x58, 0x7a, 0x9c, 0x2c, 0x41, 0x46, 0x1a, 0xd9, 0xdf,
+	0x3c, 0x21, 0x9a, 0xe5, 0x7c, 0xfc, 0xcd, 0x93, 0xd4, 0x86, 0x85, 0x11, 0x45, 0xc8, 0xc7, 0x30,
+	0xfe, 0x8c, 0xbd, 0xc4, 0x65, 0x98, 0xbf, 0x5d, 0xd0, 0x93, 0x0b, 0xcf, 0xa2, 0x10, 0x31, 0x03,
+	0x43, 0x0c, 0x25, 0x8b, 0x30, 0x79, 0x6c, 0xb6, 0xfb, 0x2c, 0x37, 0x26, 0x96, 0xd2, 0x90, 0x1f,
+	0xf4, 0xaf, 0x09, 0x48, 0xfa, 0x86, 0xc4, 0xad, 0xf6, 0x32, 0x4c, 0xb1, 0xae, 0x59, 0x6f, 0xcb,
+	0xd1, 0x33, 0x86, 0xfa, 0x22, 0xab, 0x30, 0xab, 0x26, 0x60, 0x5b, 0xb9, 0x71, 0x04, 0x9e, 0x91,
+	0x0d, 0x25, 0x8b, 0xac, 0x03, 0x0c, 0xa7, 0x95, 0x9b, 0xc0, 0xde, 0x59, 0x6c, 0x41, 0xbb, 0xde,
+	0x84, 0x49, 0xb7, 0xdf, 0x66, 0x5e, 0x6e, 0x12, 0x57, 0x6c, 0x25, 0x66, 0x52, 0x86, 0x94, 0xa2,
+	0x1f, 0x41, 0xca, 0xd7, 0xe3, 0x91, 0x9b, 0x30, 0x2d, 0x97, 0x25, 0xb4, 0xe4, 0x7e, 0x00, 0x2d,
+	0x43, 0x9f, 0x41, 0x6a, 0xc7, 0x71, 0x59, 0xa9, 0xeb, 0x71, 0xb3, 0xdb, 0x60, 0xe4, 0x3a, 0x24,
+	0x6d, 0xf5, 0x7f, 0x6d, 0x74, 0xc6, 0xa0, 0x7b, 0x4a, 0x16, 0xb9, 0x03, 0x53, 0x32, 0x00, 0xe0,
+	0xcc, 0x93, 0xb7, 0x17, 0x35, 0xcb, 0x27, 0xd8, 0x5a, 0xe5, 0x26, 0xef, 0x7b, 0xdb, 0x93, 0x62,
+	0x87, 0x5e, 0x30, 0x94, 0x28, 0xfd, 0x10, 0xe6, 0xfc, 0x64, 0x1e, 0xd9, 0x0c, 0xee, 0xce, 0x01,
+	0x88, 0x5f, 0x4a, 0x6f, 0xcf, 0xf7, 0x60, 0xa1, 0xdc, 0x69, 0xd8, 0x07, 0xcc, 0xe3, 0x06, 0xfb,
+	0x55, 0x9f, 0x79, 0x9c, 0xcc, 0x0f, 0x57, 0x05, 0x97, 0x83, 0xc0, 0x44, 0xbf, 0x6f, 0x5b, 0x6a,
+	0x29, 0xf1, 0x7f, 0xfa, 0x6b, 0x48, 0xc9, 0x21, 0x5e, 0xcf, 0xe9, 0x7a, 0x8c, 0xfc, 0x04, 0xa6,
+	0x5c, 0xe6, 0xf5, 0xdb, 0x5c, 0x6d, 0x9a, 0x1b, 0x9a, 0xd3, 0x2f, 0x15, 0xf8, 0x30, 0x50, 0xdc,
+	0x50, 0xc3, 0x68, 0x01, 0x48, 0xb8, 0x97, 0x24, 0x61, 0xba, 0x7a, 0xb8, 0xb3, 0xb3, 0x57, 0xad,
+	0xa6, 0x2f, 0x88, 0x8f, 0xfb, 0x5b, 0xa5, 0x07, 0x87, 0xc6, 0x5e, 0x3a, 0x41, 0x9f, 0xc2, 0xcc,
+	0x63, 0xb1, 0xa7, 0xaa, 0x2c, 0xac, 0xf0, 0xfb, 0x90, 0x92, 0x61, 0x48, 0x7a, 0x81, 0xb2, 0x65,
+	0xb6, 0xa0, 0x22, 0xcf, 0x96, 0xe8, 0xdb, 0xc1, 0xff, 0x3f, 0xb9, 0x60, 0x24, 0xcd, 0xe1, 0xe7,
+	0xf6, 0xb4, 0xda, 0xb6, 0xf4, 0x5f, 0x13, 0x30, 0xf5, 0x18, 0x67, 0x40, 0x2e, 0xc3, 0xf4, 0x31,
+	0x73, 0x3d, 0xdb, 0xe9, 0x06, 0xd7, 0x4d, 0xb7, 0x92, 0x7b, 0x30, 0xa3, 0x22, 0xab, 0x8e, 0x4a,
+	0x0b, 0x7a, 0xf6, 0x5b, 0xb2, 0xdd, 0x1f, 0x53, 0x06, 0xb2, 0x51, 0x41, 0x6d, 0xfc, 0xfb, 0x07,
+	0xb5, 0x89, 0xb3, 0x06, 0x35, 0xf2, 0x31, 0xa4, 0x94, 0x3b, 0x09, 0x97, 0xd1, 0x9e, 0x41, 0x82,
+	0x23, 0x85, 0xf3, 0xf8, 0x47, 0x27, 0xad, 0x41, 0xb3, 0x47, 0x76, 0x60, 0x4e, 0x21, 0xb4, 0x30,
+	0x2e, 0xe6, 0xa6, 0x62, 0xc3, 0xa1, 0x1f, 0x43, 0xd1, 0xaa, 0x58, 0xba, 0x03, 0x73, 0xd2, 0x71,
+	0xb5, 0x83, 0x4d, 0xc7, 0x3a, 0x58, 0x00, 0x84, 0xf9, 0xfd, 0xf3, 0x67, 0x90, 0x19, 0xe6, 0x27,
+	0x93, 0x9b, 0x75, 0xd3, 0x63, 0xb9, 0x35, 0x05, 0x24, 0x7a, 0x0a, 0x0f, 0xed, 0xba, 0x54, 0x67,
+	0xd7, 0xe4, 0xe6, 0x76, 0x5a, 0x00, 0x25, 0x7d, 0xf1, 0xc4, 0x58, 0x10, 0x52, 0x42, 0x48, 0x8d,
+	0x26, 0x4f, 0x20, 0xeb, 0xcf, 0x68, 0x1a, 0x74, 0x5d, 0x2d, 0x11, 0x82, 0xe2, 0x56, 0x3a, 0x11,
+	0x16, 0xd5, 0x92, 0x62, 0x0a, 0x81, 0xfe, 0x25, 0x01, 0xe9, 0x2a, 0x6b, 0x37, 0xcf, 0xe6, 0x40,
+	0xa3, 0x92, 0xfe, 0x06, 0xbf, 0x03, 0x55, 0x60, 0x3e, 0xd8, 0x13, 0xef, 0x3c, 0x24, 0x03, 0x73,
+	0x8f, 0xca, 0x07, 0xb5, 0xea, 0x61, 0xa5, 0x52, 0x36, 0x0e, 0xf6, 0x76, 0xd3, 0x63, 0xa2, 0xe9,
+	0xf0, 0xd1, 0xa7, 0x8f, 0xca, 0x4f, 0x1e, 0xd5, 0xf6, 0x0c, 0xa3, 0x6c, 0xa4, 0xc7, 0x69, 0x19,
+	0x32, 0xe5, 0xe6, 0x56, 0x8b, 0x75, 0x79, 0xb5, 0x5f, 0xf7, 0x1a, 0xae, 0x5d, 0x67, 0xae, 0x08,
+	0xb3, 0x4e, 0xd3, 0x14, 0x8d, 0x83, 0x40, 0x66, 0xcc, 0xaa, 0x96, 0x92, 0x25, 0x42, 0xb4, 0xca,
+	0xf8, 0x83, 0x80, 0x31, 0x23, 0x1b, 0x4a, 0x16, 0xfd, 0x10, 0xe0, 0x21, 0xeb, 0xd4, 0x99, 0xeb,
+	0x1d, 0xd9, 0x3d, 0x81, 0x84, 0xbb, 0xa6, 0xd6, 0x35, 0x3b, 0x4c, 0x23, 0x61, 0xcb, 0x23, 0xb3,
+	0xc3, 0x94, 0x53, 0x8f, 0x69, 0xa7, 0xa6, 0xff, 0x48, 0x40, 0x5e, 0x5a, 0xba, 0xd4, 0x31, 0x5b,
+	0x6c, 0xd7, 0x79, 0xde, 0x6d, 0x3b, 0xa6, 0xa5, 0x83, 0xd6, 0x0d, 0x7f, 0x6e, 0x90, 0x71, 0x0f,
+	0x0a, 0xaa, 0xd0, 0x2a, 0xed, 0xfa, 0xf2, 0xc4, 0x35, 0x98, 0xb4, 0x05, 0x80, 0x8a, 0x0a, 0x73,
+	0xda, 0xce, 0x88, 0x6a, 0xc8, 0x3e, 0xf2, 0x0e, 0x64, 0xcc, 0x06, 0xb7, 0x8f, 0x4d, 0xce, 0xca,
+	0xdd, 0x6a, 0xbf, 0xd1, 0x60, 0x9e, 0x87, 0x19, 0x67, 0xc6, 0x08, 0x77, 0x90, 0x0d, 0x58, 0x10,
+	0x4c, 0x36, 0x1f, 0xca, 0x4e, 0xa0, 0xec, 0x68, 0x33, 0xfd, 0x4d, 0x02, 0x88, 0x6f, 0x12, 0xe7,
+	0x56, 0x3e, 0x37, 0x8c, 0x45, 0xd2, 0x32, 0x83, 0x20, 0x14, 0xa1, 0xc3, 0x78, 0xb4, 0x0e, 0x35,
+	0xc8, 0x06, 0x54, 0x50, 0x1b, 0xf0, 0x13, 0xc8, 0x6a, 0x1d, 0x44, 0x7b, 0xcd, 0xe3, 0x26, 0x67,
+	0x3a, 0x85, 0xe4, 0x82, 0x1e, 0x8d, 0x23, 0x45, 0x32, 0x62, 0x86, 0x2a, 0x29, 0x86, 0x2d, 0x1e,
+	0xdd, 0x83, 0xd4, 0xfd, 0xb6, 0xf3, 0xfc, 0x21, 0xe3, 0xa6, 0xf0, 0x1a, 0xf2, 0x1e, 0x4c, 0x75,
+	0x98, 0x2f, 0x75, 0xae, 0x17, 0xfc, 0xb5, 0xa6, 0xd3, 0xec, 0xd5, 0xb0, 0x5b, 0x45, 0x6b, 0x43,
+	0x09, 0xdf, 0xfe, 0xfb, 0x3d, 0x98, 0x93, 0x21, 0xb8, 0xca, 0x5c, 0xc1, 0x41, 0x9e, 0xc0, 0xdc,
+	0x3e, 0xe3, 0xbe, 0x2d, 0xb4, 0x5c, 0x90, 0xf5, 0x78, 0x41, 0xd7, 0xe3, 0x85, 0x3d, 0x51, 0x8f,
+	0xe7, 0x07, 0x31, 0x6c, 0x28, 0x4b, 0xf3, 0x5f, 0xfe, 0xf3, 0x3f, 0xdf, 0x8c, 0x2d, 0x12, 0x82,
+	0xa5, 0xfd, 0xf1, 0xad, 0x62, 0x67, 0x88, 0xf3, 0x14, 0xd2, 0x87, 0x3d, 0xcb, 0xe4, 0xcc, 0x87,
+	0x1d, 0x81, 0x91, 0x8f, 0xe1, 0xa3, 0xeb, 0x88, 0xbd, 0x42, 0x23, 0xb0, 0x3f, 0x48, 0x6c, 0x92,
+	0x5d, 0x98, 0xdd, 0x67, 0x5c, 0xa5, 0x93, 0x38, 0x9d, 0x07, 0x11, 0x5b, 0xca, 0xd1, 0x05, 0xc4,
+	0x9c, 0x25, 0xd3, 0x0a, 0x93, 0x3c, 0x85, 0xcc, 0x03, 0xdb, 0xe3, 0xc1, 0x54, 0x1f, 0x87, 0xb6,
+	0x14, 0x95, 0xf3, 0x3d, 0x7a, 0x11, 0x41, 0xb3, 0x24, 0xa3, 0x15, 0xb5, 0x07, 0x48, 0x55, 0x58,
+	0xd8, 0x67, 0x01, 0x74, 0xe2, 0xdb, 0x83, 0xf9, 0xc8, 0x22, 0x82, 0x5e, 0x42, 0xbc, 0x1c, 0x59,
+	0x0e, 0xe1, 0x15, 0x5f, 0xd9, 0xd6, 0x17, 0xc4, 0x80, 0x94, 0xd0, 0x79, 0x4b, 0xa7, 0xbc, 0x38,
+	0x75, 0xd3, 0x23, 0x09, 0xd3, 0xa3, 0x39, 0x44, 0x26, 0x24, 0xad, 0x91, 0x07, 0x69, 0x93, 0x01,
+	0x11, 0x98, 0x0f, 0x82, 0x19, 0x30, 0x0e, 0x79, 0x39, 0x32, 0x97, 0x7a, 0xf4, 0x32, 0xe2, 0x5f,
+	0x24, 0x2b, 0x1a, 0x7f, 0x24, 0x15, 0x93, 0x5f, 0x42, 0x7a, 0x9f, 0x05, 0x59, 0x02, 0x06, 0x89,
+	0x4e, 0xd2, 0xf4, 0x0d, 0xc4, 0xbd, 0x44, 0xd6, 0x62, 0x70, 0xa5, 0x5d, 0x9a, 0xb0, 0x1c, 0x9a,
+	0x43, 0xc5, 0x71, 0xb9, 0x17, 0x6d, 0x73, 0x25, 0x87, 0x12, 0x74, 0x13, 0x19, 0xde, 0x20, 0xf4,
+	0x24, 0x86, 0x62, 0x0f, 0xd1, 0x5e, 0xc0, 0xe2, 0xe8, 0x24, 0x04, 0x08, 0x59, 0x8a, 0x40, 0x2e,
+	0x59, 0xf9, 0x6c, 0x44, 0x33, 0xbd, 0x8b, 0x7c, 0x05, 0xf2, 0xce, 0xe9, 0x7c, 0xc5, 0x57, 0xe2,
+	0x4f, 0x4d, 0xcc, 0xf0, 0xf7, 0x09, 0x58, 0xd9, 0xc3, 0xb2, 0xfd, 0xcc, 0xec, 0x71, 0xde, 0xf5,
+	0x21, 0x2a, 0xf0, 0x1e, 0xbd, 0x73, 0x1e, 0x05, 0x8a, 0xea, 0xcc, 0xf0, 0x55, 0x02, 0x72, 0xbb,
+	0xb6, 0xf7, 0x83, 0x28, 0xf2, 0x63, 0x54, 0xe4, 0x1e, 0xbd, 0x7b, 0x2e, 0x45, 0x2c, 0xc9, 0x4e,
+	0xac, 0x88, 0x35, 0x17, 0x71, 0x32, 0xb8, 0xe6, 0x24, 0x10, 0x1c, 0xb1, 0xff, 0x8c, 0x2b, 0xde,
+	0x44, 0xac, 0xdf, 0x26, 0x60, 0x4d, 0xc6, 0xb2, 0x10, 0xd1, 0x01, 0xaa, 0xb1, 0x16, 0x22, 0xc0,
+	0x76, 0x39, 0x26, 0x76, 0xea, 0x37, 0x51, 0x85, 0x1b, 0xf4, 0x0c, 0x2a, 0x88, 0x88, 0xf7, 0xbb,
+	0x04, 0xac, 0x47, 0x68, 0xf1, 0x50, 0x44, 0x76, 0xa9, 0xc6, 0x6a, 0x40, 0x0d, 0xec, 0x78, 0xe8,
+	0x58, 0xa7, 0x68, 0x51, 0x40, 0x2d, 0x36, 0xe8, 0xb5, 0x13, 0xb5, 0x90, 0xf9, 0x43, 0xa8, 0xd1,
+	0x82, 0x95, 0x90, 0xc9, 0x91, 0x2a, 0x68, 0xf3, 0x6c, 0x58, 0x17, 0x8f, 0xbe, 0x8d, 0x5c, 0x6f,
+	0x92, 0xb3, 0x70, 0x11, 0x0e, 0xab, 0x91, 0x6b, 0xab, 0x4a, 0x5c, 0x3f, 0xd9, 0x4a, 0xc8, 0xfe,
+	0x52, 0x88, 0xbe, 0x8b, 0x84, 0x9b, 0x64, 0xe3, 0x54, 0x13, 0xab, 0x6a, 0x9b, 0x7c, 0x93, 0x80,
+	0xab, 0x31, 0x6b, 0x8d, 0x98, 0xd2, 0xd2, 0x57, 0xa3, 0x09, 0xcf, 0xb2, 0xea, 0x77, 0x50, 0xa5,
+	0x9b, 0xf4, 0xcc, 0x2a, 0x09, 0xa3, 0x97, 0x21, 0x29, 0x6c, 0x71, 0x5a, 0x60, 0x5e, 0x08, 0x96,
+	0x14, 0x1e, 0x5d, 0x41, 0xb2, 0x0c, 0x59, 0xd0, 0x64, 0x3a, 0x12, 0x97, 0x61, 0x6e, 0x08, 0x58,
+	0xb2, 0xe2, 0x21, 0x93, 0x43, 0x33, 0x47, 0xa4, 0x3a, 0x09, 0x67, 0x5b, 0x1e, 0x39, 0x84, 0xb4,
+	0xc1, 0x1a, 0x4e, 0xb7, 0x61, 0xb7, 0x99, 0x56, 0xd3, 0x3f, 0x36, 0xd6, 0x1e, 0x6b, 0x88, 0xb9,
+	0x4c, 0xc3, 0x98, 0x62, 0xe2, 0x7b, 0x98, 0xe6, 0x23, 0x52, 0xc5, 0xc8, 0x61, 0x4c, 0xc3, 0x90,
+	0xc5, 0x91, 0x99, 0xca, 0xdc, 0xf0, 0x53, 0x48, 0xed, 0xb8, 0xcc, 0xe4, 0x4a, 0x35, 0x32, 0x32,
+	0x3a, 0x84, 0xa6, 0x0a, 0x1b, 0x3a, 0x6a, 0x37, 0xa1, 0xd2, 0x13, 0x48, 0xc9, 0x20, 0x1c, 0xa1,
+	0x55, 0xdc, 0x24, 0xaf, 0x21, 0xde, 0x3a, 0x5d, 0x8d, 0xd2, 0x4e, 0x87, 0xd5, 0x9f, 0xc3, 0x9c,
+	0x8a, 0xaa, 0xe7, 0x40, 0x56, 0xb9, 0x91, 0xae, 0x45, 0x22, 0xeb, 0x38, 0xf9, 0x04, 0x52, 0x06,
+	0xab, 0x3b, 0x0e, 0xff, 0xc1, 0x74, 0x76, 0x11, 0x4e, 0x00, 0xef, 0xb2, 0x36, 0xe3, 0xaf, 0x61,
+	0x8c, 0xcd, 0x68, 0x60, 0x0b, 0xe1, 0x48, 0x1d, 0x32, 0xf7, 0x1d, 0xb7, 0xc1, 0xce, 0x8d, 0xfe,
+	0x16, 0xa2, 0x5f, 0xdb, 0xbc, 0x1a, 0x89, 0xde, 0x14, 0x98, 0x35, 0xc5, 0xd1, 0x87, 0x39, 0x7d,
+	0xe4, 0xc1, 0x5a, 0x7b, 0x98, 0xbb, 0x02, 0xc7, 0xa1, 0xfc, 0x92, 0xa6, 0x2d, 0xf7, 0x98, 0x8b,
+	0x77, 0xd7, 0xa2, 0xc2, 0xa7, 0xf7, 0x90, 0xe9, 0x5d, 0xfa, 0x76, 0x24, 0x93, 0xac, 0xf8, 0x2d,
+	0x85, 0xe1, 0x15, 0x5f, 0x89, 0x23, 0xd9, 0x17, 0x62, 0x03, 0x7d, 0x99, 0x80, 0xe5, 0x7d, 0xc6,
+	0x03, 0x1c, 0xf2, 0x16, 0x2a, 0x5e, 0x81, 0xa8, 0x66, 0xfa, 0x01, 0x2a, 0x70, 0x97, 0xdc, 0x3e,
+	0x87, 0x02, 0x45, 0x4f, 0x32, 0xf5, 0xb1, 0x14, 0x0b, 0xe0, 0x9d, 0x93, 0x5d, 0x05, 0x32, 0x72,
+	0x9e, 0xe9, 0x93, 0xa6, 0x2c, 0x34, 0x03, 0x48, 0xde, 0xc8, 0xba, 0x46, 0xb1, 0x79, 0xf4, 0x1d,
+	0xa4, 0xbb, 0x4e, 0xde, 0x38, 0x0b, 0x1d, 0x79, 0x01, 0xd9, 0x1d, 0x51, 0x33, 0xb7, 0xcf, 0x38,
+	0xc3, 0xc8, 0x05, 0x56, 0x33, 0xdc, 0x3c, 0xd7, 0x0c, 0xbf, 0x4e, 0x40, 0x76, 0x4b, 0x1d, 0x67,
+	0x91, 0x45, 0xe6, 0x83, 0x73, 0x52, 0xef, 0x20, 0xf5, 0x47, 0xf4, 0xfd, 0xf3, 0x2c, 0xad, 0x6c,
+	0xee, 0x23, 0x9f, 0xd8, 0x68, 0x7f, 0x48, 0x40, 0xc6, 0x60, 0xc7, 0xcc, 0xe5, 0xff, 0x17, 0x45,
+	0x5c, 0xa4, 0x16, 0x8a, 0x7c, 0x9d, 0x80, 0xa5, 0x80, 0xa7, 0x1d, 0x38, 0xca, 0xa3, 0x69, 0xc4,
+	0x21, 0x78, 0xe4, 0x1a, 0x22, 0xbf, 0x1a, 0x21, 0xa3, 0x8f, 0xd8, 0xba, 0x7c, 0x21, 0xd7, 0x47,
+	0xf5, 0x43, 0x1d, 0xbc, 0xa2, 0xd6, 0x4d, 0x9e, 0xc0, 0x3d, 0xf2, 0x1c, 0xe6, 0xf5, 0xbe, 0x57,
+	0x3e, 0x97, 0x8f, 0x84, 0x3f, 0x03, 0x75, 0xec, 0x8e, 0x54, 0xd4, 0xf2, 0x4f, 0x4d, 0x39, 0xdc,
+	0x1f, 0x13, 0x70, 0x71, 0xab, 0xee, 0x0c, 0xd6, 0xa2, 0xe5, 0x9a, 0xd6, 0xd0, 0x0e, 0xaf, 0xad,
+	0x44, 0xac, 0x17, 0x2a, 0x25, 0x4c, 0x41, 0x59, 0xeb, 0x4b, 0x3a, 0x6d, 0x84, 0xc7, 0x90, 0xda,
+	0x67, 0xbc, 0xdc, 0xed, 0x97, 0xe4, 0xb7, 0xdf, 0xff, 0x32, 0x9a, 0x6d, 0xd0, 0x4d, 0x6f, 0x20,
+	0xc7, 0x55, 0x72, 0x39, 0x72, 0x0f, 0x38, 0xdd, 0xbe, 0xc6, 0x7d, 0x05, 0x73, 0x81, 0xad, 0xff,
+	0xfa, 0xd3, 0xba, 0x85, 0x94, 0x6f, 0xd3, 0xb8, 0x65, 0xd5, 0x17, 0x46, 0x8a, 0x59, 0x6c, 0xb2,
+	0xe7, 0x90, 0xdc, 0xc1, 0x6b, 0x99, 0xef, 0x49, 0x5d, 0x44, 0xea, 0xb7, 0x68, 0xdc, 0xb2, 0xca,
+	0xbb, 0x1f, 0x1f, 0x71, 0x05, 0x16, 0x86, 0xb5, 0x54, 0xf8, 0xc4, 0x39, 0xb8, 0x0d, 0x93, 0x47,
+	0x4d, 0x8a, 0xf0, 0x6b, 0x24, 0x1f, 0x69, 0x4c, 0x79, 0xc4, 0x7c, 0x0a, 0x59, 0x1f, 0xa2, 0xba,
+	0x48, 0x8f, 0x59, 0xa6, 0x41, 0xf7, 0x29, 0xcb, 0xd4, 0xd3, 0x57, 0xf7, 0x1e, 0xe9, 0xc2, 0x92,
+	0x8c, 0x05, 0xa3, 0x04, 0x61, 0xd0, 0xd8, 0x34, 0xab, 0xce, 0x4f, 0xf4, 0x34, 0x32, 0x61, 0xa0,
+	0x43, 0xbf, 0x81, 0xce, 0x76, 0x3c, 0x3b, 0xd9, 0x4a, 0xf2, 0x58, 0xc6, 0x60, 0x31, 0x08, 0x7b,
+	0x9e, 0x93, 0xc1, 0x06, 0x12, 0x50, 0x72, 0x25, 0x96, 0x40, 0x9f, 0x08, 0x3e, 0xf7, 0x6b, 0x2f,
+	0xef, 0xe8, 0xe3, 0x8a, 0xe5, 0x6c, 0xf8, 0x9e, 0xdf, 0x8b, 0xab, 0x4c, 0xe5, 0x03, 0x01, 0x31,
+	0xf0, 0xfe, 0x6d, 0x28, 0x3f, 0x62, 0x99, 0x10, 0x1e, 0xbd, 0x8a, 0x70, 0xab, 0xe4, 0x62, 0x14,
+	0x9c, 0xac, 0x76, 0x6b, 0x90, 0x1e, 0x6a, 0xac, 0x8c, 0x12, 0xa7, 0xf2, 0x62, 0xc4, 0xbb, 0x82,
+	0xa7, 0x2f, 0xdf, 0xc8, 0xd2, 0x08, 0x89, 0x32, 0xc9, 0x7d, 0x48, 0x57, 0xb9, 0xcb, 0xcc, 0x4e,
+	0xc5, 0x6c, 0x3c, 0x63, 0xdc, 0x2b, 0xf7, 0x39, 0x59, 0x0e, 0x58, 0x5a, 0x76, 0x94, 0xfb, 0x3c,
+	0x76, 0x03, 0x5d, 0xd8, 0x48, 0x90, 0x3d, 0x3c, 0x34, 0x30, 0xfb, 0x98, 0x29, 0xa0, 0x52, 0xf7,
+	0x84, 0xdb, 0xb7, 0x30, 0x7e, 0xa9, 0x4b, 0x2f, 0xbc, 0x9b, 0x20, 0x9f, 0x42, 0x56, 0xc1, 0xec,
+	0x1c, 0x99, 0xdd, 0x16, 0xc3, 0xd7, 0x8d, 0xf8, 0x29, 0xe7, 0x02, 0x48, 0xbe, 0x21, 0x08, 0x76,
+	0x88, 0x09, 0xc2, 0xff, 0x7e, 0x1e, 0x3c, 0xd6, 0x86, 0xcd, 0x15, 0xb7, 0x59, 0x95, 0xb5, 0xf4,
+	0x9a, 0x64, 0xe4, 0x09, 0xc4, 0xff, 0x56, 0x1b, 0xf5, 0x1e, 0x93, 0x8f, 0x6a, 0xa4, 0x57, 0x90,
+	0x22, 0x4f, 0x07, 0x0b, 0x12, 0x78, 0xde, 0x11, 0x4e, 0xf6, 0x18, 0xf5, 0xf6, 0xa3, 0x47, 0x5e,
+	0x7b, 0xf9, 0x5f, 0x60, 0xc3, 0x8a, 0x07, 0x50, 0xa5, 0xe2, 0x16, 0x64, 0x64, 0xb0, 0x78, 0x3d,
+	0xc5, 0xdf, 0x44, 0x8a, 0xcb, 0xf9, 0x13, 0x28, 0x84, 0xf6, 0x16, 0x64, 0x64, 0xa5, 0x7f, 0x2a,
+	0x4b, 0xdc, 0x7e, 0x52, 0x73, 0xd9, 0x3c, 0x69, 0x2e, 0xca, 0x31, 0x02, 0xaf, 0xd0, 0xa7, 0x3a,
+	0x46, 0xc0, 0x62, 0x21, 0xc7, 0x08, 0xb0, 0x90, 0x07, 0x78, 0x5c, 0x8d, 0xc8, 0xaa, 0xf3, 0x81,
+	0xa2, 0xcb, 0xd3, 0x67, 0x20, 0xb2, 0x1a, 0x5f, 0x56, 0x79, 0xe4, 0x33, 0x98, 0xd1, 0xcf, 0x4f,
+	0x01, 0xb0, 0x5c, 0xdc, 0x3b, 0x16, 0xbd, 0x8e, 0xb0, 0x57, 0xe8, 0xa5, 0x48, 0x58, 0x8f, 0xb5,
+	0x9b, 0x35, 0x2e, 0xd0, 0x1e, 0x63, 0xf5, 0x1f, 0x78, 0xbe, 0x1b, 0xbd, 0xbd, 0x09, 0xbd, 0xef,
+	0x85, 0x23, 0x8f, 0x70, 0x23, 0x21, 0xa7, 0xae, 0x6d, 0xec, 0x3a, 0xf9, 0x1c, 0xc8, 0x3e, 0xe3,
+	0x23, 0x2f, 0x78, 0x23, 0x57, 0xbc, 0x51, 0x8f, 0x7c, 0x61, 0x7b, 0x04, 0xb1, 0xf1, 0xbd, 0x90,
+	0x78, 0x30, 0x57, 0xb5, 0x3b, 0xfd, 0xb6, 0xc9, 0x19, 0x8e, 0x27, 0x6b, 0x03, 0x43, 0xf8, 0x9b,
+	0x75, 0x96, 0x8f, 0xa9, 0x68, 0x43, 0xd7, 0x6e, 0x41, 0x1b, 0x29, 0xa4, 0x9a, 0x40, 0x12, 0x3b,
+	0x73, 0x07, 0x66, 0x07, 0x4f, 0x75, 0xe4, 0xe2, 0xa0, 0x38, 0x1a, 0x7d, 0xc4, 0xcb, 0xc7, 0x77,
+	0xd1, 0x0b, 0xe4, 0x21, 0x80, 0xbc, 0x33, 0xc0, 0x2b, 0xd2, 0x94, 0xbf, 0x22, 0x88, 0xdd, 0xd0,
+	0xea, 0xb2, 0x85, 0xce, 0x0b, 0x1d, 0x87, 0xa3, 0xd5, 0x75, 0x90, 0xba, 0x29, 0x38, 0x07, 0xde,
+	0xf0, 0x4e, 0xe3, 0xf8, 0x56, 0xd1, 0x37, 0x5c, 0x00, 0x7e, 0x06, 0x49, 0x11, 0x3c, 0x5e, 0x70,
+	0x7c, 0xff, 0x27, 0xcb, 0xda, 0x72, 0xf2, 0xe7, 0x00, 0x3d, 0xd6, 0xb0, 0x9b, 0x36, 0x73, 0xf3,
+	0x8b, 0xba, 0xdd, 0x60, 0xbc, 0xef, 0x76, 0xb1, 0xd7, 0xa3, 0xab, 0x08, 0xbc, 0x44, 0xb2, 0xda,
+	0xa0, 0x7e, 0xa8, 0x03, 0x48, 0x56, 0x7d, 0x9f, 0x83, 0x47, 0x09, 0xfd, 0x43, 0x83, 0x58, 0x75,
+	0x43, 0xa8, 0x7e, 0x98, 0x23, 0xc8, 0x56, 0xb9, 0xe9, 0x72, 0xfd, 0x33, 0x0b, 0x51, 0x75, 0x3a,
+	0x5d, 0x32, 0xf8, 0x05, 0xca, 0xc8, 0xcf, 0x2f, 0x86, 0xce, 0x1c, 0xf0, 0x16, 0x15, 0x32, 0xe8,
+	0xe0, 0xbd, 0xc2, 0x13, 0x98, 0x35, 0x7c, 0xa1, 0x16, 0x6e, 0xf2, 0x41, 0x62, 0x73, 0xbb, 0x0d,
+	0x59, 0xc7, 0x6d, 0x61, 0xc6, 0x68, 0x38, 0xae, 0xa5, 0x70, 0xb6, 0x53, 0xf2, 0x45, 0xa9, 0x82,
+	0x3f, 0xc1, 0xfa, 0x45, 0xa1, 0x65, 0xf3, 0xa3, 0x7e, 0x5d, 0x58, 0xa7, 0xa8, 0x25, 0xd5, 0x4f,
+	0xe1, 0x6e, 0xea, 0x1f, 0xc6, 0xdd, 0x2d, 0xb6, 0x1c, 0xd5, 0xf6, 0xb7, 0xb1, 0xe5, 0xb2, 0xc6,
+	0x7b, 0xec, 0x7f, 0xa0, 0xaa, 0x8c, 0x55, 0xc6, 0x2b, 0x13, 0x95, 0xc9, 0xca, 0x54, 0x65, 0xba,
+	0x32, 0x53, 0x9f, 0xc2, 0xb1, 0x77, 0xfe, 0x17, 0x00, 0x00, 0xff, 0xff, 0x87, 0x9b, 0x36, 0xf4,
+	0x64, 0x27, 0x00, 0x00,
 }
 
 // Reference imports to suppress errors if they are not otherwise used.
@@ -2440,12 +2633,16 @@
 	DownloadImage(ctx context.Context, in *ImageDownload, opts ...grpc.CallOption) (*common.OperationResp, error)
 	// Get image download status on a device
 	// The request retrieves progress on device and updates db record
+	// Deprecated in voltha 2.8, will be removed
 	GetImageDownloadStatus(ctx context.Context, in *ImageDownload, opts ...grpc.CallOption) (*ImageDownload, error)
 	// Get image download db record
+	// Deprecated in voltha 2.8, will be removed
 	GetImageDownload(ctx context.Context, in *ImageDownload, opts ...grpc.CallOption) (*ImageDownload, error)
 	// List image download db records for a given device
+	// Deprecated in voltha 2.8, will be removed
 	ListImageDownloads(ctx context.Context, in *common.ID, opts ...grpc.CallOption) (*ImageDownloads, error)
 	// Cancel an existing image download process on a device
+	// Deprecated in voltha 2.8, will be removed
 	CancelImageDownload(ctx context.Context, in *ImageDownload, opts ...grpc.CallOption) (*common.OperationResp, error)
 	// Activate the specified image at a standby partition
 	// to active partition.
@@ -2454,6 +2651,7 @@
 	// If no reboot, then a reboot is required to make the
 	// activated image running on device
 	// Note that the call is expected to be non-blocking.
+	// Deprecated in voltha 2.8, will be removed
 	ActivateImageUpdate(ctx context.Context, in *ImageDownload, opts ...grpc.CallOption) (*common.OperationResp, error)
 	// Revert the specified image at standby partition
 	// to active partition, and revert to previous image
@@ -2462,7 +2660,36 @@
 	// If no reboot, then a reboot is required to make the
 	// previous image running on device
 	// Note that the call is expected to be non-blocking.
+	// Deprecated in voltha 2.8, will be removed
 	RevertImageUpdate(ctx context.Context, in *ImageDownload, opts ...grpc.CallOption) (*common.OperationResp, error)
+	// Downloads a certain image to the standby partition of the devices
+	// Note that the call is expected to be non-blocking.
+	DownloadImageToDevice(ctx context.Context, in *DeviceImageDownloadRequest, opts ...grpc.CallOption) (*DeviceImageResponse, error)
+	// Get image status on a number of devices devices
+	// Polled from northbound systems to get state of download/activate/commit
+	GetImageStatus(ctx context.Context, in *DeviceImageRequest, opts ...grpc.CallOption) (*DeviceImageResponse, error)
+	// Aborts the upgrade of an image on a device
+	// To be used carefully, stops any further operations for the Image on the given devices
+	// Might also stop if possible existing work, but no guarantees are given,
+	// depends on implementation and procedure status.
+	AbortImageUpgradeToDevice(ctx context.Context, in *DeviceImageRequest, opts ...grpc.CallOption) (*DeviceImageResponse, error)
+	// Get Both Active and Standby image for a given device
+	GetOnuImages(ctx context.Context, in *common.ID, opts ...grpc.CallOption) (*OnuImages, error)
+	// Activate the specified image from a standby partition
+	// to active partition.
+	// Depending on the device implementation, this call
+	// may or may not cause device reboot.
+	// If no reboot, then a reboot is required to make the
+	// activated image running on device
+	// Note that the call is expected to be non-blocking.
+	ActivateImage(ctx context.Context, in *DeviceImageRequest, opts ...grpc.CallOption) (*DeviceImageResponse, error)
+	// Commit the specified image to be default.
+	// Depending on the device implementation, this call
+	// may or may not cause device reboot.
+	// If no reboot, then a reboot is required to make the
+	// activated image running on device upon next reboot
+	// Note that the call is expected to be non-blocking.
+	CommitImage(ctx context.Context, in *DeviceImageRequest, opts ...grpc.CallOption) (*DeviceImageResponse, error)
 	// List ports of a device
 	ListDevicePorts(ctx context.Context, in *common.ID, opts ...grpc.CallOption) (*Ports, error)
 	// List pm config of a device
@@ -2833,6 +3060,60 @@
 	return out, nil
 }
 
+func (c *volthaServiceClient) DownloadImageToDevice(ctx context.Context, in *DeviceImageDownloadRequest, opts ...grpc.CallOption) (*DeviceImageResponse, error) {
+	out := new(DeviceImageResponse)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/DownloadImageToDevice", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) GetImageStatus(ctx context.Context, in *DeviceImageRequest, opts ...grpc.CallOption) (*DeviceImageResponse, error) {
+	out := new(DeviceImageResponse)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/GetImageStatus", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) AbortImageUpgradeToDevice(ctx context.Context, in *DeviceImageRequest, opts ...grpc.CallOption) (*DeviceImageResponse, error) {
+	out := new(DeviceImageResponse)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/AbortImageUpgradeToDevice", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) GetOnuImages(ctx context.Context, in *common.ID, opts ...grpc.CallOption) (*OnuImages, error) {
+	out := new(OnuImages)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/GetOnuImages", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) ActivateImage(ctx context.Context, in *DeviceImageRequest, opts ...grpc.CallOption) (*DeviceImageResponse, error) {
+	out := new(DeviceImageResponse)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/ActivateImage", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) CommitImage(ctx context.Context, in *DeviceImageRequest, opts ...grpc.CallOption) (*DeviceImageResponse, error) {
+	out := new(DeviceImageResponse)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/CommitImage", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
 func (c *volthaServiceClient) ListDevicePorts(ctx context.Context, in *common.ID, opts ...grpc.CallOption) (*Ports, error) {
 	out := new(Ports)
 	err := c.cc.Invoke(ctx, "/voltha.VolthaService/ListDevicePorts", in, out, opts...)
@@ -3222,12 +3503,16 @@
 	DownloadImage(context.Context, *ImageDownload) (*common.OperationResp, error)
 	// Get image download status on a device
 	// The request retrieves progress on device and updates db record
+	// Deprecated in voltha 2.8, will be removed
 	GetImageDownloadStatus(context.Context, *ImageDownload) (*ImageDownload, error)
 	// Get image download db record
+	// Deprecated in voltha 2.8, will be removed
 	GetImageDownload(context.Context, *ImageDownload) (*ImageDownload, error)
 	// List image download db records for a given device
+	// Deprecated in voltha 2.8, will be removed
 	ListImageDownloads(context.Context, *common.ID) (*ImageDownloads, error)
 	// Cancel an existing image download process on a device
+	// Deprecated in voltha 2.8, will be removed
 	CancelImageDownload(context.Context, *ImageDownload) (*common.OperationResp, error)
 	// Activate the specified image at a standby partition
 	// to active partition.
@@ -3236,6 +3521,7 @@
 	// If no reboot, then a reboot is required to make the
 	// activated image running on device
 	// Note that the call is expected to be non-blocking.
+	// Deprecated in voltha 2.8, will be removed
 	ActivateImageUpdate(context.Context, *ImageDownload) (*common.OperationResp, error)
 	// Revert the specified image at standby partition
 	// to active partition, and revert to previous image
@@ -3244,7 +3530,36 @@
 	// If no reboot, then a reboot is required to make the
 	// previous image running on device
 	// Note that the call is expected to be non-blocking.
+	// Deprecated in voltha 2.8, will be removed
 	RevertImageUpdate(context.Context, *ImageDownload) (*common.OperationResp, error)
+	// Downloads a certain image to the standby partition of the devices
+	// Note that the call is expected to be non-blocking.
+	DownloadImageToDevice(context.Context, *DeviceImageDownloadRequest) (*DeviceImageResponse, error)
+	// Get image status on a number of devices devices
+	// Polled from northbound systems to get state of download/activate/commit
+	GetImageStatus(context.Context, *DeviceImageRequest) (*DeviceImageResponse, error)
+	// Aborts the upgrade of an image on a device
+	// To be used carefully, stops any further operations for the Image on the given devices
+	// Might also stop if possible existing work, but no guarantees are given,
+	// depends on implementation and procedure status.
+	AbortImageUpgradeToDevice(context.Context, *DeviceImageRequest) (*DeviceImageResponse, error)
+	// Get Both Active and Standby image for a given device
+	GetOnuImages(context.Context, *common.ID) (*OnuImages, error)
+	// Activate the specified image from a standby partition
+	// to active partition.
+	// Depending on the device implementation, this call
+	// may or may not cause device reboot.
+	// If no reboot, then a reboot is required to make the
+	// activated image running on device
+	// Note that the call is expected to be non-blocking.
+	ActivateImage(context.Context, *DeviceImageRequest) (*DeviceImageResponse, error)
+	// Commit the specified image to be default.
+	// Depending on the device implementation, this call
+	// may or may not cause device reboot.
+	// If no reboot, then a reboot is required to make the
+	// activated image running on device upon next reboot
+	// Note that the call is expected to be non-blocking.
+	CommitImage(context.Context, *DeviceImageRequest) (*DeviceImageResponse, error)
 	// List ports of a device
 	ListDevicePorts(context.Context, *common.ID) (*Ports, error)
 	// List pm config of a device
@@ -3292,6 +3607,218 @@
 	StartOmciTestAction(context.Context, *OmciTestRequest) (*TestResponse, error)
 }
 
+// UnimplementedVolthaServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedVolthaServiceServer struct {
+}
+
+func (*UnimplementedVolthaServiceServer) GetMembership(ctx context.Context, req *empty.Empty) (*Membership, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetMembership not implemented")
+}
+func (*UnimplementedVolthaServiceServer) UpdateMembership(ctx context.Context, req *Membership) (*empty.Empty, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method UpdateMembership not implemented")
+}
+func (*UnimplementedVolthaServiceServer) GetVoltha(ctx context.Context, req *empty.Empty) (*Voltha, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetVoltha not implemented")
+}
+func (*UnimplementedVolthaServiceServer) ListCoreInstances(ctx context.Context, req *empty.Empty) (*CoreInstances, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ListCoreInstances not implemented")
+}
+func (*UnimplementedVolthaServiceServer) GetCoreInstance(ctx context.Context, req *common.ID) (*CoreInstance, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetCoreInstance not implemented")
+}
+func (*UnimplementedVolthaServiceServer) ListAdapters(ctx context.Context, req *empty.Empty) (*Adapters, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ListAdapters not implemented")
+}
+func (*UnimplementedVolthaServiceServer) ListLogicalDevices(ctx context.Context, req *empty.Empty) (*LogicalDevices, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ListLogicalDevices not implemented")
+}
+func (*UnimplementedVolthaServiceServer) GetLogicalDevice(ctx context.Context, req *common.ID) (*LogicalDevice, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetLogicalDevice not implemented")
+}
+func (*UnimplementedVolthaServiceServer) ListLogicalDevicePorts(ctx context.Context, req *common.ID) (*LogicalPorts, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ListLogicalDevicePorts not implemented")
+}
+func (*UnimplementedVolthaServiceServer) GetLogicalDevicePort(ctx context.Context, req *LogicalPortId) (*LogicalPort, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetLogicalDevicePort not implemented")
+}
+func (*UnimplementedVolthaServiceServer) EnableLogicalDevicePort(ctx context.Context, req *LogicalPortId) (*empty.Empty, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method EnableLogicalDevicePort not implemented")
+}
+func (*UnimplementedVolthaServiceServer) DisableLogicalDevicePort(ctx context.Context, req *LogicalPortId) (*empty.Empty, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method DisableLogicalDevicePort not implemented")
+}
+func (*UnimplementedVolthaServiceServer) ListLogicalDeviceFlows(ctx context.Context, req *common.ID) (*openflow_13.Flows, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ListLogicalDeviceFlows not implemented")
+}
+func (*UnimplementedVolthaServiceServer) UpdateLogicalDeviceFlowTable(ctx context.Context, req *openflow_13.FlowTableUpdate) (*empty.Empty, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method UpdateLogicalDeviceFlowTable not implemented")
+}
+func (*UnimplementedVolthaServiceServer) UpdateLogicalDeviceMeterTable(ctx context.Context, req *openflow_13.MeterModUpdate) (*empty.Empty, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method UpdateLogicalDeviceMeterTable not implemented")
+}
+func (*UnimplementedVolthaServiceServer) ListLogicalDeviceMeters(ctx context.Context, req *common.ID) (*openflow_13.Meters, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ListLogicalDeviceMeters not implemented")
+}
+func (*UnimplementedVolthaServiceServer) ListLogicalDeviceFlowGroups(ctx context.Context, req *common.ID) (*openflow_13.FlowGroups, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ListLogicalDeviceFlowGroups not implemented")
+}
+func (*UnimplementedVolthaServiceServer) UpdateLogicalDeviceFlowGroupTable(ctx context.Context, req *openflow_13.FlowGroupTableUpdate) (*empty.Empty, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method UpdateLogicalDeviceFlowGroupTable not implemented")
+}
+func (*UnimplementedVolthaServiceServer) ListDevices(ctx context.Context, req *empty.Empty) (*Devices, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ListDevices not implemented")
+}
+func (*UnimplementedVolthaServiceServer) ListDeviceIds(ctx context.Context, req *empty.Empty) (*common.IDs, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ListDeviceIds not implemented")
+}
+func (*UnimplementedVolthaServiceServer) ReconcileDevices(ctx context.Context, req *common.IDs) (*empty.Empty, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ReconcileDevices not implemented")
+}
+func (*UnimplementedVolthaServiceServer) GetDevice(ctx context.Context, req *common.ID) (*Device, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetDevice not implemented")
+}
+func (*UnimplementedVolthaServiceServer) CreateDevice(ctx context.Context, req *Device) (*Device, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method CreateDevice not implemented")
+}
+func (*UnimplementedVolthaServiceServer) EnableDevice(ctx context.Context, req *common.ID) (*empty.Empty, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method EnableDevice not implemented")
+}
+func (*UnimplementedVolthaServiceServer) DisableDevice(ctx context.Context, req *common.ID) (*empty.Empty, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method DisableDevice not implemented")
+}
+func (*UnimplementedVolthaServiceServer) RebootDevice(ctx context.Context, req *common.ID) (*empty.Empty, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method RebootDevice not implemented")
+}
+func (*UnimplementedVolthaServiceServer) DeleteDevice(ctx context.Context, req *common.ID) (*empty.Empty, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method DeleteDevice not implemented")
+}
+func (*UnimplementedVolthaServiceServer) ForceDeleteDevice(ctx context.Context, req *common.ID) (*empty.Empty, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ForceDeleteDevice not implemented")
+}
+func (*UnimplementedVolthaServiceServer) DownloadImage(ctx context.Context, req *ImageDownload) (*common.OperationResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method DownloadImage not implemented")
+}
+func (*UnimplementedVolthaServiceServer) GetImageDownloadStatus(ctx context.Context, req *ImageDownload) (*ImageDownload, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetImageDownloadStatus not implemented")
+}
+func (*UnimplementedVolthaServiceServer) GetImageDownload(ctx context.Context, req *ImageDownload) (*ImageDownload, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetImageDownload not implemented")
+}
+func (*UnimplementedVolthaServiceServer) ListImageDownloads(ctx context.Context, req *common.ID) (*ImageDownloads, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ListImageDownloads not implemented")
+}
+func (*UnimplementedVolthaServiceServer) CancelImageDownload(ctx context.Context, req *ImageDownload) (*common.OperationResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method CancelImageDownload not implemented")
+}
+func (*UnimplementedVolthaServiceServer) ActivateImageUpdate(ctx context.Context, req *ImageDownload) (*common.OperationResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ActivateImageUpdate not implemented")
+}
+func (*UnimplementedVolthaServiceServer) RevertImageUpdate(ctx context.Context, req *ImageDownload) (*common.OperationResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method RevertImageUpdate not implemented")
+}
+func (*UnimplementedVolthaServiceServer) DownloadImageToDevice(ctx context.Context, req *DeviceImageDownloadRequest) (*DeviceImageResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method DownloadImageToDevice not implemented")
+}
+func (*UnimplementedVolthaServiceServer) GetImageStatus(ctx context.Context, req *DeviceImageRequest) (*DeviceImageResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetImageStatus not implemented")
+}
+func (*UnimplementedVolthaServiceServer) AbortImageUpgradeToDevice(ctx context.Context, req *DeviceImageRequest) (*DeviceImageResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method AbortImageUpgradeToDevice not implemented")
+}
+func (*UnimplementedVolthaServiceServer) GetOnuImages(ctx context.Context, req *common.ID) (*OnuImages, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetOnuImages not implemented")
+}
+func (*UnimplementedVolthaServiceServer) ActivateImage(ctx context.Context, req *DeviceImageRequest) (*DeviceImageResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ActivateImage not implemented")
+}
+func (*UnimplementedVolthaServiceServer) CommitImage(ctx context.Context, req *DeviceImageRequest) (*DeviceImageResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method CommitImage not implemented")
+}
+func (*UnimplementedVolthaServiceServer) ListDevicePorts(ctx context.Context, req *common.ID) (*Ports, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ListDevicePorts not implemented")
+}
+func (*UnimplementedVolthaServiceServer) ListDevicePmConfigs(ctx context.Context, req *common.ID) (*PmConfigs, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ListDevicePmConfigs not implemented")
+}
+func (*UnimplementedVolthaServiceServer) UpdateDevicePmConfigs(ctx context.Context, req *PmConfigs) (*empty.Empty, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method UpdateDevicePmConfigs not implemented")
+}
+func (*UnimplementedVolthaServiceServer) ListDeviceFlows(ctx context.Context, req *common.ID) (*openflow_13.Flows, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ListDeviceFlows not implemented")
+}
+func (*UnimplementedVolthaServiceServer) ListDeviceFlowGroups(ctx context.Context, req *common.ID) (*openflow_13.FlowGroups, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ListDeviceFlowGroups not implemented")
+}
+func (*UnimplementedVolthaServiceServer) ListDeviceTypes(ctx context.Context, req *empty.Empty) (*DeviceTypes, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ListDeviceTypes not implemented")
+}
+func (*UnimplementedVolthaServiceServer) GetDeviceType(ctx context.Context, req *common.ID) (*DeviceType, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetDeviceType not implemented")
+}
+func (*UnimplementedVolthaServiceServer) ListDeviceGroups(ctx context.Context, req *empty.Empty) (*DeviceGroups, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ListDeviceGroups not implemented")
+}
+func (*UnimplementedVolthaServiceServer) StreamPacketsOut(srv VolthaService_StreamPacketsOutServer) error {
+	return status.Errorf(codes.Unimplemented, "method StreamPacketsOut not implemented")
+}
+func (*UnimplementedVolthaServiceServer) ReceivePacketsIn(req *empty.Empty, srv VolthaService_ReceivePacketsInServer) error {
+	return status.Errorf(codes.Unimplemented, "method ReceivePacketsIn not implemented")
+}
+func (*UnimplementedVolthaServiceServer) ReceiveChangeEvents(req *empty.Empty, srv VolthaService_ReceiveChangeEventsServer) error {
+	return status.Errorf(codes.Unimplemented, "method ReceiveChangeEvents not implemented")
+}
+func (*UnimplementedVolthaServiceServer) GetDeviceGroup(ctx context.Context, req *common.ID) (*DeviceGroup, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetDeviceGroup not implemented")
+}
+func (*UnimplementedVolthaServiceServer) CreateEventFilter(ctx context.Context, req *EventFilter) (*EventFilter, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method CreateEventFilter not implemented")
+}
+func (*UnimplementedVolthaServiceServer) GetEventFilter(ctx context.Context, req *common.ID) (*EventFilters, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetEventFilter not implemented")
+}
+func (*UnimplementedVolthaServiceServer) UpdateEventFilter(ctx context.Context, req *EventFilter) (*EventFilter, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method UpdateEventFilter not implemented")
+}
+func (*UnimplementedVolthaServiceServer) DeleteEventFilter(ctx context.Context, req *EventFilter) (*empty.Empty, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method DeleteEventFilter not implemented")
+}
+func (*UnimplementedVolthaServiceServer) ListEventFilters(ctx context.Context, req *empty.Empty) (*EventFilters, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ListEventFilters not implemented")
+}
+func (*UnimplementedVolthaServiceServer) GetImages(ctx context.Context, req *common.ID) (*Images, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetImages not implemented")
+}
+func (*UnimplementedVolthaServiceServer) SelfTest(ctx context.Context, req *common.ID) (*SelfTestResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method SelfTest not implemented")
+}
+func (*UnimplementedVolthaServiceServer) GetMibDeviceData(ctx context.Context, req *common.ID) (*omci.MibDeviceData, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetMibDeviceData not implemented")
+}
+func (*UnimplementedVolthaServiceServer) GetAlarmDeviceData(ctx context.Context, req *common.ID) (*omci.AlarmDeviceData, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetAlarmDeviceData not implemented")
+}
+func (*UnimplementedVolthaServiceServer) SimulateAlarm(ctx context.Context, req *SimulateAlarmRequest) (*common.OperationResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method SimulateAlarm not implemented")
+}
+func (*UnimplementedVolthaServiceServer) Subscribe(ctx context.Context, req *OfAgentSubscriber) (*OfAgentSubscriber, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method Subscribe not implemented")
+}
+func (*UnimplementedVolthaServiceServer) EnablePort(ctx context.Context, req *Port) (*empty.Empty, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method EnablePort not implemented")
+}
+func (*UnimplementedVolthaServiceServer) DisablePort(ctx context.Context, req *Port) (*empty.Empty, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method DisablePort not implemented")
+}
+func (*UnimplementedVolthaServiceServer) GetExtValue(ctx context.Context, req *common.ValueSpecifier) (*common.ReturnValues, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetExtValue not implemented")
+}
+func (*UnimplementedVolthaServiceServer) SetExtValue(ctx context.Context, req *ValueSet) (*empty.Empty, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method SetExtValue not implemented")
+}
+func (*UnimplementedVolthaServiceServer) StartOmciTestAction(ctx context.Context, req *OmciTestRequest) (*TestResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method StartOmciTestAction not implemented")
+}
+
 func RegisterVolthaServiceServer(s *grpc.Server, srv VolthaServiceServer) {
 	s.RegisterService(&_VolthaService_serviceDesc, srv)
 }
@@ -3926,6 +4453,114 @@
 	return interceptor(ctx, in, info, handler)
 }
 
+func _VolthaService_DownloadImageToDevice_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(DeviceImageDownloadRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).DownloadImageToDevice(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/DownloadImageToDevice",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).DownloadImageToDevice(ctx, req.(*DeviceImageDownloadRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_GetImageStatus_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(DeviceImageRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).GetImageStatus(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/GetImageStatus",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).GetImageStatus(ctx, req.(*DeviceImageRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_AbortImageUpgradeToDevice_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(DeviceImageRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).AbortImageUpgradeToDevice(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/AbortImageUpgradeToDevice",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).AbortImageUpgradeToDevice(ctx, req.(*DeviceImageRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_GetOnuImages_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(common.ID)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).GetOnuImages(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/GetOnuImages",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).GetOnuImages(ctx, req.(*common.ID))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_ActivateImage_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(DeviceImageRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).ActivateImage(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/ActivateImage",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).ActivateImage(ctx, req.(*DeviceImageRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_CommitImage_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(DeviceImageRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).CommitImage(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/CommitImage",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).CommitImage(ctx, req.(*DeviceImageRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
 func _VolthaService_ListDevicePorts_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
 	in := new(common.ID)
 	if err := dec(in); err != nil {
@@ -4589,6 +5224,30 @@
 			Handler:    _VolthaService_RevertImageUpdate_Handler,
 		},
 		{
+			MethodName: "DownloadImageToDevice",
+			Handler:    _VolthaService_DownloadImageToDevice_Handler,
+		},
+		{
+			MethodName: "GetImageStatus",
+			Handler:    _VolthaService_GetImageStatus_Handler,
+		},
+		{
+			MethodName: "AbortImageUpgradeToDevice",
+			Handler:    _VolthaService_AbortImageUpgradeToDevice_Handler,
+		},
+		{
+			MethodName: "GetOnuImages",
+			Handler:    _VolthaService_GetOnuImages_Handler,
+		},
+		{
+			MethodName: "ActivateImage",
+			Handler:    _VolthaService_ActivateImage_Handler,
+		},
+		{
+			MethodName: "CommitImage",
+			Handler:    _VolthaService_CommitImage_Handler,
+		},
+		{
 			MethodName: "ListDevicePorts",
 			Handler:    _VolthaService_ListDevicePorts_Handler,
 		},
diff --git a/vendor/modules.txt b/vendor/modules.txt
index 7b1ab23..caf36a8 100644
--- a/vendor/modules.txt
+++ b/vendor/modules.txt
@@ -86,7 +86,7 @@
 github.com/modern-go/concurrent
 # github.com/modern-go/reflect2 v1.0.1
 github.com/modern-go/reflect2
-# github.com/opencord/voltha-protos/v4 v4.0.12
+# github.com/opencord/voltha-protos/v4 v4.1.1
 github.com/opencord/voltha-protos/v4/go/common
 github.com/opencord/voltha-protos/v4/go/ext/config
 github.com/opencord/voltha-protos/v4/go/extension