From 71086dec6d2b4b8ab970f651d9169ece6779ebcd Mon Sep 17 00:00:00 2001 From: Ben Swartzlander Date: Thu, 17 Sep 2020 10:00:00 -0400 Subject: [PATCH 1/5] Add force detach Add new controller capability: * UNPUBLISH_FENCE Add new node capabilitiy: * FORCE_UNPUBLISH --- csi.proto | 25 ++ lib/go/csi/csi.pb.go | 531 +++++++++++++++++++++++-------------------- spec.md | 120 ++++++---- 3 files changed, 394 insertions(+), 282 deletions(-) diff --git a/csi.proto b/csi.proto index f2ba8b97..21c6a7f6 100644 --- a/csi.proto +++ b/csi.proto @@ -788,6 +788,17 @@ message ControllerUnpublishVolumeRequest { // This field is OPTIONAL. Refer to the `Secrets Requirements` // section on how to use this field. map secrets = 3 [(csi_secret) = true]; + + // Indicates SP MUST make the volume inacessible to the node or nodes + // it is being unpublished from. Any attempt to read or write data + // to a volume from a node that has been fenced MUST NOT succeed, + // even if the volume remains staged and/or published on the node. + // CO MUST NOT set this field to true unless SP has the + // UNPUBLISH_FENCE controller capability. + // The SP MAY make the volume inaccessible even when this field is + // false. + // This is an OPTIONAL field. + bool fence = 4; } message ControllerUnpublishVolumeResponse { @@ -1316,6 +1327,13 @@ message NodeUnstageVolumeRequest { // system/filesystem, but, at a minimum, SP MUST accept a max path // length of at least 128 bytes. string staging_target_path = 2; + + // Indicates that the SP should prefer to successfully unstage the + // volume, even if data loss would occur as a result. + // CO MUST NOT set this field to true unless SP has the + // FORCE_UNPUBLISH node capability. + // This in an OPTIONAL field. + bool force = 3; } message NodeUnstageVolumeResponse { @@ -1400,6 +1418,13 @@ message NodeUnpublishVolumeRequest { // system/filesystem, but, at a minimum, SP MUST accept a max path // length of at least 128 bytes. string target_path = 2; + + // Indicates that the SP should prefer to successfully unpublish the + // volume, even if data loss would occur as a result. + // CO MUST NOT set this field to true unless SP has the + // FORCE_UNPUBLISH node capability. + // This in an OPTIONAL field. + bool force = 3; } message NodeUnpublishVolumeResponse { diff --git a/lib/go/csi/csi.pb.go b/lib/go/csi/csi.pb.go index 47a6b7b1..971ef665 100644 --- a/lib/go/csi/csi.pb.go +++ b/lib/go/csi/csi.pb.go @@ -2070,10 +2070,20 @@ type ControllerUnpublishVolumeRequest struct { // ControllerPublishVolume call for the specified volume. // This field is OPTIONAL. Refer to the `Secrets Requirements` // section on how to use this field. - Secrets map[string]string `protobuf:"bytes,3,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Secrets map[string]string `protobuf:"bytes,3,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Indicates SP MUST make the volume inacessible to the node or nodes + // it is being unpublished from. Any attempt to read or write data + // to a volume from a node that has been fenced MUST NOT succeed, + // even if the volume remains staged and/or published on the node. + // CO MUST NOT set this field to true unless SP has the + // UNPUBLISH_FENCE controller capability. + // The SP MAY make the volume inaccessible even when this field is + // false. + // This is an OPTIONAL field. + Fence bool `protobuf:"varint,4,opt,name=fence,proto3" json:"fence,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *ControllerUnpublishVolumeRequest) Reset() { *m = ControllerUnpublishVolumeRequest{} } @@ -2122,6 +2132,13 @@ func (m *ControllerUnpublishVolumeRequest) GetSecrets() map[string]string { return nil } +func (m *ControllerUnpublishVolumeRequest) GetFence() bool { + if m != nil { + return m.Fence + } + return false +} + type ControllerUnpublishVolumeResponse struct { XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -3840,7 +3857,13 @@ type NodeUnstageVolumeRequest struct { // SP SHOULD support the maximum path length allowed by the operating // system/filesystem, but, at a minimum, SP MUST accept a max path // length of at least 128 bytes. - StagingTargetPath string `protobuf:"bytes,2,opt,name=staging_target_path,json=stagingTargetPath,proto3" json:"staging_target_path,omitempty"` + StagingTargetPath string `protobuf:"bytes,2,opt,name=staging_target_path,json=stagingTargetPath,proto3" json:"staging_target_path,omitempty"` + // Indicates that the SP should prefer to successfully unstage the + // volume, even if data loss would occur as a result. + // CO MUST NOT set this field to true unless SP has the + // FORCE_UNPUBLISH node capability. + // This in an OPTIONAL field. + Force bool `protobuf:"varint,3,opt,name=force,proto3" json:"force,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -3885,6 +3908,13 @@ func (m *NodeUnstageVolumeRequest) GetStagingTargetPath() string { return "" } +func (m *NodeUnstageVolumeRequest) GetForce() bool { + if m != nil { + return m.Force + } + return false +} + type NodeUnstageVolumeResponse struct { XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -4098,7 +4128,13 @@ type NodeUnpublishVolumeRequest struct { // SP SHOULD support the maximum path length allowed by the operating // system/filesystem, but, at a minimum, SP MUST accept a max path // length of at least 128 bytes. - TargetPath string `protobuf:"bytes,2,opt,name=target_path,json=targetPath,proto3" json:"target_path,omitempty"` + TargetPath string `protobuf:"bytes,2,opt,name=target_path,json=targetPath,proto3" json:"target_path,omitempty"` + // Indicates that the SP should prefer to successfully unpublish the + // volume, even if data loss would occur as a result. + // CO MUST NOT set this field to true unless SP has the + // FORCE_UNPUBLISH node capability. + // This in an OPTIONAL field. + Force bool `protobuf:"varint,3,opt,name=force,proto3" json:"force,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -4143,6 +4179,13 @@ func (m *NodeUnpublishVolumeRequest) GetTargetPath() string { return "" } +func (m *NodeUnpublishVolumeRequest) GetForce() bool { + if m != nil { + return m.Force + } + return false +} + type NodeUnpublishVolumeResponse struct { XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -5058,245 +5101,247 @@ func init() { } var fileDescriptor_9cdb00adce470e01 = []byte{ - // 3797 bytes of a gzipped FileDescriptorProto + // 3825 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x3b, 0x4b, 0x6c, 0x1b, 0x49, - 0x76, 0x6a, 0xfe, 0x24, 0x3d, 0x4a, 0x32, 0x5d, 0xfa, 0x98, 0x6e, 0x49, 0x96, 0xdc, 0x1e, 0x7b, + 0x76, 0x6a, 0xfe, 0x44, 0x3d, 0x4a, 0x32, 0x5d, 0xfa, 0x98, 0x6e, 0x49, 0x96, 0xdc, 0x1e, 0x7b, 0x65, 0x8f, 0x4d, 0xaf, 0xb5, 0x63, 0x23, 0x23, 0x7b, 0x76, 0x87, 0xa4, 0x68, 0x89, 0x6b, 0x8a, - 0xd4, 0x34, 0x29, 0x7b, 0xed, 0x64, 0xd0, 0xd3, 0x22, 0x4b, 0x74, 0x63, 0xc8, 0x6e, 0x4e, 0x77, - 0x53, 0x91, 0xe6, 0x92, 0x20, 0x41, 0x0e, 0x41, 0x2e, 0xb9, 0xed, 0xe4, 0xb6, 0x48, 0xf6, 0x98, - 0xc5, 0x22, 0x08, 0x82, 0x1c, 0x03, 0xe4, 0x18, 0x20, 0x9b, 0xdc, 0x12, 0xe4, 0xb2, 0xb7, 0x20, - 0x58, 0x24, 0xc0, 0x5c, 0x72, 0xc9, 0x21, 0x08, 0xba, 0xaa, 0xba, 0xd9, 0x5f, 0x7e, 0x2c, 0x19, - 0x73, 0xc8, 0x49, 0xec, 0x57, 0xef, 0xbd, 0x7a, 0x55, 0xf5, 0xde, 0xab, 0xf7, 0x29, 0xc1, 0xe3, - 0xb6, 0x62, 0xbe, 0xed, 0x1f, 0xe7, 0x9a, 0x5a, 0xf7, 0x61, 0x53, 0x53, 0x4d, 0x59, 0x51, 0xb1, - 0xfe, 0xc0, 0x30, 0x35, 0x5d, 0x6e, 0xe3, 0x07, 0x8a, 0x6a, 0x62, 0xfd, 0x44, 0x6e, 0xe2, 0x87, - 0x46, 0x0f, 0x37, 0x1f, 0x36, 0x0d, 0x25, 0xd7, 0xd3, 0x35, 0x53, 0x43, 0x29, 0xeb, 0xe7, 0xe9, - 0x23, 0x7e, 0xb3, 0xad, 0x69, 0xed, 0x0e, 0x7e, 0x48, 0xa0, 0xc7, 0xfd, 0x93, 0x87, 0x2d, 0x6c, - 0x34, 0x75, 0xa5, 0x67, 0x6a, 0x3a, 0xc5, 0xe4, 0x37, 0xfc, 0x18, 0xa6, 0xd2, 0xc5, 0x86, 0x29, - 0x77, 0x7b, 0x0c, 0xe1, 0x86, 0x1f, 0xe1, 0x77, 0x75, 0xb9, 0xd7, 0xc3, 0xba, 0x41, 0xc7, 0x85, - 0x15, 0x58, 0xda, 0xc3, 0xe6, 0x61, 0xa7, 0xdf, 0x56, 0xd4, 0xb2, 0x7a, 0xa2, 0x89, 0xf8, 0xab, - 0x3e, 0x36, 0x4c, 0xe1, 0x5f, 0x39, 0x58, 0xf6, 0x0d, 0x18, 0x3d, 0x4d, 0x35, 0x30, 0x42, 0x90, - 0x50, 0xe5, 0x2e, 0xce, 0x72, 0x9b, 0xdc, 0xd6, 0xac, 0x48, 0x7e, 0xa3, 0xdb, 0xb0, 0x70, 0x8a, - 0xd5, 0x96, 0xa6, 0x4b, 0xa7, 0x58, 0x37, 0x14, 0x4d, 0xcd, 0xc6, 0xc8, 0xe8, 0x3c, 0x85, 0xbe, - 0xa4, 0x40, 0xb4, 0x07, 0x33, 0x5d, 0x59, 0x55, 0x4e, 0xb0, 0x61, 0x66, 0xe3, 0x9b, 0xf1, 0xad, - 0xf4, 0xf6, 0x87, 0x39, 0xba, 0xd4, 0x5c, 0xe8, 0x5c, 0xb9, 0x03, 0x86, 0x5d, 0x52, 0x4d, 0xfd, - 0x5c, 0x74, 0x88, 0xf9, 0xa7, 0x30, 0xef, 0x19, 0x42, 0x19, 0x88, 0x7f, 0x89, 0xcf, 0x99, 0x4c, - 0xd6, 0x4f, 0xb4, 0x04, 0xc9, 0x53, 0xb9, 0xd3, 0xc7, 0x4c, 0x12, 0xfa, 0xb1, 0x13, 0xfb, 0x2d, - 0x4e, 0xb8, 0x01, 0x6b, 0xce, 0x6c, 0x45, 0xb9, 0x27, 0x1f, 0x2b, 0x1d, 0xc5, 0x54, 0xb0, 0x61, - 0x2f, 0xfd, 0x73, 0x58, 0x8f, 0x18, 0x67, 0x3b, 0xf0, 0x0c, 0xe6, 0x9a, 0x2e, 0x78, 0x96, 0x23, - 0x4b, 0xc9, 0xda, 0x4b, 0xf1, 0x51, 0x9e, 0x8b, 0x1e, 0x6c, 0xe1, 0x57, 0x71, 0xc8, 0xf8, 0x51, - 0xd0, 0x33, 0x98, 0x36, 0xb0, 0x7e, 0xaa, 0x34, 0xe9, 0xbe, 0xa6, 0xb7, 0x37, 0xa3, 0xb8, 0xe5, - 0xea, 0x14, 0x6f, 0x7f, 0x4a, 0xb4, 0x49, 0xd0, 0x11, 0x64, 0x4e, 0xb5, 0x4e, 0xbf, 0x8b, 0x25, - 0x7c, 0xd6, 0x93, 0x55, 0xe7, 0x00, 0xd2, 0xdb, 0x5b, 0x91, 0x6c, 0x5e, 0x12, 0x82, 0x92, 0x8d, - 0xbf, 0x3f, 0x25, 0x5e, 0x39, 0xf5, 0x82, 0xf8, 0x9f, 0x72, 0x30, 0xcd, 0x66, 0x43, 0x1f, 0x43, - 0xc2, 0x3c, 0xef, 0x51, 0xe9, 0x16, 0xb6, 0x6f, 0x8f, 0x92, 0x2e, 0xd7, 0x38, 0xef, 0x61, 0x91, - 0x90, 0x08, 0x9f, 0x41, 0xc2, 0xfa, 0x42, 0x69, 0x98, 0x3e, 0xaa, 0xbe, 0xa8, 0xd6, 0x5e, 0x55, - 0x33, 0x53, 0x68, 0x05, 0x50, 0xb1, 0x56, 0x6d, 0x88, 0xb5, 0x4a, 0xa5, 0x24, 0x4a, 0xf5, 0x92, - 0xf8, 0xb2, 0x5c, 0x2c, 0x65, 0x38, 0xf4, 0x01, 0x6c, 0xbe, 0xac, 0x55, 0x8e, 0x0e, 0x4a, 0x52, - 0xbe, 0x58, 0x2c, 0xd5, 0xeb, 0xe5, 0x42, 0xb9, 0x52, 0x6e, 0xbc, 0x96, 0x8a, 0xb5, 0x6a, 0xbd, - 0x21, 0xe6, 0xcb, 0xd5, 0x46, 0x3d, 0x13, 0xe3, 0xff, 0x80, 0x83, 0x2b, 0xbe, 0x05, 0xa0, 0xbc, - 0x47, 0xc2, 0x07, 0xe3, 0x2e, 0xdc, 0x2d, 0xe9, 0xfd, 0x30, 0x49, 0x01, 0x52, 0xb5, 0x6a, 0xa5, - 0x5c, 0xb5, 0xa4, 0x4b, 0xc3, 0x74, 0xed, 0xf9, 0x73, 0xf2, 0x11, 0x2b, 0xa4, 0xe8, 0x84, 0xc2, - 0x02, 0xcc, 0x1d, 0xea, 0xda, 0x31, 0xb6, 0xf5, 0x27, 0x0f, 0xf3, 0xec, 0x9b, 0xe9, 0xcb, 0xf7, - 0x21, 0xa9, 0x63, 0xb9, 0x75, 0xce, 0x8e, 0x96, 0xcf, 0x51, 0x9b, 0xcc, 0xd9, 0x36, 0x99, 0x2b, - 0x68, 0x5a, 0xe7, 0xa5, 0xa5, 0x9f, 0x22, 0x45, 0x14, 0xbe, 0x4d, 0xc0, 0x62, 0x51, 0xc7, 0xb2, - 0x89, 0xa9, 0xb4, 0x8c, 0x75, 0xa8, 0xed, 0x3d, 0x83, 0x05, 0x4b, 0xbf, 0x9a, 0x8a, 0x79, 0x2e, - 0xe9, 0xb2, 0xda, 0xc6, 0xec, 0xe8, 0x97, 0xed, 0x1d, 0x28, 0xb2, 0x51, 0xd1, 0x1a, 0x14, 0xe7, - 0x9b, 0xee, 0x4f, 0x54, 0x86, 0x45, 0xa6, 0x3a, 0x1e, 0x95, 0x8e, 0x7b, 0x55, 0x9a, 0x4a, 0xe1, - 0x52, 0x69, 0x74, 0xea, 0x85, 0x28, 0xd8, 0x40, 0x2f, 0x00, 0x7a, 0xb2, 0x2e, 0x77, 0xb1, 0x89, - 0x75, 0x23, 0x9b, 0xf0, 0xda, 0x77, 0xc8, 0x6a, 0x72, 0x87, 0x0e, 0x36, 0xb5, 0x6f, 0x17, 0x39, - 0xda, 0xb3, 0x0c, 0xa2, 0xa9, 0x63, 0xd3, 0xc8, 0x26, 0x09, 0xa7, 0xad, 0x61, 0x9c, 0xea, 0x14, - 0x95, 0xb0, 0x29, 0xc4, 0xbf, 0x29, 0x70, 0xa2, 0x4d, 0x8d, 0x6a, 0xb0, 0x6c, 0x2f, 0x50, 0x53, - 0x4d, 0xac, 0x9a, 0x92, 0xa1, 0xf5, 0xf5, 0x26, 0xce, 0xa6, 0xc8, 0x2e, 0xad, 0xfa, 0x96, 0x48, - 0x71, 0xea, 0x04, 0x45, 0x64, 0x5b, 0xe3, 0x01, 0xa2, 0x37, 0xc0, 0xcb, 0xcd, 0x26, 0x36, 0x0c, - 0x85, 0xee, 0x85, 0xa4, 0xe3, 0xaf, 0xfa, 0x8a, 0x8e, 0xbb, 0x58, 0x35, 0x8d, 0xec, 0xb4, 0x97, - 0x6b, 0x43, 0xeb, 0x69, 0x1d, 0xad, 0x7d, 0x2e, 0x0e, 0x70, 0xc4, 0xeb, 0x1e, 0x72, 0xd7, 0x88, - 0xc1, 0x7f, 0x02, 0x57, 0x7c, 0x9b, 0x32, 0x89, 0x67, 0xe3, 0x77, 0x60, 0xce, 0xbd, 0x13, 0x13, - 0x79, 0xc5, 0x3f, 0x89, 0xc1, 0x62, 0xc8, 0x1e, 0xa0, 0x7d, 0x98, 0x31, 0x54, 0xb9, 0x67, 0xbc, - 0xd5, 0x4c, 0xa6, 0xbf, 0xf7, 0x86, 0x6c, 0x59, 0xae, 0xce, 0x70, 0xe9, 0xe7, 0xfe, 0x94, 0xe8, - 0x50, 0xa3, 0x02, 0xa4, 0xe8, 0x7e, 0xfa, 0x7d, 0x53, 0x18, 0x1f, 0x0a, 0x73, 0xb8, 0x30, 0x4a, - 0xfe, 0x11, 0x2c, 0x78, 0x67, 0x40, 0x1b, 0x90, 0xb6, 0x67, 0x90, 0x94, 0x16, 0x5b, 0x2b, 0xd8, - 0xa0, 0x72, 0x8b, 0xff, 0x10, 0xe6, 0xdc, 0xcc, 0xd0, 0x2a, 0xcc, 0x32, 0x85, 0x70, 0xd0, 0x67, - 0x28, 0xa0, 0xdc, 0x72, 0x6c, 0xfa, 0x87, 0xb0, 0xe4, 0xd5, 0x33, 0x66, 0xca, 0x77, 0x9c, 0x35, - 0xd0, 0xbd, 0x58, 0xf0, 0xae, 0xc1, 0x96, 0x53, 0xf8, 0x79, 0x12, 0x32, 0x7e, 0xa3, 0x41, 0xcf, - 0x20, 0x79, 0xdc, 0xd1, 0x9a, 0x5f, 0x32, 0xda, 0x0f, 0xa2, 0xac, 0x2b, 0x57, 0xb0, 0xb0, 0x28, - 0x74, 0x7f, 0x4a, 0xa4, 0x44, 0x16, 0x75, 0x57, 0xeb, 0xab, 0x26, 0xdb, 0xbd, 0x68, 0xea, 0x03, - 0x0b, 0x6b, 0x40, 0x4d, 0x88, 0xd0, 0x2e, 0xa4, 0xa9, 0xda, 0x49, 0x5d, 0xad, 0x85, 0xb3, 0x71, - 0xc2, 0xe3, 0x56, 0x24, 0x8f, 0x3c, 0xc1, 0x3d, 0xd0, 0x5a, 0x58, 0x04, 0xd9, 0xf9, 0xcd, 0xcf, - 0x43, 0xda, 0x25, 0x1b, 0xff, 0x35, 0xa4, 0x5d, 0x93, 0xa1, 0x6b, 0x30, 0x7d, 0x62, 0x48, 0x8e, - 0x13, 0x9e, 0x15, 0x53, 0x27, 0x06, 0xf1, 0xa7, 0x1b, 0x90, 0x26, 0x52, 0x48, 0x27, 0x1d, 0xb9, - 0x6d, 0x64, 0x63, 0x9b, 0x71, 0xeb, 0x8c, 0x08, 0xe8, 0xb9, 0x05, 0x41, 0x8f, 0x80, 0x39, 0x14, - 0x89, 0xe2, 0xb5, 0x75, 0xad, 0xdf, 0x23, 0x42, 0xce, 0x16, 0xe2, 0x3f, 0x2b, 0x70, 0x22, 0xbb, - 0xdf, 0xc8, 0x6c, 0x7b, 0xd6, 0x20, 0xff, 0xd7, 0x31, 0x80, 0x81, 0x94, 0xe8, 0x19, 0x24, 0xc8, - 0xc2, 0xa8, 0xf7, 0xdf, 0x1a, 0x63, 0x61, 0x39, 0xb2, 0x3a, 0x42, 0x25, 0xfc, 0x3b, 0x07, 0x09, - 0xc2, 0xc6, 0x7f, 0x47, 0xd5, 0xcb, 0xd5, 0xbd, 0x4a, 0x49, 0xaa, 0xd6, 0x76, 0x4b, 0xd2, 0x2b, - 0xb1, 0xdc, 0x28, 0x89, 0x19, 0x0e, 0xad, 0xc2, 0x35, 0x37, 0x5c, 0x2c, 0xe5, 0x77, 0x4b, 0xa2, - 0x54, 0xab, 0x56, 0x5e, 0x67, 0x62, 0x88, 0x87, 0x95, 0x83, 0xa3, 0x4a, 0xa3, 0x1c, 0x1c, 0x8b, - 0xa3, 0x35, 0xc8, 0xba, 0xc6, 0x18, 0x0f, 0xc6, 0x36, 0x61, 0xb1, 0x75, 0x8d, 0xd2, 0x9f, 0x6c, - 0x30, 0x89, 0x04, 0xb8, 0xee, 0x9e, 0xd3, 0x4b, 0x9b, 0xe2, 0xad, 0x4d, 0x42, 0x37, 0x21, 0xeb, - 0xc6, 0xf1, 0x70, 0x98, 0x26, 0x28, 0x85, 0x79, 0x47, 0x0d, 0x88, 0x9a, 0xbf, 0x82, 0x79, 0xcf, - 0xed, 0x60, 0x05, 0x72, 0xcc, 0x9d, 0xb5, 0xa4, 0xe3, 0x73, 0x93, 0x04, 0x37, 0xdc, 0x56, 0x5c, - 0x9c, 0xb7, 0xa1, 0x05, 0x0b, 0x68, 0x1d, 0x68, 0x47, 0xe9, 0x2a, 0x26, 0xc3, 0x89, 0x11, 0x1c, - 0x20, 0x20, 0x82, 0x20, 0xfc, 0x3a, 0x06, 0x29, 0xa6, 0x15, 0xb7, 0x5d, 0xf7, 0x93, 0x87, 0xa5, - 0x0d, 0xa5, 0x2c, 0x3d, 0x66, 0x19, 0xf3, 0x9a, 0x25, 0xda, 0x87, 0x05, 0xb7, 0x13, 0x3f, 0xb3, - 0xc3, 0xc7, 0x9b, 0xde, 0x73, 0x76, 0x7b, 0x92, 0x33, 0x16, 0x34, 0xce, 0x9f, 0xba, 0x61, 0xa8, - 0x00, 0x0b, 0xbe, 0x7b, 0x20, 0x31, 0xfa, 0x1e, 0x98, 0x6f, 0x7a, 0x5c, 0x62, 0x1e, 0x16, 0x6d, - 0x17, 0xde, 0xc1, 0x92, 0xc9, 0x5c, 0x3c, 0xbb, 0xa7, 0x32, 0x01, 0xd7, 0x8f, 0x06, 0xc8, 0x36, - 0x8c, 0xff, 0x14, 0x50, 0x50, 0xd6, 0x89, 0xfc, 0x75, 0x1f, 0x16, 0x43, 0x2e, 0x17, 0x94, 0x83, - 0x59, 0x72, 0x54, 0x86, 0x62, 0x62, 0x16, 0x98, 0x06, 0x25, 0x1a, 0xa0, 0x58, 0xf8, 0x3d, 0x1d, - 0x9f, 0x60, 0x5d, 0xc7, 0x2d, 0x62, 0x98, 0xa1, 0xf8, 0x0e, 0x8a, 0xf0, 0x87, 0x1c, 0xcc, 0xd8, - 0x70, 0xb4, 0x03, 0x33, 0x06, 0x6e, 0xd3, 0x8b, 0x8f, 0xce, 0x75, 0xc3, 0x4f, 0x9b, 0xab, 0x33, - 0x04, 0x16, 0xc2, 0xdb, 0xf8, 0x56, 0x08, 0xef, 0x19, 0x9a, 0x68, 0xf1, 0x7f, 0xcb, 0xc1, 0xe2, - 0x2e, 0xee, 0x60, 0x7f, 0x7c, 0x34, 0xcc, 0xb7, 0xbb, 0x43, 0x8a, 0x98, 0x37, 0xa4, 0x08, 0x61, - 0x35, 0x24, 0xa4, 0xb8, 0xd0, 0x35, 0xbb, 0x02, 0x4b, 0xde, 0xd9, 0xe8, 0xc5, 0x22, 0xfc, 0x57, - 0x1c, 0x6e, 0x58, 0xba, 0xa0, 0x6b, 0x9d, 0x0e, 0xd6, 0x0f, 0xfb, 0xc7, 0x1d, 0xc5, 0x78, 0x3b, - 0xc1, 0xe2, 0xae, 0xc1, 0xb4, 0xaa, 0xb5, 0x5c, 0xc6, 0x93, 0xb2, 0x3e, 0xcb, 0x2d, 0x54, 0x82, - 0xab, 0xfe, 0x00, 0xef, 0x9c, 0xb9, 0xff, 0xe8, 0xf0, 0x2e, 0x73, 0xea, 0xbf, 0xbb, 0x78, 0x98, - 0xb1, 0x42, 0x53, 0x4d, 0xed, 0x9c, 0x13, 0x8b, 0x99, 0x11, 0x9d, 0x6f, 0x24, 0xfa, 0x63, 0xb5, - 0x1f, 0x38, 0xb1, 0xda, 0xd0, 0x15, 0x0d, 0x0b, 0xdb, 0xbe, 0x08, 0x58, 0x7c, 0x8a, 0xb0, 0xfe, - 0x78, 0x4c, 0xd6, 0x23, 0x3d, 0xc1, 0x45, 0x4e, 0xf1, 0x12, 0xcc, 0xf7, 0x1f, 0x38, 0xd8, 0x88, - 0x5c, 0x02, 0x0b, 0x36, 0x5a, 0x70, 0xa5, 0x47, 0x07, 0x9c, 0x4d, 0xa0, 0x56, 0xf6, 0x74, 0xe4, - 0x26, 0xb0, 0xfc, 0x99, 0x41, 0x3d, 0xdb, 0xb0, 0xd0, 0xf3, 0x00, 0xf9, 0x3c, 0x2c, 0x86, 0xa0, - 0x4d, 0xb4, 0x98, 0xdf, 0x70, 0xb0, 0x39, 0x10, 0xe5, 0x48, 0xed, 0x5d, 0x9e, 0xfa, 0x36, 0x06, - 0xba, 0x45, 0x5d, 0xfe, 0xe3, 0xe0, 0xda, 0xc3, 0x27, 0x7c, 0x5f, 0x16, 0x7c, 0x0b, 0x6e, 0x0e, - 0x99, 0x9a, 0x99, 0xf3, 0xaf, 0x13, 0x70, 0xf3, 0xa5, 0xdc, 0x51, 0x5a, 0x4e, 0x08, 0x19, 0x52, - 0x69, 0x18, 0xbe, 0x25, 0xcd, 0x80, 0x05, 0x50, 0xaf, 0xf5, 0xcc, 0xb1, 0xda, 0x51, 0xfc, 0xc7, - 0xb8, 0x0e, 0x2f, 0x31, 0xfd, 0x7b, 0x1d, 0x92, 0xfe, 0x7d, 0x3c, 0xbe, 0xac, 0xc3, 0x92, 0xc1, - 0x23, 0xbf, 0x83, 0x79, 0x32, 0x3e, 0xdf, 0x21, 0x5a, 0x70, 0x61, 0x2b, 0xfe, 0x2e, 0xf3, 0xb5, - 0xbf, 0x4f, 0x80, 0x30, 0x6c, 0xf5, 0xcc, 0x87, 0x88, 0x30, 0xdb, 0xd4, 0xd4, 0x13, 0x45, 0xef, - 0xe2, 0x16, 0xcb, 0x3b, 0x3e, 0x1a, 0x67, 0xf3, 0x98, 0x03, 0x29, 0xda, 0xb4, 0xe2, 0x80, 0x0d, - 0xca, 0xc2, 0x74, 0x17, 0x1b, 0x86, 0xdc, 0xb6, 0xc5, 0xb2, 0x3f, 0xf9, 0x5f, 0xc4, 0x61, 0xd6, - 0x21, 0x41, 0x6a, 0x40, 0x83, 0xa9, 0xfb, 0xda, 0x7b, 0x17, 0x01, 0xde, 0x5d, 0x99, 0x63, 0xef, - 0xa0, 0xcc, 0x2d, 0x8f, 0x32, 0x53, 0x73, 0xd8, 0x7d, 0x27, 0xb1, 0x87, 0xe8, 0xf5, 0x77, 0xae, - 0x80, 0xc2, 0xef, 0x00, 0xaa, 0x28, 0x06, 0xcb, 0xdf, 0x1c, 0xb7, 0x64, 0xa5, 0x6b, 0xf2, 0x99, - 0x84, 0x55, 0x53, 0x57, 0x58, 0xb8, 0x9e, 0x14, 0xa1, 0x2b, 0x9f, 0x95, 0x28, 0xc4, 0x0a, 0xe9, - 0x0d, 0x53, 0xd6, 0x4d, 0x45, 0x6d, 0x4b, 0xa6, 0xf6, 0x25, 0x76, 0xca, 0xbd, 0x36, 0xb4, 0x61, - 0x01, 0x85, 0xff, 0x8c, 0xc1, 0xa2, 0x87, 0x3d, 0xd3, 0xc9, 0xa7, 0x30, 0x3d, 0xe0, 0xed, 0x09, - 0xe3, 0x43, 0xb0, 0x73, 0x74, 0xdb, 0x6c, 0x0a, 0xb4, 0x0e, 0xa0, 0xe2, 0x33, 0xd3, 0x33, 0xef, - 0xac, 0x05, 0x21, 0x73, 0xf2, 0x7f, 0xc4, 0x39, 0xe9, 0xbe, 0x29, 0x9b, 0x7d, 0x03, 0xdd, 0x07, - 0xc4, 0x5c, 0x34, 0x6e, 0x49, 0xec, 0x8e, 0xa1, 0xf3, 0xce, 0x8a, 0x19, 0x67, 0xa4, 0x4a, 0x6e, - 0x1b, 0x03, 0xed, 0x39, 0x95, 0xd4, 0xa6, 0xa6, 0xb6, 0x14, 0x73, 0x50, 0x49, 0xbd, 0x16, 0x48, - 0x10, 0xe8, 0x30, 0xcd, 0x4f, 0xaf, 0x9c, 0x7a, 0xa1, 0xfc, 0x57, 0x90, 0xa4, 0xc7, 0x31, 0x66, - 0xc5, 0x00, 0x7d, 0x0a, 0x29, 0x83, 0x48, 0xec, 0xaf, 0x8e, 0x84, 0xed, 0x89, 0x7b, 0x85, 0x22, - 0xa3, 0x13, 0x7e, 0x08, 0xfc, 0xe0, 0x62, 0xda, 0xc3, 0xe6, 0xf8, 0xd7, 0xef, 0x8e, 0xb5, 0x06, - 0xe1, 0xa7, 0x31, 0x58, 0x0d, 0x65, 0x30, 0x59, 0xed, 0x03, 0xed, 0xfb, 0x56, 0xf2, 0xfd, 0xe0, - 0x8d, 0x1d, 0x60, 0x1e, 0xba, 0x22, 0xfe, 0xf7, 0x2f, 0x76, 0x98, 0x85, 0x89, 0x0f, 0x33, 0x70, - 0x8e, 0x74, 0x67, 0x7e, 0x11, 0x03, 0xb4, 0x87, 0x4d, 0x27, 0x55, 0x66, 0x5b, 0x1a, 0xe1, 0x6f, - 0xb8, 0x77, 0xf0, 0x37, 0x3f, 0xf6, 0xf8, 0x1b, 0xea, 0xb1, 0xee, 0xb9, 0x7a, 0x23, 0xbe, 0xa9, - 0x87, 0xde, 0x96, 0x11, 0xe9, 0x29, 0x8d, 0xf9, 0xc7, 0x4b, 0x4f, 0x2f, 0xe8, 0x56, 0xfe, 0x83, - 0x83, 0x45, 0x8f, 0xd0, 0x4c, 0x83, 0x1e, 0x00, 0x92, 0x4f, 0x65, 0xa5, 0x23, 0x5b, 0x82, 0xd9, - 0xe9, 0x3f, 0x2b, 0x07, 0x5c, 0x75, 0x46, 0x6c, 0x32, 0x74, 0x08, 0x8b, 0x5d, 0xf9, 0x4c, 0xe9, - 0xf6, 0xbb, 0x12, 0xdb, 0x67, 0x43, 0xf9, 0xda, 0xae, 0x1e, 0xae, 0x06, 0xaa, 0xe8, 0x65, 0xd5, - 0x7c, 0xf2, 0x11, 0x29, 0xa3, 0x53, 0x9b, 0xbc, 0xca, 0x88, 0x99, 0x06, 0x29, 0x5f, 0x63, 0xc2, - 0x51, 0x51, 0x03, 0x1c, 0xe3, 0x63, 0x73, 0xa4, 0xc4, 0x03, 0x8e, 0x82, 0xe0, 0x8e, 0x7c, 0xd9, - 0x9a, 0xfd, 0x0d, 0xa5, 0x8e, 0x3b, 0x62, 0x0c, 0xe0, 0xb0, 0xbd, 0xd9, 0x0b, 0x6d, 0x2a, 0xdd, - 0x0a, 0xda, 0x0e, 0xeb, 0xb0, 0x44, 0xf6, 0x97, 0xfe, 0x37, 0xee, 0x36, 0xe3, 0x00, 0x36, 0x7a, - 0x0a, 0x71, 0xbd, 0xd7, 0x64, 0x36, 0xfc, 0xbd, 0x31, 0xf8, 0xe7, 0xc4, 0xc3, 0xe2, 0xfe, 0x94, - 0x68, 0x51, 0xf1, 0x7f, 0x16, 0x87, 0xb8, 0x78, 0x58, 0x44, 0x9f, 0x7a, 0x9a, 0x2d, 0xf7, 0xc7, - 0xe4, 0xe2, 0xee, 0xb5, 0xfc, 0x53, 0x2c, 0xac, 0xd9, 0x92, 0x85, 0xa5, 0xa2, 0x58, 0xca, 0x37, - 0x4a, 0xd2, 0x6e, 0xa9, 0x52, 0x6a, 0x94, 0x24, 0xda, 0x0c, 0xca, 0x70, 0x68, 0x0d, 0xb2, 0x87, - 0x47, 0x85, 0x4a, 0xb9, 0xbe, 0x2f, 0x1d, 0x55, 0xed, 0x5f, 0x6c, 0x34, 0x86, 0x32, 0x30, 0x57, - 0x29, 0xd7, 0x1b, 0x0c, 0x50, 0xcf, 0xc4, 0x2d, 0xc8, 0x5e, 0xa9, 0x21, 0x15, 0xf3, 0x87, 0xf9, - 0x62, 0xb9, 0xf1, 0x3a, 0x93, 0x40, 0x3c, 0xac, 0x78, 0x79, 0xd7, 0xab, 0xf9, 0xc3, 0xfa, 0x7e, - 0xad, 0x91, 0x49, 0x22, 0x04, 0x0b, 0x84, 0xde, 0x06, 0xd5, 0x33, 0x29, 0x8b, 0x43, 0xb1, 0x52, - 0xab, 0x3a, 0x32, 0x4c, 0xa3, 0x25, 0xc8, 0xd8, 0x33, 0x8b, 0xa5, 0xfc, 0x2e, 0xa9, 0xea, 0xcd, - 0xa0, 0xab, 0x30, 0x5f, 0xfa, 0xc9, 0x61, 0xbe, 0xba, 0x6b, 0x23, 0xce, 0xa2, 0x4d, 0x58, 0x73, - 0x8b, 0x23, 0x31, 0xaa, 0xd2, 0x2e, 0xa9, 0xcc, 0xd5, 0x33, 0x80, 0xae, 0x43, 0x86, 0xf5, 0xb9, - 0x8a, 0xb5, 0xea, 0x6e, 0xb9, 0x51, 0xae, 0x55, 0x33, 0x69, 0x5a, 0xc6, 0x5b, 0x04, 0xb0, 0x24, - 0x67, 0xcc, 0xe6, 0x46, 0xd7, 0xf6, 0xe6, 0x69, 0x6d, 0xcf, 0xae, 0x5d, 0xff, 0x26, 0x06, 0xcb, - 0xb4, 0x78, 0x6d, 0x97, 0xca, 0x6d, 0x87, 0xb5, 0x05, 0x19, 0x5a, 0xf4, 0x92, 0xfc, 0x57, 0xc1, - 0x02, 0x85, 0xbf, 0xb4, 0x93, 0x0f, 0xbb, 0xd1, 0x14, 0x73, 0x35, 0x9a, 0xca, 0xfe, 0x54, 0xec, - 0x9e, 0xb7, 0x25, 0xe3, 0x9b, 0x6d, 0x58, 0x76, 0x7f, 0x10, 0x92, 0x2b, 0x3c, 0x18, 0xce, 0x6d, - 0x58, 0x1c, 0x75, 0x91, 0x54, 0xfe, 0x82, 0xae, 0xee, 0x39, 0xac, 0xf8, 0xe5, 0x65, 0x06, 0x7d, - 0x3f, 0xd0, 0x38, 0x71, 0x7c, 0xaf, 0x83, 0xeb, 0x60, 0x08, 0xff, 0xc2, 0xc1, 0x8c, 0x0d, 0xb6, - 0x62, 0x1c, 0xcb, 0x2f, 0x79, 0xca, 0xa5, 0xb3, 0x16, 0xc4, 0xa9, 0xbe, 0xba, 0x5b, 0x1e, 0x31, - 0x7f, 0xcb, 0x23, 0xf4, 0x9c, 0xe3, 0xa1, 0xe7, 0xfc, 0x23, 0x98, 0x6f, 0x5a, 0xe2, 0x2b, 0x9a, - 0x2a, 0x99, 0x4a, 0xd7, 0xae, 0x86, 0x06, 0x5b, 0x94, 0x0d, 0xfb, 0x5d, 0x81, 0x38, 0x67, 0x13, - 0x58, 0x20, 0xb4, 0x09, 0x73, 0xa4, 0x65, 0x29, 0x99, 0x9a, 0xd4, 0x37, 0x70, 0x36, 0x49, 0x6a, - 0x43, 0x40, 0x60, 0x0d, 0xed, 0xc8, 0xc0, 0xc2, 0xdf, 0x71, 0xb0, 0x4c, 0x4b, 0x5e, 0x7e, 0x75, - 0x1c, 0xd5, 0xba, 0x71, 0x6b, 0x9c, 0xef, 0x4a, 0x0c, 0x65, 0xf8, 0xbe, 0x32, 0xfe, 0x2c, 0xac, - 0xf8, 0xe7, 0x63, 0x69, 0xfe, 0x2f, 0x63, 0xb0, 0x64, 0xc5, 0x67, 0xf6, 0xc0, 0x65, 0x87, 0xd0, - 0x13, 0x9c, 0xa4, 0x6f, 0x33, 0x13, 0x81, 0xcd, 0xdc, 0xf7, 0x27, 0xd1, 0x77, 0xdd, 0x11, 0xa6, - 0x7f, 0x05, 0xef, 0x6b, 0x2f, 0xff, 0x92, 0x83, 0x65, 0xdf, 0x7c, 0xcc, 0x5e, 0x3e, 0xf1, 0x67, - 0x05, 0xb7, 0x22, 0xe4, 0x7b, 0xa7, 0xbc, 0xe0, 0xb1, 0x1d, 0x8f, 0x4f, 0x66, 0x96, 0xff, 0x1c, - 0x83, 0xf5, 0xc1, 0xa5, 0x46, 0x1e, 0x0d, 0xb4, 0x26, 0x28, 0x6b, 0x5d, 0xac, 0x37, 0xff, 0x99, - 0xdf, 0xe1, 0x6e, 0x07, 0xef, 0xd9, 0x10, 0x91, 0x86, 0x39, 0xde, 0xd0, 0x6a, 0x70, 0x62, 0xd2, - 0x6a, 0xf0, 0x85, 0x34, 0xe0, 0xf7, 0xdc, 0x85, 0x6e, 0xaf, 0xf8, 0x4c, 0x13, 0xc6, 0xec, 0x18, - 0x3d, 0x81, 0x6b, 0x24, 0x05, 0x70, 0xde, 0xbc, 0xd8, 0x9d, 0x78, 0xea, 0x12, 0x67, 0xc4, 0x65, - 0x6b, 0xd8, 0x79, 0xe8, 0xc1, 0xba, 0x24, 0x2d, 0xe1, 0xdb, 0x04, 0xac, 0x58, 0x29, 0x42, 0xdd, - 0x94, 0xdb, 0x93, 0xf4, 0x0f, 0x7e, 0x3b, 0x58, 0x8e, 0x8d, 0x79, 0x8f, 0x25, 0x9c, 0xeb, 0x38, - 0x55, 0x58, 0x94, 0x83, 0x45, 0xc3, 0x94, 0xdb, 0xc4, 0x1d, 0xc8, 0x7a, 0x1b, 0x9b, 0x52, 0x4f, - 0x36, 0xdf, 0x32, 0x5b, 0xbf, 0xca, 0x86, 0x1a, 0x64, 0xe4, 0x50, 0x36, 0xdf, 0x5e, 0xd2, 0x41, - 0xa2, 0x1f, 0xfb, 0x9d, 0xc2, 0x87, 0x23, 0xd6, 0x32, 0x44, 0xb7, 0x7e, 0x12, 0x51, 0xb2, 0x7f, - 0x34, 0x82, 0xe5, 0xe8, 0x52, 0xfd, 0xc5, 0x4b, 0xd4, 0xdf, 0x71, 0xb5, 0xff, 0x3a, 0x5c, 0x0b, - 0x2c, 0x9e, 0x5d, 0x21, 0x6d, 0xc8, 0x5a, 0x43, 0x47, 0xaa, 0x31, 0xa1, 0x3a, 0x46, 0x68, 0x4c, - 0x2c, 0x42, 0x63, 0x84, 0x55, 0xb8, 0x1e, 0x32, 0x11, 0x93, 0xe2, 0x6f, 0x92, 0x54, 0x8c, 0xc9, - 0x1b, 0x4f, 0x9f, 0x47, 0x59, 0xc5, 0x47, 0xee, 0x63, 0x0f, 0xed, 0xd1, 0xbc, 0x0f, 0xbb, 0xd8, - 0x80, 0xb4, 0x1b, 0x8f, 0x5d, 0x83, 0xe6, 0x08, 0xc3, 0x49, 0x5e, 0xa8, 0x1f, 0x96, 0xf2, 0xf5, - 0xc3, 0x2a, 0x03, 0xa3, 0x9a, 0xf6, 0x86, 0xb6, 0x91, 0x5b, 0x31, 0xc4, 0xac, 0xde, 0x04, 0xcc, - 0x6a, 0xc6, 0xdb, 0x64, 0x8b, 0x64, 0xfa, 0xff, 0xc0, 0xb0, 0x98, 0x52, 0x87, 0x76, 0xbf, 0x84, - 0x37, 0xc0, 0x53, 0x8d, 0x9f, 0xbc, 0x1f, 0xe5, 0x53, 0xa3, 0x98, 0x5f, 0x8d, 0x84, 0x75, 0x58, - 0x0d, 0xe5, 0xcd, 0xa6, 0xfe, 0x63, 0x8e, 0x0a, 0xe6, 0x14, 0xba, 0xea, 0xa6, 0x6c, 0x1a, 0xe3, - 0x4e, 0xcd, 0x06, 0xdd, 0x53, 0x53, 0x10, 0xd1, 0xe0, 0x09, 0x4d, 0x42, 0xf8, 0x53, 0x8e, 0xee, - 0x83, 0x5f, 0x16, 0x76, 0xdb, 0xde, 0x85, 0x64, 0x9f, 0xd4, 0xf2, 0x69, 0xd4, 0xb5, 0xe8, 0x35, - 0x82, 0x23, 0x6b, 0x48, 0xa4, 0x18, 0x97, 0x56, 0x1d, 0x15, 0x7e, 0xc9, 0x41, 0xda, 0xc5, 0x1f, - 0xad, 0xc1, 0xac, 0x53, 0xfe, 0xb1, 0xf3, 0x1d, 0x07, 0x60, 0x1d, 0xbf, 0xa9, 0x99, 0x72, 0x87, - 0xbd, 0x33, 0xa1, 0x1f, 0x56, 0x8a, 0xda, 0x37, 0x30, 0x0d, 0x87, 0xe3, 0x22, 0xf9, 0x8d, 0xee, - 0x43, 0xa2, 0xaf, 0x2a, 0x26, 0x31, 0xfb, 0x05, 0xbf, 0x3d, 0x93, 0xa9, 0x72, 0x47, 0xaa, 0x62, - 0x8a, 0x04, 0x4b, 0xb8, 0x07, 0x09, 0xeb, 0xcb, 0x5b, 0x81, 0x98, 0x85, 0x64, 0xe1, 0x75, 0xa3, - 0x54, 0xcf, 0x70, 0x08, 0x20, 0x55, 0xa6, 0xf9, 0x7a, 0x4c, 0xa8, 0xd8, 0x0f, 0x4e, 0x9d, 0x45, - 0x58, 0x2e, 0x40, 0x3e, 0x56, 0x35, 0xbd, 0x2b, 0x77, 0x88, 0xcc, 0x33, 0xa2, 0xf3, 0x1d, 0xdd, - 0x22, 0xa1, 0x05, 0xc5, 0x35, 0xe7, 0x44, 0xc2, 0xea, 0x45, 0x5f, 0x50, 0xdd, 0x8a, 0xaa, 0x14, - 0xe5, 0x43, 0x2b, 0x45, 0xeb, 0x9e, 0x5b, 0x76, 0x44, 0x8d, 0xe8, 0x57, 0x31, 0x58, 0x0e, 0xc5, - 0x43, 0x8f, 0xdd, 0xd5, 0xa1, 0x9b, 0x43, 0x79, 0xba, 0xeb, 0x42, 0xff, 0xcd, 0xd1, 0xba, 0xd0, - 0x8e, 0xa7, 0x2e, 0x74, 0x67, 0x24, 0xbd, 0xbb, 0x22, 0xf4, 0x57, 0x5c, 0x44, 0x45, 0xa8, 0xde, - 0xc8, 0xef, 0x95, 0xa4, 0xa3, 0x2a, 0xfd, 0xeb, 0x54, 0x84, 0x96, 0x20, 0x33, 0xa8, 0x93, 0x48, - 0xf5, 0x46, 0xbe, 0x51, 0xcf, 0xc4, 0x82, 0xd5, 0x98, 0x78, 0x68, 0xad, 0x25, 0x31, 0xba, 0xac, - 0x92, 0xa4, 0x28, 0xab, 0x80, 0x18, 0xf5, 0x41, 0xed, 0xa8, 0xda, 0x90, 0xf6, 0xc4, 0xda, 0xd1, - 0x21, 0x7b, 0x72, 0xe5, 0xd4, 0x5c, 0x96, 0x00, 0xb1, 0x23, 0x73, 0x3f, 0xa2, 0xff, 0x73, 0x0e, - 0x16, 0x3d, 0x60, 0x76, 0x82, 0xae, 0x6e, 0x37, 0xe7, 0xe9, 0x76, 0x3f, 0x84, 0x25, 0x2b, 0x6d, - 0xa4, 0xe6, 0x62, 0x48, 0x3d, 0xac, 0x93, 0x2a, 0x37, 0x53, 0xfc, 0xab, 0x5d, 0xf9, 0x8c, 0x75, - 0x02, 0x0e, 0xb1, 0x6e, 0x31, 0xbe, 0x84, 0x5a, 0xaf, 0xf0, 0x4d, 0x9c, 0x06, 0x27, 0x13, 0x27, - 0x37, 0x23, 0x1d, 0x55, 0x30, 0xfb, 0x89, 0x4f, 0x90, 0xfd, 0x44, 0xb8, 0xb9, 0xc4, 0x44, 0x11, - 0xf1, 0xe4, 0x17, 0x7b, 0x75, 0x70, 0x79, 0xd3, 0xf0, 0xf5, 0xbe, 0x5b, 0x89, 0x47, 0xa6, 0x5b, - 0xa9, 0x6f, 0x0a, 0xdc, 0xcf, 0x2e, 0x2b, 0x59, 0xce, 0xd3, 0xa0, 0xec, 0x02, 0x49, 0xd2, 0xf6, - 0xff, 0x70, 0x30, 0x53, 0x6e, 0x61, 0xd5, 0xa4, 0x6b, 0x9b, 0xf7, 0xfc, 0x9f, 0x05, 0x5a, 0x8b, - 0xf8, 0xf7, 0x0b, 0xb2, 0x30, 0x7e, 0x7d, 0xe8, 0x3f, 0x67, 0x08, 0x53, 0xe8, 0xc4, 0xf5, 0x3f, - 0x22, 0x9e, 0x76, 0xc6, 0x07, 0x01, 0xca, 0x10, 0x3f, 0xc7, 0xdf, 0x1e, 0x81, 0xe5, 0xcc, 0xf3, - 0x04, 0x92, 0xe4, 0x45, 0x3d, 0x5a, 0x72, 0x5e, 0xf5, 0xbb, 0x1e, 0xdc, 0xf3, 0xcb, 0x3e, 0xa8, - 0x4d, 0xb7, 0xfd, 0x8f, 0xb3, 0x00, 0x83, 0x5c, 0x13, 0xbd, 0x80, 0x39, 0xf7, 0xa3, 0x5e, 0xb4, - 0x3a, 0xe4, 0x49, 0x39, 0xbf, 0x16, 0x3e, 0xe8, 0xc8, 0xf4, 0x02, 0xe6, 0xdc, 0x0f, 0xb9, 0x06, - 0xcc, 0x42, 0x1e, 0x93, 0x0d, 0x98, 0x85, 0xbe, 0xfd, 0x9a, 0x42, 0x1d, 0xb8, 0x16, 0xf1, 0x94, - 0x07, 0xdd, 0x19, 0xef, 0xc1, 0x13, 0xff, 0xbd, 0x31, 0xdf, 0x04, 0x09, 0x53, 0x48, 0x87, 0xeb, - 0x91, 0x2f, 0x58, 0xd0, 0xd6, 0xb8, 0xef, 0x6b, 0xf8, 0xbb, 0x63, 0x60, 0x3a, 0x73, 0xf6, 0x81, - 0x8f, 0x6e, 0x9b, 0xa3, 0xbb, 0x63, 0xbf, 0xe7, 0xe0, 0xef, 0x8d, 0xdf, 0x85, 0x17, 0xa6, 0xd0, - 0x3e, 0xa4, 0x5d, 0xfd, 0x53, 0xc4, 0x87, 0x36, 0x55, 0x29, 0xe3, 0xd5, 0x21, 0x0d, 0x57, 0xca, - 0xc9, 0xd5, 0xd2, 0x1a, 0x70, 0x0a, 0x36, 0xe7, 0x06, 0x9c, 0x42, 0x7a, 0x60, 0xfe, 0xed, 0xf7, - 0x5d, 0xf2, 0x61, 0xdb, 0x1f, 0x1e, 0x25, 0x84, 0x6d, 0x7f, 0x44, 0xc4, 0x20, 0x4c, 0xa1, 0xcf, - 0x60, 0xc1, 0x5b, 0xa6, 0x46, 0xeb, 0x43, 0xcb, 0xed, 0xfc, 0x8d, 0xa8, 0x61, 0x37, 0x4b, 0x6f, - 0x55, 0x74, 0xc0, 0x32, 0xb4, 0x3a, 0x3b, 0x60, 0x19, 0x51, 0x4c, 0x9d, 0xb2, 0xfc, 0x93, 0xa7, - 0xd6, 0x37, 0xf0, 0x4f, 0x61, 0x25, 0xca, 0x81, 0x7f, 0x0a, 0x2d, 0x10, 0x0a, 0x53, 0x48, 0x81, - 0x95, 0xf0, 0x52, 0x13, 0xba, 0x3d, 0x56, 0x25, 0x8d, 0xbf, 0x33, 0x0a, 0xcd, 0x99, 0xaa, 0x09, - 0x8b, 0x21, 0xed, 0x6d, 0x24, 0x0c, 0xed, 0x7d, 0xd3, 0x49, 0x6e, 0x8d, 0xd1, 0x1f, 0x17, 0xac, - 0x68, 0x63, 0xfb, 0xdf, 0x92, 0x90, 0x20, 0xd7, 0x7e, 0x03, 0xae, 0xf8, 0xea, 0x09, 0xe8, 0xc6, - 0xf0, 0x2a, 0x0b, 0xbf, 0x11, 0x39, 0xee, 0xac, 0xe1, 0x0d, 0x5c, 0x0d, 0x54, 0x08, 0xd0, 0xa6, - 0x9b, 0x2e, 0xac, 0x4a, 0xc1, 0xdf, 0x1c, 0x82, 0xe1, 0xe7, 0xed, 0xf5, 0x6d, 0x9b, 0xa3, 0x52, - 0x58, 0x2f, 0xef, 0x28, 0x7f, 0xf6, 0x05, 0x8d, 0xb2, 0xfc, 0x9e, 0x4c, 0xf0, 0xca, 0x15, 0xea, - 0xc3, 0x6e, 0x0d, 0xc5, 0x71, 0x66, 0xf8, 0xdc, 0x09, 0xef, 0x5c, 0x19, 0x14, 0xf2, 0x08, 0x17, - 0x9a, 0xe9, 0xf1, 0xc2, 0x30, 0x14, 0x87, 0xfd, 0x2b, 0xc8, 0xf8, 0xef, 0x79, 0xb4, 0x31, 0x22, - 0xec, 0xe0, 0x37, 0xa3, 0x11, 0xfc, 0x3b, 0xe3, 0x77, 0x32, 0x7e, 0xa9, 0xc2, 0xdc, 0xcb, 0xad, - 0xa1, 0x38, 0x6e, 0xb7, 0xe8, 0x8a, 0x70, 0x07, 0x6e, 0x31, 0x18, 0x0d, 0x0f, 0xdc, 0x62, 0x48, - 0x48, 0x2c, 0x4c, 0xed, 0x3c, 0x03, 0x90, 0x3b, 0xbd, 0xb7, 0xb2, 0x84, 0xd5, 0x7e, 0x17, 0xad, - 0x05, 0x3a, 0x50, 0x25, 0xb5, 0xdf, 0xad, 0xf5, 0xac, 0xcc, 0xcb, 0xc8, 0xfe, 0x7c, 0x86, 0xe4, - 0x5b, 0xb3, 0x84, 0xc0, 0x1a, 0xd8, 0xa9, 0x40, 0x66, 0x40, 0x2d, 0x91, 0x10, 0x0a, 0xdd, 0x0c, - 0xe5, 0x41, 0xfa, 0xf9, 0x3e, 0x46, 0x0b, 0x0e, 0x23, 0x32, 0xba, 0xf3, 0x09, 0x40, 0xd3, 0x50, - 0x24, 0x1a, 0xc3, 0xa1, 0xf5, 0x00, 0x9f, 0xe7, 0x0a, 0xee, 0xb4, 0x6c, 0x1e, 0x7f, 0xc1, 0x84, - 0x69, 0x1a, 0x0a, 0x8d, 0xf4, 0x76, 0x7e, 0x04, 0x69, 0x2a, 0xcc, 0x89, 0x85, 0x37, 0x8a, 0x9e, - 0xc9, 0x40, 0x57, 0x4f, 0x46, 0x76, 0x4a, 0x30, 0x4f, 0x19, 0xb0, 0xac, 0x11, 0x6d, 0x04, 0x58, - 0x1c, 0xd0, 0x11, 0x1f, 0x93, 0x39, 0x42, 0xc6, 0xc6, 0x76, 0x0a, 0x30, 0x67, 0xb3, 0x31, 0xdf, - 0x6a, 0x2d, 0x74, 0x23, 0x84, 0x8b, 0x35, 0xe0, 0x63, 0x92, 0x66, 0x4c, 0xac, 0xa1, 0x81, 0x28, - 0xf6, 0x3f, 0x9b, 0x06, 0x45, 0x61, 0x99, 0x5d, 0xa8, 0x28, 0x6c, 0xac, 0x90, 0x7c, 0x13, 0x6f, - 0x1a, 0xca, 0x71, 0x8a, 0x10, 0xfd, 0xe0, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0x5e, 0xa7, 0xda, - 0x94, 0x19, 0x3d, 0x00, 0x00, + 0xd4, 0x34, 0x29, 0x7b, 0xed, 0x64, 0xd0, 0xd3, 0x22, 0x4b, 0x72, 0x63, 0xc8, 0x6e, 0x4e, 0x77, + 0x53, 0x91, 0x06, 0x08, 0xb2, 0x48, 0x90, 0x43, 0x90, 0x4b, 0x6e, 0x3b, 0xb9, 0x2d, 0x92, 0x3d, + 0x66, 0xb1, 0x08, 0x82, 0x20, 0xc7, 0x00, 0x39, 0x06, 0xc8, 0x26, 0xb7, 0x04, 0xb9, 0xcc, 0x2d, + 0x08, 0x82, 0x04, 0x98, 0x4b, 0x2e, 0x39, 0x04, 0x41, 0x57, 0x55, 0x37, 0xfb, 0xcb, 0x8f, 0xa5, + 0xc1, 0x1c, 0xf6, 0x24, 0xf6, 0xab, 0xf7, 0x5e, 0xbd, 0xaa, 0x7a, 0xef, 0xd5, 0xfb, 0x94, 0xe0, + 0xf1, 0x89, 0x62, 0xbe, 0xed, 0x1f, 0xe5, 0x5b, 0x5a, 0xf7, 0x61, 0x4b, 0x53, 0x4d, 0x59, 0x51, + 0xb1, 0xfe, 0xc0, 0x30, 0x35, 0x5d, 0x3e, 0xc1, 0x0f, 0x14, 0xd5, 0xc4, 0xfa, 0xb1, 0xdc, 0xc2, + 0x0f, 0x8d, 0x1e, 0x6e, 0x3d, 0x6c, 0x19, 0x4a, 0xbe, 0xa7, 0x6b, 0xa6, 0x86, 0x52, 0xd6, 0xcf, + 0xd3, 0x47, 0xfc, 0xc6, 0x89, 0xa6, 0x9d, 0x74, 0xf0, 0x43, 0x02, 0x3d, 0xea, 0x1f, 0x3f, 0x6c, + 0x63, 0xa3, 0xa5, 0x2b, 0x3d, 0x53, 0xd3, 0x29, 0x26, 0xbf, 0xee, 0xc7, 0x30, 0x95, 0x2e, 0x36, + 0x4c, 0xb9, 0xdb, 0x63, 0x08, 0x37, 0xfc, 0x08, 0xbf, 0xab, 0xcb, 0xbd, 0x1e, 0xd6, 0x0d, 0x3a, + 0x2e, 0x2c, 0xc3, 0xe2, 0x2e, 0x36, 0x0f, 0x3a, 0xfd, 0x13, 0x45, 0xad, 0xa8, 0xc7, 0x9a, 0x88, + 0xbf, 0xe8, 0x63, 0xc3, 0x14, 0xfe, 0x95, 0x83, 0x25, 0xdf, 0x80, 0xd1, 0xd3, 0x54, 0x03, 0x23, + 0x04, 0x09, 0x55, 0xee, 0xe2, 0x1c, 0xb7, 0xc1, 0x6d, 0xce, 0x88, 0xe4, 0x37, 0xba, 0x0d, 0xf3, + 0xa7, 0x58, 0x6d, 0x6b, 0xba, 0x74, 0x8a, 0x75, 0x43, 0xd1, 0xd4, 0x5c, 0x8c, 0x8c, 0xce, 0x51, + 0xe8, 0x4b, 0x0a, 0x44, 0xbb, 0x90, 0xee, 0xca, 0xaa, 0x72, 0x8c, 0x0d, 0x33, 0x17, 0xdf, 0x88, + 0x6f, 0x66, 0xb6, 0xde, 0xcf, 0xd3, 0xa5, 0xe6, 0x43, 0xe7, 0xca, 0xef, 0x33, 0xec, 0xb2, 0x6a, + 0xea, 0xe7, 0xa2, 0x43, 0xcc, 0x3f, 0x85, 0x39, 0xcf, 0x10, 0xca, 0x42, 0xfc, 0x73, 0x7c, 0xce, + 0x64, 0xb2, 0x7e, 0xa2, 0x45, 0x48, 0x9e, 0xca, 0x9d, 0x3e, 0x66, 0x92, 0xd0, 0x8f, 0xed, 0xd8, + 0x6f, 0x71, 0xc2, 0x0d, 0x58, 0x75, 0x66, 0x2b, 0xc9, 0x3d, 0xf9, 0x48, 0xe9, 0x28, 0xa6, 0x82, + 0x0d, 0x7b, 0xe9, 0x9f, 0xc2, 0x5a, 0xc4, 0x38, 0xdb, 0x81, 0x67, 0x30, 0xdb, 0x72, 0xc1, 0x73, + 0x1c, 0x59, 0x4a, 0xce, 0x5e, 0x8a, 0x8f, 0xf2, 0x5c, 0xf4, 0x60, 0x0b, 0xbf, 0x8e, 0x43, 0xd6, + 0x8f, 0x82, 0x9e, 0xc1, 0xb4, 0x81, 0xf5, 0x53, 0xa5, 0x45, 0xf7, 0x35, 0xb3, 0xb5, 0x11, 0xc5, + 0x2d, 0xdf, 0xa0, 0x78, 0x7b, 0x53, 0xa2, 0x4d, 0x82, 0x0e, 0x21, 0x7b, 0xaa, 0x75, 0xfa, 0x5d, + 0x2c, 0xe1, 0xb3, 0x9e, 0xac, 0x3a, 0x07, 0x90, 0xd9, 0xda, 0x8c, 0x64, 0xf3, 0x92, 0x10, 0x94, + 0x6d, 0xfc, 0xbd, 0x29, 0xf1, 0xca, 0xa9, 0x17, 0xc4, 0xff, 0x8c, 0x83, 0x69, 0x36, 0x1b, 0xfa, + 0x10, 0x12, 0xe6, 0x79, 0x8f, 0x4a, 0x37, 0xbf, 0x75, 0x7b, 0x94, 0x74, 0xf9, 0xe6, 0x79, 0x0f, + 0x8b, 0x84, 0x44, 0xf8, 0x04, 0x12, 0xd6, 0x17, 0xca, 0xc0, 0xf4, 0x61, 0xed, 0x45, 0xad, 0xfe, + 0xaa, 0x96, 0x9d, 0x42, 0xcb, 0x80, 0x4a, 0xf5, 0x5a, 0x53, 0xac, 0x57, 0xab, 0x65, 0x51, 0x6a, + 0x94, 0xc5, 0x97, 0x95, 0x52, 0x39, 0xcb, 0xa1, 0xf7, 0x60, 0xe3, 0x65, 0xbd, 0x7a, 0xb8, 0x5f, + 0x96, 0x0a, 0xa5, 0x52, 0xb9, 0xd1, 0xa8, 0x14, 0x2b, 0xd5, 0x4a, 0xf3, 0xb5, 0x54, 0xaa, 0xd7, + 0x1a, 0x4d, 0xb1, 0x50, 0xa9, 0x35, 0x1b, 0xd9, 0x18, 0xff, 0x07, 0x1c, 0x5c, 0xf1, 0x2d, 0x00, + 0x15, 0x3c, 0x12, 0x3e, 0x18, 0x77, 0xe1, 0x6e, 0x49, 0xef, 0x87, 0x49, 0x0a, 0x90, 0xaa, 0xd7, + 0xaa, 0x95, 0x9a, 0x25, 0x5d, 0x06, 0xa6, 0xeb, 0xcf, 0x9f, 0x93, 0x8f, 0x58, 0x31, 0x45, 0x27, + 0x14, 0xe6, 0x61, 0xf6, 0x40, 0xd7, 0x8e, 0xb0, 0xad, 0x3f, 0x05, 0x98, 0x63, 0xdf, 0x4c, 0x5f, + 0xbe, 0x0f, 0x49, 0x1d, 0xcb, 0xed, 0x73, 0x76, 0xb4, 0x7c, 0x9e, 0xda, 0x64, 0xde, 0xb6, 0xc9, + 0x7c, 0x51, 0xd3, 0x3a, 0x2f, 0x2d, 0xfd, 0x14, 0x29, 0xa2, 0xf0, 0x4d, 0x02, 0x16, 0x4a, 0x3a, + 0x96, 0x4d, 0x4c, 0xa5, 0x65, 0xac, 0x43, 0x6d, 0xef, 0x19, 0xcc, 0x5b, 0xfa, 0xd5, 0x52, 0xcc, + 0x73, 0x49, 0x97, 0xd5, 0x13, 0xcc, 0x8e, 0x7e, 0xc9, 0xde, 0x81, 0x12, 0x1b, 0x15, 0xad, 0x41, + 0x71, 0xae, 0xe5, 0xfe, 0x44, 0x15, 0x58, 0x60, 0xaa, 0xe3, 0x51, 0xe9, 0xb8, 0x57, 0xa5, 0xa9, + 0x14, 0x2e, 0x95, 0x46, 0xa7, 0x5e, 0x88, 0x82, 0x0d, 0xf4, 0x02, 0xa0, 0x27, 0xeb, 0x72, 0x17, + 0x9b, 0x58, 0x37, 0x72, 0x09, 0xaf, 0x7d, 0x87, 0xac, 0x26, 0x7f, 0xe0, 0x60, 0x53, 0xfb, 0x76, + 0x91, 0xa3, 0x5d, 0xcb, 0x20, 0x5a, 0x3a, 0x36, 0x8d, 0x5c, 0x92, 0x70, 0xda, 0x1c, 0xc6, 0xa9, + 0x41, 0x51, 0x09, 0x9b, 0x62, 0xfc, 0xab, 0x22, 0x27, 0xda, 0xd4, 0xa8, 0x0e, 0x4b, 0xf6, 0x02, + 0x35, 0xd5, 0xc4, 0xaa, 0x29, 0x19, 0x5a, 0x5f, 0x6f, 0xe1, 0x5c, 0x8a, 0xec, 0xd2, 0x8a, 0x6f, + 0x89, 0x14, 0xa7, 0x41, 0x50, 0x44, 0xb6, 0x35, 0x1e, 0x20, 0x7a, 0x03, 0xbc, 0xdc, 0x6a, 0x61, + 0xc3, 0x50, 0xe8, 0x5e, 0x48, 0x3a, 0xfe, 0xa2, 0xaf, 0xe8, 0xb8, 0x8b, 0x55, 0xd3, 0xc8, 0x4d, + 0x7b, 0xb9, 0x36, 0xb5, 0x9e, 0xd6, 0xd1, 0x4e, 0xce, 0xc5, 0x01, 0x8e, 0x78, 0xdd, 0x43, 0xee, + 0x1a, 0x31, 0xf8, 0x8f, 0xe0, 0x8a, 0x6f, 0x53, 0x26, 0xf1, 0x6c, 0xfc, 0x36, 0xcc, 0xba, 0x77, + 0x62, 0x22, 0xaf, 0xf8, 0x27, 0x31, 0x58, 0x08, 0xd9, 0x03, 0xb4, 0x07, 0x69, 0x43, 0x95, 0x7b, + 0xc6, 0x5b, 0xcd, 0x64, 0xfa, 0x7b, 0x6f, 0xc8, 0x96, 0xe5, 0x1b, 0x0c, 0x97, 0x7e, 0xee, 0x4d, + 0x89, 0x0e, 0x35, 0x2a, 0x42, 0x8a, 0xee, 0xa7, 0xdf, 0x37, 0x85, 0xf1, 0xa1, 0x30, 0x87, 0x0b, + 0xa3, 0xe4, 0x1f, 0xc1, 0xbc, 0x77, 0x06, 0xb4, 0x0e, 0x19, 0x7b, 0x06, 0x49, 0x69, 0xb3, 0xb5, + 0x82, 0x0d, 0xaa, 0xb4, 0xf9, 0xf7, 0x61, 0xd6, 0xcd, 0x0c, 0xad, 0xc0, 0x0c, 0x53, 0x08, 0x07, + 0x3d, 0x4d, 0x01, 0x95, 0xb6, 0x63, 0xd3, 0x3f, 0x84, 0x45, 0xaf, 0x9e, 0x31, 0x53, 0xbe, 0xe3, + 0xac, 0x81, 0xee, 0xc5, 0xbc, 0x77, 0x0d, 0xb6, 0x9c, 0xc2, 0x2f, 0x92, 0x90, 0xf5, 0x1b, 0x0d, + 0x7a, 0x06, 0xc9, 0xa3, 0x8e, 0xd6, 0xfa, 0x9c, 0xd1, 0xbe, 0x17, 0x65, 0x5d, 0xf9, 0xa2, 0x85, + 0x45, 0xa1, 0x7b, 0x53, 0x22, 0x25, 0xb2, 0xa8, 0xbb, 0x5a, 0x5f, 0x35, 0xd9, 0xee, 0x45, 0x53, + 0xef, 0x5b, 0x58, 0x03, 0x6a, 0x42, 0x84, 0x76, 0x20, 0x43, 0xd5, 0x4e, 0xea, 0x6a, 0x6d, 0x9c, + 0x8b, 0x13, 0x1e, 0xb7, 0x22, 0x79, 0x14, 0x08, 0xee, 0xbe, 0xd6, 0xc6, 0x22, 0xc8, 0xce, 0x6f, + 0x7e, 0x0e, 0x32, 0x2e, 0xd9, 0xf8, 0x2f, 0x21, 0xe3, 0x9a, 0x0c, 0x5d, 0x83, 0xe9, 0x63, 0x43, + 0x72, 0x9c, 0xf0, 0x8c, 0x98, 0x3a, 0x36, 0x88, 0x3f, 0x5d, 0x87, 0x0c, 0x91, 0x42, 0x3a, 0xee, + 0xc8, 0x27, 0x46, 0x2e, 0xb6, 0x11, 0xb7, 0xce, 0x88, 0x80, 0x9e, 0x5b, 0x10, 0xf4, 0x08, 0x98, + 0x43, 0x91, 0x28, 0xde, 0x89, 0xae, 0xf5, 0x7b, 0x44, 0xc8, 0x99, 0x62, 0xfc, 0xe7, 0x45, 0x4e, + 0x64, 0xf7, 0x1b, 0x99, 0x6d, 0xd7, 0x1a, 0xe4, 0xff, 0x3a, 0x06, 0x30, 0x90, 0x12, 0x3d, 0x83, + 0x04, 0x59, 0x18, 0xf5, 0xfe, 0x9b, 0x63, 0x2c, 0x2c, 0x4f, 0x56, 0x47, 0xa8, 0x84, 0x7f, 0xe7, + 0x20, 0x41, 0xd8, 0xf8, 0xef, 0xa8, 0x46, 0xa5, 0xb6, 0x5b, 0x2d, 0x4b, 0xb5, 0xfa, 0x4e, 0x59, + 0x7a, 0x25, 0x56, 0x9a, 0x65, 0x31, 0xcb, 0xa1, 0x15, 0xb8, 0xe6, 0x86, 0x8b, 0xe5, 0xc2, 0x4e, + 0x59, 0x94, 0xea, 0xb5, 0xea, 0xeb, 0x6c, 0x0c, 0xf1, 0xb0, 0xbc, 0x7f, 0x58, 0x6d, 0x56, 0x82, + 0x63, 0x71, 0xb4, 0x0a, 0x39, 0xd7, 0x18, 0xe3, 0xc1, 0xd8, 0x26, 0x2c, 0xb6, 0xae, 0x51, 0xfa, + 0x93, 0x0d, 0x26, 0x91, 0x00, 0xd7, 0xdd, 0x73, 0x7a, 0x69, 0x53, 0xbc, 0xb5, 0x49, 0xe8, 0x26, + 0xe4, 0xdc, 0x38, 0x1e, 0x0e, 0xd3, 0x04, 0xa5, 0x38, 0xe7, 0xa8, 0x01, 0x51, 0xf3, 0x57, 0x30, + 0xe7, 0xb9, 0x1d, 0xac, 0x40, 0x8e, 0xb9, 0xb3, 0xb6, 0x74, 0x74, 0x6e, 0x92, 0xe0, 0x86, 0xdb, + 0x8c, 0x8b, 0x73, 0x36, 0xb4, 0x68, 0x01, 0xad, 0x03, 0xed, 0x28, 0x5d, 0xc5, 0x64, 0x38, 0x31, + 0x82, 0x03, 0x04, 0x44, 0x10, 0x84, 0xaf, 0x63, 0x90, 0x62, 0x5a, 0x71, 0xdb, 0x75, 0x3f, 0x79, + 0x58, 0xda, 0x50, 0xca, 0xd2, 0x63, 0x96, 0x31, 0xaf, 0x59, 0xa2, 0x3d, 0x98, 0x77, 0x3b, 0xf1, + 0x33, 0x3b, 0x7c, 0xbc, 0xe9, 0x3d, 0x67, 0xb7, 0x27, 0x39, 0x63, 0x41, 0xe3, 0xdc, 0xa9, 0x1b, + 0x86, 0x8a, 0x30, 0xef, 0xbb, 0x07, 0x12, 0xa3, 0xef, 0x81, 0xb9, 0x96, 0xc7, 0x25, 0x16, 0x60, + 0xc1, 0x76, 0xe1, 0x1d, 0x2c, 0x99, 0xcc, 0xc5, 0xb3, 0x7b, 0x2a, 0x1b, 0x70, 0xfd, 0x68, 0x80, + 0x6c, 0xc3, 0xf8, 0x8f, 0x01, 0x05, 0x65, 0x9d, 0xc8, 0x5f, 0xf7, 0x61, 0x21, 0xe4, 0x72, 0x41, + 0x79, 0x98, 0x21, 0x47, 0x65, 0x28, 0x26, 0x66, 0x81, 0x69, 0x50, 0xa2, 0x01, 0x8a, 0x85, 0xdf, + 0xd3, 0xf1, 0x31, 0xd6, 0x75, 0xdc, 0x26, 0x86, 0x19, 0x8a, 0xef, 0xa0, 0x08, 0x7f, 0xc8, 0x41, + 0xda, 0x86, 0xa3, 0x6d, 0x48, 0x1b, 0xf8, 0x84, 0x5e, 0x7c, 0x74, 0xae, 0x1b, 0x7e, 0xda, 0x7c, + 0x83, 0x21, 0xb0, 0x10, 0xde, 0xc6, 0xb7, 0x42, 0x78, 0xcf, 0xd0, 0x44, 0x8b, 0xff, 0x5b, 0x0e, + 0x16, 0x76, 0x70, 0x07, 0xfb, 0xe3, 0xa3, 0x61, 0xbe, 0xdd, 0x1d, 0x52, 0xc4, 0xbc, 0x21, 0x45, + 0x08, 0xab, 0x21, 0x21, 0xc5, 0x85, 0xae, 0xd9, 0x65, 0x58, 0xf4, 0xce, 0x46, 0x2f, 0x16, 0xe1, + 0xbf, 0xe3, 0x70, 0xc3, 0xd2, 0x05, 0x5d, 0xeb, 0x74, 0xb0, 0x7e, 0xd0, 0x3f, 0xea, 0x28, 0xc6, + 0xdb, 0x09, 0x16, 0x77, 0x0d, 0xa6, 0x55, 0xad, 0xed, 0x32, 0x9e, 0x94, 0xf5, 0x59, 0x69, 0xa3, + 0x32, 0x5c, 0xf5, 0x07, 0x78, 0xe7, 0xcc, 0xfd, 0x47, 0x87, 0x77, 0xd9, 0x53, 0xff, 0xdd, 0xc5, + 0x43, 0xda, 0x0a, 0x4d, 0x35, 0xb5, 0x73, 0x4e, 0x2c, 0x26, 0x2d, 0x3a, 0xdf, 0x48, 0xf4, 0xc7, + 0x6a, 0x3f, 0x70, 0x62, 0xb5, 0xa1, 0x2b, 0x1a, 0x16, 0xb6, 0x7d, 0x16, 0xb0, 0xf8, 0x14, 0x61, + 0xfd, 0xe1, 0x98, 0xac, 0x47, 0x7a, 0x82, 0x8b, 0x9c, 0xe2, 0x25, 0x98, 0xef, 0x3f, 0x70, 0xb0, + 0x1e, 0xb9, 0x04, 0x16, 0x6c, 0xb4, 0xe1, 0x4a, 0x8f, 0x0e, 0x38, 0x9b, 0x40, 0xad, 0xec, 0xe9, + 0xc8, 0x4d, 0x60, 0xf9, 0x33, 0x83, 0x7a, 0xb6, 0x61, 0xbe, 0xe7, 0x01, 0xf2, 0x05, 0x58, 0x08, + 0x41, 0x9b, 0x68, 0x31, 0x3f, 0x8d, 0xc1, 0xc6, 0x40, 0x94, 0x43, 0xb5, 0x77, 0x79, 0xea, 0xdb, + 0x1c, 0xe8, 0x16, 0x75, 0xf9, 0x8f, 0x83, 0x6b, 0x0f, 0x9f, 0x70, 0x98, 0x76, 0x2d, 0x42, 0xf2, + 0x18, 0xab, 0xcc, 0xf9, 0xa7, 0x45, 0xfa, 0x71, 0x21, 0xbb, 0xbe, 0x05, 0x37, 0x87, 0x08, 0xc4, + 0x8c, 0xfc, 0xeb, 0x04, 0xdc, 0x7c, 0x29, 0x77, 0x94, 0xb6, 0x13, 0x58, 0x86, 0xd4, 0x1f, 0x86, + 0x6f, 0x54, 0x2b, 0x60, 0x17, 0xd4, 0x97, 0x3d, 0x73, 0x6c, 0x79, 0x14, 0xff, 0x31, 0x2e, 0xc9, + 0x4b, 0x4c, 0x0a, 0x5f, 0x87, 0x24, 0x85, 0x1f, 0x8e, 0x2f, 0xeb, 0xb0, 0x14, 0xf1, 0xd0, 0xef, + 0x76, 0x9e, 0x8c, 0xcf, 0x77, 0x88, 0x77, 0xbf, 0xb0, 0x6d, 0x7f, 0x97, 0x59, 0xdc, 0xdf, 0x27, + 0x40, 0x18, 0xb6, 0x7a, 0xe6, 0x59, 0x44, 0x98, 0x69, 0x69, 0xea, 0xb1, 0xa2, 0x77, 0x71, 0x9b, + 0x65, 0x23, 0x1f, 0x8c, 0xb3, 0x79, 0xcc, 0xad, 0x94, 0x6c, 0x5a, 0x71, 0xc0, 0x06, 0xe5, 0x60, + 0xba, 0x8b, 0x0d, 0x43, 0x3e, 0xb1, 0xc5, 0xb2, 0x3f, 0xf9, 0x5f, 0xc6, 0x61, 0xc6, 0x21, 0x41, + 0x6a, 0x40, 0x83, 0xa9, 0x53, 0xdb, 0x7d, 0x17, 0x01, 0xde, 0x5d, 0x99, 0x63, 0xef, 0xa0, 0xcc, + 0x6d, 0x8f, 0x32, 0x53, 0x73, 0xd8, 0x79, 0x27, 0xb1, 0x87, 0xe8, 0xf5, 0x77, 0xae, 0x80, 0xc2, + 0xef, 0x00, 0xaa, 0x2a, 0x06, 0xcb, 0xea, 0x1c, 0xb7, 0x64, 0x25, 0x71, 0xf2, 0x99, 0x84, 0x55, + 0x53, 0x57, 0x58, 0x10, 0x9f, 0x14, 0xa1, 0x2b, 0x9f, 0x95, 0x29, 0xc4, 0x0a, 0xf4, 0x0d, 0x53, + 0xd6, 0x4d, 0x45, 0x3d, 0x91, 0x4c, 0xed, 0x73, 0xec, 0x14, 0x81, 0x6d, 0x68, 0xd3, 0x02, 0x0a, + 0xff, 0x15, 0x83, 0x05, 0x0f, 0x7b, 0xa6, 0x93, 0x4f, 0x61, 0x7a, 0xc0, 0xdb, 0x13, 0xdc, 0x87, + 0x60, 0xe7, 0xe9, 0xb6, 0xd9, 0x14, 0x68, 0x0d, 0x40, 0xc5, 0x67, 0xa6, 0x67, 0xde, 0x19, 0x0b, + 0x42, 0xe6, 0xe4, 0xff, 0x88, 0x73, 0x8a, 0x00, 0xa6, 0x6c, 0xf6, 0x0d, 0x74, 0x1f, 0x10, 0x73, + 0xd1, 0xb8, 0x2d, 0xb1, 0x9b, 0x87, 0xce, 0x3b, 0x23, 0x66, 0x9d, 0x91, 0x1a, 0xb9, 0x83, 0x0c, + 0xb4, 0xeb, 0xd4, 0x57, 0x5b, 0x9a, 0xda, 0x56, 0xcc, 0x41, 0x7d, 0xf5, 0x5a, 0x20, 0x6d, 0xa0, + 0xc3, 0x34, 0x6b, 0xbd, 0x72, 0xea, 0x85, 0xf2, 0x5f, 0x40, 0x92, 0x1e, 0xc7, 0x98, 0x75, 0x04, + 0xf4, 0x31, 0xa4, 0x0c, 0x22, 0xb1, 0xbf, 0x66, 0x12, 0xb6, 0x27, 0xee, 0x15, 0x8a, 0x8c, 0x4e, + 0xf8, 0x21, 0xf0, 0x83, 0x8b, 0x69, 0x17, 0x9b, 0xe3, 0x5f, 0xca, 0xdb, 0xd6, 0x1a, 0x84, 0x9f, + 0xc5, 0x60, 0x25, 0x94, 0xc1, 0x64, 0x15, 0x11, 0xb4, 0xe7, 0x5b, 0xc9, 0xf7, 0x83, 0xf7, 0x78, + 0x80, 0x79, 0xe8, 0x8a, 0xf8, 0x9f, 0x5e, 0xec, 0x30, 0x8b, 0x13, 0x1f, 0x66, 0xe0, 0x1c, 0xe9, + 0xce, 0xfc, 0x32, 0x06, 0x68, 0x17, 0x9b, 0x4e, 0x02, 0xcd, 0xb6, 0x34, 0xc2, 0xdf, 0x70, 0xef, + 0xe0, 0x6f, 0x7e, 0xec, 0xf1, 0x37, 0xd4, 0x63, 0xdd, 0x73, 0x75, 0x4c, 0x7c, 0x53, 0x0f, 0xbd, + 0x2d, 0x23, 0x92, 0x56, 0x9a, 0x09, 0x8c, 0x97, 0xb4, 0x5e, 0xd0, 0xad, 0xfc, 0x07, 0x07, 0x0b, + 0x1e, 0xa1, 0x99, 0x06, 0x3d, 0x00, 0x24, 0x9f, 0xca, 0x4a, 0x47, 0xb6, 0x04, 0xb3, 0x8b, 0x02, + 0xac, 0x48, 0x70, 0xd5, 0x19, 0xb1, 0xc9, 0xd0, 0x01, 0x2c, 0x74, 0xe5, 0x33, 0xa5, 0xdb, 0xef, + 0x4a, 0x6c, 0x9f, 0x0d, 0xe5, 0x4b, 0xbb, 0xa6, 0xb8, 0x12, 0xa8, 0xad, 0x57, 0x54, 0xf3, 0xc9, + 0x07, 0xa4, 0xb8, 0x4e, 0x6d, 0xf2, 0x2a, 0x23, 0x66, 0x1a, 0xa4, 0x7c, 0x89, 0x09, 0x47, 0x45, + 0x0d, 0x70, 0x8c, 0x8f, 0xcd, 0x91, 0x12, 0x0f, 0x38, 0x0a, 0x82, 0x3b, 0x1e, 0x66, 0x6b, 0xf6, + 0xb7, 0x99, 0x3a, 0xee, 0x88, 0x31, 0x80, 0xc3, 0xf6, 0x66, 0x37, 0xb4, 0xd5, 0x74, 0x2b, 0x68, + 0x3b, 0xac, 0xef, 0x12, 0xd9, 0x75, 0xfa, 0xbf, 0xb8, 0xdb, 0x8c, 0x03, 0xd8, 0xe8, 0x29, 0xc4, + 0xf5, 0x5e, 0x8b, 0xd9, 0xf0, 0xf7, 0xc6, 0xe0, 0x9f, 0x17, 0x0f, 0x4a, 0x7b, 0x53, 0xa2, 0x45, + 0xc5, 0xff, 0x59, 0x1c, 0xe2, 0xe2, 0x41, 0x09, 0x7d, 0xec, 0x69, 0xc1, 0xdc, 0x1f, 0x93, 0x8b, + 0xbb, 0x03, 0xf3, 0x4f, 0xb1, 0xb0, 0x16, 0x4c, 0x0e, 0x16, 0x4b, 0x62, 0xb9, 0xd0, 0x2c, 0x4b, + 0x3b, 0xe5, 0x6a, 0xb9, 0x59, 0x96, 0x68, 0x8b, 0x28, 0xcb, 0xa1, 0x55, 0xc8, 0x1d, 0x1c, 0x16, + 0xab, 0x95, 0xc6, 0x9e, 0x74, 0x58, 0xb3, 0x7f, 0xb1, 0xd1, 0x18, 0xca, 0xc2, 0x6c, 0xb5, 0xd2, + 0x68, 0x32, 0x40, 0x23, 0x1b, 0xb7, 0x20, 0xbb, 0xe5, 0xa6, 0x54, 0x2a, 0x1c, 0x14, 0x4a, 0x95, + 0xe6, 0xeb, 0x6c, 0x02, 0xf1, 0xb0, 0xec, 0xe5, 0xdd, 0xa8, 0x15, 0x0e, 0x1a, 0x7b, 0xf5, 0x66, + 0x36, 0x89, 0x10, 0xcc, 0x13, 0x7a, 0x1b, 0xd4, 0xc8, 0xa6, 0x2c, 0x0e, 0xa5, 0x6a, 0xbd, 0xe6, + 0xc8, 0x30, 0x8d, 0x16, 0x21, 0x6b, 0xcf, 0x2c, 0x96, 0x0b, 0x3b, 0xa4, 0xd6, 0x97, 0x46, 0x57, + 0x61, 0xae, 0xfc, 0x93, 0x83, 0x42, 0x6d, 0xc7, 0x46, 0x9c, 0x41, 0x1b, 0xb0, 0xea, 0x16, 0x47, + 0x62, 0x54, 0xe5, 0x1d, 0x52, 0xaf, 0x6b, 0x64, 0x01, 0x5d, 0x87, 0x2c, 0xeb, 0x7e, 0x95, 0xea, + 0xb5, 0x9d, 0x4a, 0xb3, 0x52, 0xaf, 0x65, 0x33, 0xb4, 0xb8, 0xb7, 0x00, 0x60, 0x49, 0xce, 0x98, + 0xcd, 0x8e, 0xae, 0xf8, 0xcd, 0xd1, 0x8a, 0x9f, 0x5d, 0xd1, 0xfe, 0xcf, 0x18, 0x2c, 0xd1, 0x92, + 0xb6, 0x5d, 0x40, 0xb7, 0x1d, 0xd6, 0x26, 0x64, 0x69, 0x29, 0x4c, 0xf2, 0x5f, 0x05, 0xf3, 0x14, + 0xfe, 0xd2, 0x4e, 0x3e, 0xec, 0xf6, 0x53, 0xcc, 0xd5, 0x7e, 0xaa, 0xf8, 0x13, 0xb4, 0x7b, 0xde, + 0x46, 0x8d, 0x6f, 0xb6, 0x61, 0x59, 0xd9, 0x7e, 0x48, 0xae, 0xf0, 0x60, 0x38, 0xb7, 0x61, 0x71, + 0xd4, 0x45, 0x12, 0xfc, 0x0b, 0xba, 0xba, 0xe7, 0xb0, 0xec, 0x97, 0x97, 0x19, 0xf4, 0xfd, 0x40, + 0x3b, 0xc5, 0xf1, 0xbd, 0x0e, 0xae, 0x83, 0x21, 0xfc, 0x0b, 0x07, 0x69, 0x1b, 0x6c, 0xc5, 0x38, + 0x96, 0x5f, 0xf2, 0x14, 0x51, 0x67, 0x2c, 0x88, 0x53, 0x93, 0x75, 0x37, 0x42, 0x62, 0xfe, 0x46, + 0x48, 0xe8, 0x39, 0xc7, 0x43, 0xcf, 0xf9, 0x47, 0x30, 0xd7, 0xb2, 0xc4, 0x57, 0x34, 0x55, 0x32, + 0x95, 0xae, 0x5d, 0x23, 0x0d, 0x36, 0x2e, 0x9b, 0xf6, 0x6b, 0x03, 0x71, 0xd6, 0x26, 0xb0, 0x40, + 0x68, 0x03, 0x66, 0x49, 0x23, 0x53, 0x32, 0x35, 0xa9, 0x6f, 0xe0, 0x5c, 0x92, 0xa4, 0xd9, 0x40, + 0x60, 0x4d, 0xed, 0xd0, 0xc0, 0xc2, 0xdf, 0x71, 0xb0, 0x44, 0x0b, 0x61, 0x7e, 0x75, 0x1c, 0xd5, + 0xd0, 0x71, 0x6b, 0x9c, 0xef, 0x4a, 0x0c, 0x65, 0xf8, 0x6d, 0x55, 0xf2, 0x72, 0xb0, 0xec, 0x9f, + 0x8f, 0xa5, 0xf9, 0xbf, 0x8a, 0xc1, 0xa2, 0x15, 0x9f, 0xd9, 0x03, 0x97, 0x1d, 0x42, 0x4f, 0x70, + 0x92, 0xbe, 0xcd, 0x4c, 0x04, 0x36, 0x73, 0xcf, 0x9f, 0x44, 0xdf, 0x75, 0x47, 0x98, 0xfe, 0x15, + 0x7c, 0x5b, 0x7b, 0xf9, 0x97, 0x1c, 0x2c, 0xf9, 0xe6, 0x63, 0xf6, 0xf2, 0x91, 0x3f, 0x2b, 0xb8, + 0x15, 0x21, 0xdf, 0x3b, 0xe5, 0x05, 0x8f, 0xed, 0x78, 0x7c, 0x32, 0xb3, 0xfc, 0xe7, 0x18, 0xac, + 0x0d, 0x2e, 0x35, 0xf2, 0x94, 0xa0, 0x3d, 0x41, 0xb1, 0xeb, 0x62, 0x1d, 0xfb, 0x4f, 0xfc, 0x0e, + 0x77, 0x2b, 0x78, 0xcf, 0x86, 0x88, 0x34, 0xcc, 0xf1, 0x86, 0xd6, 0x88, 0x13, 0x93, 0xd6, 0x88, + 0x2f, 0xa4, 0x01, 0xbf, 0xef, 0x2e, 0x7f, 0x7b, 0xc5, 0x67, 0x9a, 0x30, 0x66, 0x1f, 0xe9, 0x09, + 0x5c, 0x23, 0x29, 0x80, 0xf3, 0x12, 0xc6, 0xee, 0xcf, 0x53, 0x97, 0x98, 0x16, 0x97, 0xac, 0x61, + 0xe7, 0xf9, 0x07, 0xeb, 0x9d, 0xb4, 0x85, 0x6f, 0x12, 0xb0, 0x6c, 0xa5, 0x08, 0x0d, 0x53, 0x3e, + 0x99, 0xa4, 0xab, 0xf0, 0xdb, 0xc1, 0x22, 0x6d, 0xcc, 0x7b, 0x2c, 0xe1, 0x5c, 0xc7, 0xa9, 0xcd, + 0xa2, 0x3c, 0x2c, 0x18, 0xa6, 0x7c, 0x42, 0xdc, 0x81, 0xac, 0x9f, 0x60, 0x53, 0xea, 0xc9, 0xe6, + 0x5b, 0x66, 0xeb, 0x57, 0xd9, 0x50, 0x93, 0x8c, 0x1c, 0xc8, 0xe6, 0xdb, 0x4b, 0x3a, 0x48, 0xf4, + 0x63, 0xbf, 0x53, 0x78, 0x7f, 0xc4, 0x5a, 0x86, 0xe8, 0xd6, 0x4f, 0x22, 0x0a, 0xf9, 0x8f, 0x46, + 0xb0, 0x1c, 0x5d, 0xc0, 0xbf, 0x78, 0xe1, 0xfa, 0x3b, 0xee, 0x01, 0x5c, 0x87, 0x6b, 0x81, 0xc5, + 0xb3, 0x2b, 0xe4, 0xf7, 0x20, 0x67, 0x0d, 0x1d, 0xaa, 0xc6, 0x84, 0xea, 0x18, 0xa1, 0x31, 0xb1, + 0x28, 0x8d, 0x59, 0x84, 0xe4, 0xb1, 0xa6, 0xb7, 0x68, 0xb6, 0x93, 0x16, 0xe9, 0x87, 0xb0, 0x02, + 0xd7, 0x43, 0xa6, 0x67, 0xb2, 0xfd, 0x4d, 0x92, 0x0a, 0x37, 0x79, 0x93, 0xea, 0xd3, 0x28, 0x5b, + 0xf9, 0xc0, 0xad, 0x0c, 0xa1, 0xfd, 0x9c, 0x6f, 0xc3, 0x5a, 0xd6, 0x21, 0xe3, 0xc6, 0x63, 0x97, + 0xa3, 0x39, 0xc2, 0x9c, 0x92, 0x17, 0xea, 0x9d, 0xa5, 0x7c, 0xbd, 0xb3, 0xea, 0xc0, 0xd4, 0xa6, + 0xbd, 0x01, 0x6f, 0xe4, 0x56, 0x0c, 0x31, 0xb6, 0x37, 0x01, 0x63, 0x4b, 0x7b, 0x1b, 0x72, 0x91, + 0x4c, 0x7f, 0x03, 0xcc, 0x8d, 0x29, 0x75, 0x68, 0xa7, 0x4c, 0xe8, 0x01, 0x4f, 0x35, 0x7e, 0xf2, + 0xde, 0x95, 0x4f, 0x8d, 0x62, 0x01, 0x35, 0x0a, 0xb7, 0xb1, 0x35, 0x58, 0x09, 0x9d, 0x91, 0x09, + 0xf4, 0xc7, 0x1c, 0x15, 0xd7, 0x29, 0x8a, 0x35, 0x4c, 0xd9, 0x34, 0xc6, 0x15, 0x88, 0x0d, 0xba, + 0x05, 0xa2, 0x20, 0x22, 0xd0, 0x84, 0x86, 0x22, 0xfc, 0x29, 0x47, 0x77, 0xc7, 0x2f, 0x0b, 0xbb, + 0x99, 0xef, 0x42, 0xb2, 0x4f, 0xea, 0xfe, 0x34, 0x42, 0x5b, 0xf0, 0x9a, 0xc6, 0xa1, 0x35, 0x24, + 0x52, 0x8c, 0x4b, 0xab, 0xa4, 0x0a, 0xbf, 0xe2, 0x20, 0xe3, 0xe2, 0x8f, 0x56, 0x61, 0xc6, 0x29, + 0x15, 0xd9, 0xb9, 0x91, 0x03, 0xb0, 0x4e, 0xc0, 0xd4, 0x4c, 0xb9, 0xc3, 0x5e, 0xaa, 0xd0, 0x0f, + 0x2b, 0x9d, 0xed, 0x1b, 0x98, 0x86, 0xce, 0x71, 0x91, 0xfc, 0x46, 0xf7, 0x21, 0xd1, 0x57, 0x15, + 0x93, 0x38, 0x83, 0x79, 0xbf, 0x95, 0x93, 0xa9, 0xf2, 0x87, 0xaa, 0x62, 0x8a, 0x04, 0x4b, 0xb8, + 0x07, 0x09, 0xeb, 0xcb, 0x5b, 0xad, 0x98, 0x81, 0x64, 0xf1, 0x75, 0xb3, 0xdc, 0xc8, 0x72, 0x08, + 0x20, 0x55, 0xa1, 0xb9, 0x7d, 0x4c, 0xa8, 0xda, 0x4f, 0x56, 0x9d, 0x45, 0x58, 0x8e, 0x41, 0x3e, + 0x52, 0x35, 0xbd, 0x2b, 0x77, 0x88, 0xcc, 0x69, 0xd1, 0xf9, 0x8e, 0x6e, 0xa7, 0xd0, 0xe2, 0xe3, + 0xaa, 0x73, 0x22, 0x61, 0xb5, 0xa5, 0xcf, 0xa8, 0x6e, 0x45, 0x55, 0x95, 0x0a, 0xa1, 0x55, 0xa5, + 0x35, 0xcf, 0x8d, 0x3c, 0xa2, 0x9e, 0xf4, 0xeb, 0x18, 0x2c, 0x85, 0xe2, 0xa1, 0xc7, 0xee, 0x4a, + 0xd2, 0xcd, 0xa1, 0x3c, 0xdd, 0x35, 0xa4, 0xff, 0xe1, 0x68, 0x0d, 0x69, 0xdb, 0x53, 0x43, 0xba, + 0x33, 0x92, 0xde, 0x5d, 0x3d, 0xfa, 0x2b, 0x2e, 0xa2, 0x7a, 0xd4, 0x68, 0x16, 0x76, 0xcb, 0xd2, + 0x61, 0x8d, 0xfe, 0x75, 0xaa, 0x47, 0x8b, 0x90, 0x1d, 0xd4, 0x54, 0xa4, 0x46, 0xb3, 0xd0, 0x6c, + 0x64, 0x63, 0xc1, 0xca, 0x4d, 0x3c, 0xb4, 0x2e, 0x93, 0x18, 0x5d, 0x82, 0x49, 0x52, 0x94, 0x15, + 0x40, 0x8c, 0x7a, 0xbf, 0x7e, 0x58, 0x6b, 0x4a, 0xbb, 0x62, 0xfd, 0xf0, 0x80, 0x3d, 0xda, 0x72, + 0xea, 0x33, 0x8b, 0x80, 0xd8, 0x91, 0xb9, 0x9f, 0xe1, 0xff, 0x39, 0x07, 0x0b, 0x1e, 0x30, 0x3b, + 0x41, 0x57, 0xbf, 0x9c, 0xf3, 0xf4, 0xcb, 0x1f, 0xc2, 0xa2, 0x95, 0x62, 0x52, 0x73, 0x31, 0xa4, + 0x1e, 0xd6, 0x49, 0x45, 0x9c, 0x29, 0xfe, 0xd5, 0xae, 0x7c, 0xc6, 0xba, 0x06, 0x07, 0x58, 0xb7, + 0x18, 0x5f, 0x42, 0x5d, 0x58, 0xf8, 0x2a, 0x4e, 0x03, 0x99, 0x89, 0x13, 0xa1, 0x91, 0x8e, 0x2a, + 0x98, 0x29, 0xc5, 0x27, 0xc8, 0x94, 0x22, 0xdc, 0x5c, 0x62, 0xa2, 0xe8, 0x79, 0xf2, 0xeb, 0xbe, + 0x36, 0xb8, 0xd2, 0x69, 0xa8, 0x7b, 0xdf, 0xad, 0xc4, 0x23, 0x53, 0xb3, 0xd4, 0x57, 0x45, 0xee, + 0xe7, 0x97, 0x95, 0x58, 0x17, 0x68, 0xa8, 0x76, 0x81, 0x84, 0x6a, 0xeb, 0x7f, 0x39, 0x48, 0x57, + 0xda, 0x58, 0x35, 0xe9, 0xda, 0xe6, 0x3c, 0xff, 0xa9, 0x81, 0x56, 0x23, 0xfe, 0x81, 0x83, 0x2c, + 0x8c, 0x5f, 0x1b, 0xfa, 0xef, 0x1d, 0xc2, 0x14, 0x3a, 0x76, 0xfd, 0x97, 0x89, 0xa7, 0xf5, 0xf1, + 0x5e, 0x80, 0x32, 0xc4, 0xcf, 0xf1, 0xb7, 0x47, 0x60, 0x39, 0xf3, 0x3c, 0x81, 0x24, 0x79, 0x93, + 0x8f, 0x16, 0x9d, 0xff, 0x0b, 0x70, 0x3d, 0xd9, 0xe7, 0x97, 0x7c, 0x50, 0x9b, 0x6e, 0xeb, 0x1f, + 0x67, 0x00, 0x06, 0x79, 0x29, 0x7a, 0x01, 0xb3, 0xee, 0x67, 0xc1, 0x68, 0x65, 0xc8, 0xa3, 0x74, + 0x7e, 0x35, 0x7c, 0xd0, 0x91, 0xe9, 0x05, 0xcc, 0xba, 0x9f, 0x82, 0x0d, 0x98, 0x85, 0x3c, 0x47, + 0x1b, 0x30, 0x0b, 0x7d, 0x3d, 0x36, 0x85, 0x3a, 0x70, 0x2d, 0xe2, 0x31, 0x10, 0xba, 0x33, 0xde, + 0x93, 0x29, 0xfe, 0x7b, 0x63, 0xbe, 0x2a, 0x12, 0xa6, 0x90, 0x0e, 0xd7, 0x23, 0x5f, 0xbb, 0xa0, + 0xcd, 0x71, 0x5f, 0xe8, 0xf0, 0x77, 0xc7, 0xc0, 0x74, 0xe6, 0xec, 0x03, 0x1f, 0xdd, 0x62, 0x47, + 0x77, 0xc7, 0x7e, 0xfb, 0xc1, 0xdf, 0x1b, 0xbf, 0x63, 0x2f, 0x4c, 0xa1, 0x3d, 0xc8, 0xb8, 0x7a, + 0xad, 0x88, 0x0f, 0x6d, 0xc0, 0x52, 0xc6, 0x2b, 0x43, 0x9a, 0xb3, 0x94, 0x93, 0xab, 0xfd, 0x35, + 0xe0, 0x14, 0x6c, 0xe4, 0x0d, 0x38, 0x85, 0xf4, 0xcb, 0xfc, 0xdb, 0xef, 0xbb, 0xe4, 0xc3, 0xb6, + 0x3f, 0x3c, 0x4a, 0x08, 0xdb, 0xfe, 0x88, 0x88, 0x41, 0x98, 0x42, 0x9f, 0xc0, 0xbc, 0xb7, 0xa4, + 0x8d, 0xd6, 0x86, 0x96, 0xe6, 0xf9, 0x1b, 0x51, 0xc3, 0x6e, 0x96, 0xde, 0x0a, 0xea, 0x80, 0x65, + 0x68, 0x25, 0x77, 0xc0, 0x32, 0xa2, 0xf0, 0x3a, 0x65, 0xf9, 0x27, 0x4f, 0x5d, 0x70, 0xe0, 0x9f, + 0xc2, 0xca, 0x99, 0x03, 0xff, 0x14, 0x5a, 0x4c, 0x14, 0xa6, 0x90, 0x02, 0xcb, 0xe1, 0x65, 0x29, + 0x74, 0x7b, 0xac, 0xaa, 0x1b, 0x7f, 0x67, 0x14, 0x9a, 0x33, 0x55, 0x0b, 0x16, 0x42, 0x5a, 0xe1, + 0x48, 0x18, 0xda, 0x27, 0xa7, 0x93, 0xdc, 0x1a, 0xa3, 0x97, 0x2e, 0x58, 0xd1, 0xc6, 0xd6, 0xbf, + 0x25, 0x21, 0x41, 0xae, 0xfd, 0x26, 0x5c, 0xf1, 0xd5, 0x1e, 0xd0, 0x8d, 0xe1, 0x15, 0x19, 0x7e, + 0x3d, 0x72, 0xdc, 0x59, 0xc3, 0x1b, 0xb8, 0x1a, 0xa8, 0x1b, 0xa0, 0x0d, 0x37, 0x5d, 0x58, 0x45, + 0x83, 0xbf, 0x39, 0x04, 0xc3, 0xcf, 0xdb, 0xeb, 0xdb, 0x36, 0x46, 0x25, 0xb6, 0x5e, 0xde, 0x51, + 0xfe, 0xec, 0x33, 0x1a, 0x65, 0xf9, 0x3d, 0x99, 0xe0, 0x95, 0x2b, 0xd4, 0x87, 0xdd, 0x1a, 0x8a, + 0xe3, 0xcc, 0xf0, 0xa9, 0x13, 0xde, 0xb9, 0x32, 0x28, 0xe4, 0x11, 0x2e, 0x34, 0xd3, 0xe3, 0x85, + 0x61, 0x28, 0x0e, 0xfb, 0x57, 0x90, 0xf5, 0xdf, 0xf3, 0x68, 0x7d, 0x44, 0xd8, 0xc1, 0x6f, 0x44, + 0x23, 0xf8, 0x77, 0xc6, 0xef, 0x64, 0xfc, 0x52, 0x85, 0xb9, 0x97, 0x5b, 0x43, 0x71, 0xdc, 0x6e, + 0xd1, 0x15, 0xe1, 0x0e, 0xdc, 0x62, 0x30, 0x1a, 0x1e, 0xb8, 0xc5, 0x90, 0x90, 0x58, 0x98, 0xda, + 0x7e, 0x06, 0x20, 0x77, 0x7a, 0x6f, 0x65, 0x09, 0xab, 0xfd, 0x2e, 0x5a, 0x0d, 0x74, 0xab, 0xca, + 0x6a, 0xbf, 0x5b, 0xef, 0x59, 0x99, 0x97, 0x91, 0xfb, 0x45, 0x9a, 0xe4, 0x5b, 0x33, 0x84, 0xc0, + 0x1a, 0xd8, 0xae, 0x42, 0x76, 0x40, 0x2d, 0x91, 0x10, 0x0a, 0xdd, 0x0c, 0xe5, 0x41, 0x7a, 0xff, + 0x3e, 0x46, 0xf3, 0x0e, 0x23, 0x32, 0xba, 0xfd, 0x11, 0x40, 0xcb, 0x50, 0x24, 0x1a, 0xc3, 0xa1, + 0xb5, 0x00, 0x9f, 0xe7, 0x0a, 0xee, 0xb4, 0x6d, 0x1e, 0x7f, 0xc1, 0x84, 0x69, 0x19, 0x0a, 0x8d, + 0xf4, 0xb6, 0x7f, 0x04, 0x19, 0x2a, 0xcc, 0xb1, 0x85, 0x37, 0x8a, 0x9e, 0xc9, 0x40, 0x57, 0x4f, + 0x46, 0xb6, 0xcb, 0x30, 0x47, 0x19, 0xb0, 0xac, 0x11, 0xad, 0x07, 0x58, 0xec, 0xd3, 0x11, 0x1f, + 0x93, 0x59, 0x42, 0xc6, 0xc6, 0xb6, 0x8b, 0x30, 0x6b, 0xb3, 0x31, 0xdf, 0x6a, 0x6d, 0x74, 0x23, + 0x84, 0x8b, 0x35, 0xe0, 0x63, 0x92, 0x61, 0x4c, 0xac, 0xa1, 0x81, 0x28, 0xf6, 0xbf, 0xab, 0x06, + 0x45, 0x61, 0x99, 0x5d, 0xa8, 0x28, 0x6c, 0xac, 0x98, 0x7c, 0x13, 0x6f, 0x19, 0xca, 0x51, 0x8a, + 0x10, 0xfd, 0xe0, 0xff, 0x03, 0x00, 0x00, 0xff, 0xff, 0x84, 0x6c, 0x3a, 0xcf, 0x5b, 0x3d, 0x00, + 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/spec.md b/spec.md index c9568985..37abf0e7 100644 --- a/spec.md +++ b/spec.md @@ -164,48 +164,52 @@ capability. ### Volume Lifecycle ``` - CreateVolume +------------+ DeleteVolume - +------------->| CREATED +--------------+ - | +---+----^---+ | - | Controller | | Controller v -+++ Publish | | Unpublish +++ -|X| Volume | | Volume | | -+-+ +---v----+---+ +-+ - | NODE_READY | - +---+----^---+ - Node | | Node - Publish | | Unpublish - Volume | | Volume - +---v----+---+ - | PUBLISHED | - +------------+ + CreateVolume +------------+ DeleteVolume + +------------->| CREATED +------------------------+ + | | +<-----------+ | + | +---+----^---+ | | + | Controller | | Controller | v ++++ Publish | | Unpublish | +++ +|X| Volume | | Volume | | | ++-+ +---v----+---+ | +-+ + | NODE_READY | | + +---+----^---+ | Node + Node | | Node | Unpublish + Publish | | Unpublish | Volume + Volume | | Volume | (forced) + +---v----+---+ +----+--------+ + | PUBLISHED +------>| QUARANTINED | + +------------+ +-------------+ + ControllerUnpublishVolume(fenced) Figure 5: The lifecycle of a dynamically provisioned volume, from creation to destruction. ``` ``` - CreateVolume +------------+ DeleteVolume - +------------->| CREATED +--------------+ - | +---+----^---+ | - | Controller | | Controller v -+++ Publish | | Unpublish +++ -|X| Volume | | Volume | | -+-+ +---v----+---+ +-+ - | NODE_READY | - +---+----^---+ - Node | | Node - Stage | | Unstage - Volume | | Volume - +---v----+---+ - | VOL_READY | - +---+----^---+ - Node | | Node - Publish | | Unpublish - Volume | | Volume - +---v----+---+ - | PUBLISHED | - +------------+ + CreateVolume +------------+ DeleteVolume + +------------->| CREATED +--------------------------+ + | | +<-----------+ | + | +---+----^---+ | | + | Controller | | Controller | v ++++ Publish | | Unpublish | +++ +|X| Volume | | Volume | | | ++-+ +---v----+---+ | +-+ + | NODE_READY | | Node + +---+----^---+ | Unstage + Node | | Node | Volume + Stage | | Unstage | (forced) + Volume | | Volume +--------------+ + +---v----+---+ | QUARANTINED2 | + | VOL_READY | +---^----------+ + +---+----^---+ | Node + Node | | Node | Unpublish + Publish | | Unpublish | Volume + Volume | | Volume | (forced) + +---v----+---+ +----+---------+ + | PUBLISHED +------>| QUARANTINED3 | + +------------+ +--------------+ + ControllerUnpublishVolume(fenced) Figure 6: The lifecycle of a dynamically provisioned volume, from creation to destruction, when the Node Plugin advertises the @@ -1318,10 +1322,15 @@ The CO MUST implement the specified error recovery behavior when it encounters t Controller Plugin MUST implement this RPC call if it has `PUBLISH_UNPUBLISH_VOLUME` controller capability. This RPC is a reverse operation of `ControllerPublishVolume`. -It MUST be called after all `NodeUnstageVolume` and `NodeUnpublishVolume` on the volume are called and succeed. +It MUST be called after all `NodeUnstageVolume` and `NodeUnpublishVolume` on the volume are called and succeed unless the plugin has the `UNPUBLISH_FENCE` capability. The Plugin SHOULD perform the work that is necessary for making the volume ready to be consumed by a different node. The Plugin MUST NOT assume that this RPC will be executed on the node where the volume was previously used. +If the plugin has the `UNPUBLISH_FENCE` capability, the CO MAY specify `fence` as `true`, in which case the SP MUST ensure that the node may no longer access the volume before returning a successful response. +This results in a transition into one of the `QUARANTINE` states where the node must be cleaned up without being able to access the volume like usual. +This is intended cut off an unreachable node from accessing volumes so those volumes may be safely published to another node. +Once in one of the `QUARANTINE` states the volume MAY NOT be published to that node again until appropriate cleanup has happened using `NodeUnpublishVolume` and `NodeUnstageVolume` (if applicable). + This RPC is typically called by the CO when the workload using the volume is being moved to a different node, or all the workload using the volume on a node has finished. This operation MUST be idempotent. @@ -1347,6 +1356,17 @@ message ControllerUnpublishVolumeRequest { // This field is OPTIONAL. Refer to the `Secrets Requirements` // section on how to use this field. map secrets = 3 [(csi_secret) = true]; + + // Indicates SP MUST make the volume inacessible to the node or nodes + // it is being unpublished from. Any attempt to read or write data + // to a volume from a node that has been fenced MUST NOT succeed, + // even if the volume remains staged and/or published on the node. + // CO MUST NOT set this field to true unless SP has the + // UNPUBLISH_FENCE controller capability. + // The SP MAY make the volume inaccessible even when this field is + // false. + // This is an OPTIONAL field. + bool fence = 4; } message ControllerUnpublishVolumeResponse { @@ -2196,9 +2216,13 @@ This RPC is a reverse operation of `NodeStageVolume`. This RPC MUST undo the work by the corresponding `NodeStageVolume`. This RPC SHALL be called by the CO once for each `staging_target_path` that was successfully setup via `NodeStageVolume`. -If the corresponding Controller Plugin has `PUBLISH_UNPUBLISH_VOLUME` controller capability and the Node Plugin has `STAGE_UNSTAGE_VOLUME` capability, the CO MUST guarantee that this RPC is called and returns success before calling `ControllerUnpublishVolume` for the given node and the given volume. +If the corresponding Controller Plugin has `PUBLISH_UNPUBLISH_VOLUME` controller capability and the Node Plugin has `STAGE_UNSTAGE_VOLUME` capability, the CO MUST guarantee that this RPC is called and returns success before calling `ControllerUnpublishVolume` for the given node and the given volume, unless the Controller Plugin has `UNPUBLISH_FENCE` capability and the Node Plugin has the `FORCE_UNPUBLISH` capability and the `force` flag is `true`. The CO MUST guarantee that this RPC is called after all `NodeUnpublishVolume` have been called and returned success for the given volume on the given node. +If the Node Plugin has the `FORCE_UNPUBLISH` capability, the CO MAY specify `force` as `true` in which case the Node Plugin MUST support unstaging volumes even when access has been revoked with `ControllerUnpublishVolume`. +Because data loss is inevitable in such circumstances, the `force` flag is an indication that success is desired even it if means losing data. +It is essential that after a successful call to `NodeUnstageVolume` that there be no buffered data on the node related to the volume which might result in unintetional modification of the volume if it were to be subsequently re-staged to that node. + The Plugin SHALL assume that this RPC will be executed on the node where the volume is being used. This RPC MAY be called by the CO when the workload using the volume is being moved to a different node, or all the workloads using the volume on a node have finished. @@ -2221,6 +2245,13 @@ message NodeUnstageVolumeRequest { // system/filesystem, but, at a minimum, SP MUST accept a max path // length of at least 128 bytes. string staging_target_path = 2; + + // Indicates that the SP should prefer to successfully unstage the + // volume, even if data loss would occur as a result. + // CO MUST NOT set this field to true unless SP has the + // FORCE_UNPUBLISH node capability. + // This in an OPTIONAL field. + bool force = 3; } message NodeUnstageVolumeResponse { @@ -2376,9 +2407,13 @@ A Node Plugin MUST implement this RPC call. This RPC is a reverse operation of `NodePublishVolume`. This RPC MUST undo the work by the corresponding `NodePublishVolume`. This RPC SHALL be called by the CO at least once for each `target_path` that was successfully setup via `NodePublishVolume`. -If the corresponding Controller Plugin has `PUBLISH_UNPUBLISH_VOLUME` controller capability, the CO SHOULD issue all `NodeUnpublishVolume` (as specified above) before calling `ControllerUnpublishVolume` for the given node and the given volume. +If the corresponding Controller Plugin has `PUBLISH_UNPUBLISH_VOLUME` controller capability, the CO SHOULD issue all `NodeUnpublishVolume` (as specified above) before calling `ControllerUnpublishVolume` for the given node and the given volume, unless the Controller Plugin has `UNPUBLISH_FENCE` capability and the Node Plugin has the `FORCE_UNPUBLISH` capability and the `force` flag is `true`. The Plugin SHALL assume that this RPC will be executed on the node where the volume is being used. +If the Node Plugin has the `FORCE_UNPUBLISH` capability, the CO MAY specify `force` as `true` in which case the Node Plugin MUST support unpublishing volumes even when access has been revoked with `ControllerUnpublishVolume`. +Because data loss is inevitable in such circumstances, the `force` flag is an indication that success is desired even it if means losing data. +It is essential that after a successful call to `NodeUnpublishVolume` that there be no buffered data on the node related to the volume which might result in unintetional modification of the volume if it were to be subsequently re-published to that node. + This RPC is typically called by the CO when the workload using the volume is being moved to a different node, or all the workload using the volume on a node has finished. This operation MUST be idempotent. @@ -2398,6 +2433,13 @@ message NodeUnpublishVolumeRequest { // system/filesystem, but, at a minimum, SP MUST accept a max path // length of at least 128 bytes. string target_path = 2; + + // Indicates that the SP should prefer to successfully unpublish the + // volume, even if data loss would occur as a result. + // CO MUST NOT set this field to true unless SP has the + // FORCE_UNPUBLISH node capability. + // This in an OPTIONAL field. + bool force = 3; } message NodeUnpublishVolumeResponse { From 56f96a27260fe12bbfdbf886341bc9e6b616e484 Mon Sep 17 00:00:00 2001 From: Ben Swartzlander Date: Wed, 28 Apr 2021 13:51:50 -0400 Subject: [PATCH 2/5] Update based on review feedback Ensure all changes are part of spec.md, and csi.proto is generated by "make". Mark new fields as alpha. Include a top-level note about quarantine states. --- csi.proto | 23 +- lib/go/csi/csi.pb.go | 495 ++++++++++++++++++++++--------------------- spec.md | 47 ++-- 3 files changed, 303 insertions(+), 262 deletions(-) diff --git a/csi.proto b/csi.proto index 21c6a7f6..d7f02505 100644 --- a/csi.proto +++ b/csi.proto @@ -788,7 +788,7 @@ message ControllerUnpublishVolumeRequest { // This field is OPTIONAL. Refer to the `Secrets Requirements` // section on how to use this field. map secrets = 3 [(csi_secret) = true]; - + // Indicates SP MUST make the volume inacessible to the node or nodes // it is being unpublished from. Any attempt to read or write data // to a volume from a node that has been fenced MUST NOT succeed, @@ -798,7 +798,7 @@ message ControllerUnpublishVolumeRequest { // The SP MAY make the volume inaccessible even when this field is // false. // This is an OPTIONAL field. - bool fence = 4; + bool fence = 4 [(alpha_field) = true]; } message ControllerUnpublishVolumeResponse { @@ -1081,6 +1081,7 @@ message ControllerServiceCapability { // condition after a volume is provisioned. GET_VOLUME = 12 [(alpha_enum_value) = true]; + // Indicates the SP supports the SINGLE_NODE_SINGLE_WRITER and/or // SINGLE_NODE_MULTI_WRITER access modes. // These access modes are intended to replace the @@ -1090,6 +1091,10 @@ message ControllerServiceCapability { // SINGLE_NODE_SINGLE_WRITER and/or SINGLE_NODE_MULTI_WRITER are // supported, in order to permit older COs to continue working. SINGLE_NODE_MULTI_WRITER = 13 [(alpha_enum_value) = true]; + + // Indicates the SP supports ControllerUnpublishVolume.fence + // field. + UNPUBLISH_FENCE = 14 [(alpha_enum_value) = true]; } Type type = 1; @@ -1327,13 +1332,13 @@ message NodeUnstageVolumeRequest { // system/filesystem, but, at a minimum, SP MUST accept a max path // length of at least 128 bytes. string staging_target_path = 2; - + // Indicates that the SP should prefer to successfully unstage the // volume, even if data loss would occur as a result. // CO MUST NOT set this field to true unless SP has the // FORCE_UNPUBLISH node capability. // This in an OPTIONAL field. - bool force = 3; + bool force = 3 [(alpha_field) = true]; } message NodeUnstageVolumeResponse { @@ -1418,13 +1423,13 @@ message NodeUnpublishVolumeRequest { // system/filesystem, but, at a minimum, SP MUST accept a max path // length of at least 128 bytes. string target_path = 2; - + // Indicates that the SP should prefer to successfully unpublish the // volume, even if data loss would occur as a result. // CO MUST NOT set this field to true unless SP has the // FORCE_UNPUBLISH node capability. // This in an OPTIONAL field. - bool force = 3; + bool force = 3 [(alpha_field) = true]; } message NodeUnpublishVolumeResponse { @@ -1552,6 +1557,12 @@ message NodeServiceCapability { // with provided volume group identifier during node stage // or node publish RPC calls. VOLUME_MOUNT_GROUP = 6 [(alpha_enum_value) = true]; + + // Indicates that the node supports the NodeUnpublishVolume.force + // field. Also indicates that the node supports the + // NodeUnstageVolume.force field if it also has the + // STAGE_UNSTAGE_VOLUME capability. + FORCE_UNPUBLISH = 7 [(alpha_enum_value) = true]; } Type type = 1; diff --git a/lib/go/csi/csi.pb.go b/lib/go/csi/csi.pb.go index 971ef665..27f3839f 100644 --- a/lib/go/csi/csi.pb.go +++ b/lib/go/csi/csi.pb.go @@ -244,6 +244,9 @@ const ( // SINGLE_NODE_SINGLE_WRITER and/or SINGLE_NODE_MULTI_WRITER are // supported, in order to permit older COs to continue working. ControllerServiceCapability_RPC_SINGLE_NODE_MULTI_WRITER ControllerServiceCapability_RPC_Type = 13 + // Indicates the SP supports ControllerUnpublishVolume.fence + // field. + ControllerServiceCapability_RPC_UNPUBLISH_FENCE ControllerServiceCapability_RPC_Type = 14 ) var ControllerServiceCapability_RPC_Type_name = map[int32]string{ @@ -261,6 +264,7 @@ var ControllerServiceCapability_RPC_Type_name = map[int32]string{ 11: "VOLUME_CONDITION", 12: "GET_VOLUME", 13: "SINGLE_NODE_MULTI_WRITER", + 14: "UNPUBLISH_FENCE", } var ControllerServiceCapability_RPC_Type_value = map[string]int32{ @@ -278,6 +282,7 @@ var ControllerServiceCapability_RPC_Type_value = map[string]int32{ "VOLUME_CONDITION": 11, "GET_VOLUME": 12, "SINGLE_NODE_MULTI_WRITER": 13, + "UNPUBLISH_FENCE": 14, } func (x ControllerServiceCapability_RPC_Type) String() string { @@ -353,6 +358,11 @@ const ( // with provided volume group identifier during node stage // or node publish RPC calls. NodeServiceCapability_RPC_VOLUME_MOUNT_GROUP NodeServiceCapability_RPC_Type = 6 + // Indicates that the node supports the NodeUnpublishVolume.force + // field. Also indicates that the node supports the + // NodeUnstageVolume.force field if it also has the + // STAGE_UNSTAGE_VOLUME capability. + NodeServiceCapability_RPC_FORCE_UNPUBLISH NodeServiceCapability_RPC_Type = 7 ) var NodeServiceCapability_RPC_Type_name = map[int32]string{ @@ -363,6 +373,7 @@ var NodeServiceCapability_RPC_Type_name = map[int32]string{ 4: "VOLUME_CONDITION", 5: "SINGLE_NODE_MULTI_WRITER", 6: "VOLUME_MOUNT_GROUP", + 7: "FORCE_UNPUBLISH", } var NodeServiceCapability_RPC_Type_value = map[string]int32{ @@ -373,6 +384,7 @@ var NodeServiceCapability_RPC_Type_value = map[string]int32{ "VOLUME_CONDITION": 4, "SINGLE_NODE_MULTI_WRITER": 5, "VOLUME_MOUNT_GROUP": 6, + "FORCE_UNPUBLISH": 7, } func (x NodeServiceCapability_RPC_Type) String() string { @@ -5101,247 +5113,248 @@ func init() { } var fileDescriptor_9cdb00adce470e01 = []byte{ - // 3825 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x3b, 0x4b, 0x6c, 0x1b, 0x49, - 0x76, 0x6a, 0xfe, 0x44, 0x3d, 0x4a, 0x32, 0x5d, 0xfa, 0x98, 0x6e, 0x49, 0x96, 0xdc, 0x1e, 0x7b, - 0x65, 0x8f, 0x4d, 0xaf, 0xb5, 0x63, 0x23, 0x23, 0x7b, 0x76, 0x87, 0xa4, 0x68, 0x89, 0x6b, 0x8a, - 0xd4, 0x34, 0x29, 0x7b, 0xed, 0x64, 0xd0, 0xd3, 0x22, 0x4b, 0x72, 0x63, 0xc8, 0x6e, 0x4e, 0x77, - 0x53, 0x91, 0x06, 0x08, 0xb2, 0x48, 0x90, 0x43, 0x90, 0x4b, 0x6e, 0x3b, 0xb9, 0x2d, 0x92, 0x3d, - 0x66, 0xb1, 0x08, 0x82, 0x20, 0xc7, 0x00, 0x39, 0x06, 0xc8, 0x26, 0xb7, 0x04, 0xb9, 0xcc, 0x2d, - 0x08, 0x82, 0x04, 0x98, 0x4b, 0x2e, 0x39, 0x04, 0x41, 0x57, 0x55, 0x37, 0xfb, 0xcb, 0x8f, 0xa5, - 0xc1, 0x1c, 0xf6, 0x24, 0xf6, 0xab, 0xf7, 0x5e, 0xbd, 0xaa, 0x7a, 0xef, 0xd5, 0xfb, 0x94, 0xe0, - 0xf1, 0x89, 0x62, 0xbe, 0xed, 0x1f, 0xe5, 0x5b, 0x5a, 0xf7, 0x61, 0x4b, 0x53, 0x4d, 0x59, 0x51, - 0xb1, 0xfe, 0xc0, 0x30, 0x35, 0x5d, 0x3e, 0xc1, 0x0f, 0x14, 0xd5, 0xc4, 0xfa, 0xb1, 0xdc, 0xc2, - 0x0f, 0x8d, 0x1e, 0x6e, 0x3d, 0x6c, 0x19, 0x4a, 0xbe, 0xa7, 0x6b, 0xa6, 0x86, 0x52, 0xd6, 0xcf, - 0xd3, 0x47, 0xfc, 0xc6, 0x89, 0xa6, 0x9d, 0x74, 0xf0, 0x43, 0x02, 0x3d, 0xea, 0x1f, 0x3f, 0x6c, - 0x63, 0xa3, 0xa5, 0x2b, 0x3d, 0x53, 0xd3, 0x29, 0x26, 0xbf, 0xee, 0xc7, 0x30, 0x95, 0x2e, 0x36, - 0x4c, 0xb9, 0xdb, 0x63, 0x08, 0x37, 0xfc, 0x08, 0xbf, 0xab, 0xcb, 0xbd, 0x1e, 0xd6, 0x0d, 0x3a, - 0x2e, 0x2c, 0xc3, 0xe2, 0x2e, 0x36, 0x0f, 0x3a, 0xfd, 0x13, 0x45, 0xad, 0xa8, 0xc7, 0x9a, 0x88, - 0xbf, 0xe8, 0x63, 0xc3, 0x14, 0xfe, 0x95, 0x83, 0x25, 0xdf, 0x80, 0xd1, 0xd3, 0x54, 0x03, 0x23, - 0x04, 0x09, 0x55, 0xee, 0xe2, 0x1c, 0xb7, 0xc1, 0x6d, 0xce, 0x88, 0xe4, 0x37, 0xba, 0x0d, 0xf3, - 0xa7, 0x58, 0x6d, 0x6b, 0xba, 0x74, 0x8a, 0x75, 0x43, 0xd1, 0xd4, 0x5c, 0x8c, 0x8c, 0xce, 0x51, - 0xe8, 0x4b, 0x0a, 0x44, 0xbb, 0x90, 0xee, 0xca, 0xaa, 0x72, 0x8c, 0x0d, 0x33, 0x17, 0xdf, 0x88, - 0x6f, 0x66, 0xb6, 0xde, 0xcf, 0xd3, 0xa5, 0xe6, 0x43, 0xe7, 0xca, 0xef, 0x33, 0xec, 0xb2, 0x6a, - 0xea, 0xe7, 0xa2, 0x43, 0xcc, 0x3f, 0x85, 0x39, 0xcf, 0x10, 0xca, 0x42, 0xfc, 0x73, 0x7c, 0xce, - 0x64, 0xb2, 0x7e, 0xa2, 0x45, 0x48, 0x9e, 0xca, 0x9d, 0x3e, 0x66, 0x92, 0xd0, 0x8f, 0xed, 0xd8, - 0x6f, 0x71, 0xc2, 0x0d, 0x58, 0x75, 0x66, 0x2b, 0xc9, 0x3d, 0xf9, 0x48, 0xe9, 0x28, 0xa6, 0x82, - 0x0d, 0x7b, 0xe9, 0x9f, 0xc2, 0x5a, 0xc4, 0x38, 0xdb, 0x81, 0x67, 0x30, 0xdb, 0x72, 0xc1, 0x73, - 0x1c, 0x59, 0x4a, 0xce, 0x5e, 0x8a, 0x8f, 0xf2, 0x5c, 0xf4, 0x60, 0x0b, 0xbf, 0x8e, 0x43, 0xd6, - 0x8f, 0x82, 0x9e, 0xc1, 0xb4, 0x81, 0xf5, 0x53, 0xa5, 0x45, 0xf7, 0x35, 0xb3, 0xb5, 0x11, 0xc5, - 0x2d, 0xdf, 0xa0, 0x78, 0x7b, 0x53, 0xa2, 0x4d, 0x82, 0x0e, 0x21, 0x7b, 0xaa, 0x75, 0xfa, 0x5d, - 0x2c, 0xe1, 0xb3, 0x9e, 0xac, 0x3a, 0x07, 0x90, 0xd9, 0xda, 0x8c, 0x64, 0xf3, 0x92, 0x10, 0x94, - 0x6d, 0xfc, 0xbd, 0x29, 0xf1, 0xca, 0xa9, 0x17, 0xc4, 0xff, 0x8c, 0x83, 0x69, 0x36, 0x1b, 0xfa, - 0x10, 0x12, 0xe6, 0x79, 0x8f, 0x4a, 0x37, 0xbf, 0x75, 0x7b, 0x94, 0x74, 0xf9, 0xe6, 0x79, 0x0f, - 0x8b, 0x84, 0x44, 0xf8, 0x04, 0x12, 0xd6, 0x17, 0xca, 0xc0, 0xf4, 0x61, 0xed, 0x45, 0xad, 0xfe, - 0xaa, 0x96, 0x9d, 0x42, 0xcb, 0x80, 0x4a, 0xf5, 0x5a, 0x53, 0xac, 0x57, 0xab, 0x65, 0x51, 0x6a, - 0x94, 0xc5, 0x97, 0x95, 0x52, 0x39, 0xcb, 0xa1, 0xf7, 0x60, 0xe3, 0x65, 0xbd, 0x7a, 0xb8, 0x5f, - 0x96, 0x0a, 0xa5, 0x52, 0xb9, 0xd1, 0xa8, 0x14, 0x2b, 0xd5, 0x4a, 0xf3, 0xb5, 0x54, 0xaa, 0xd7, - 0x1a, 0x4d, 0xb1, 0x50, 0xa9, 0x35, 0x1b, 0xd9, 0x18, 0xff, 0x07, 0x1c, 0x5c, 0xf1, 0x2d, 0x00, - 0x15, 0x3c, 0x12, 0x3e, 0x18, 0x77, 0xe1, 0x6e, 0x49, 0xef, 0x87, 0x49, 0x0a, 0x90, 0xaa, 0xd7, - 0xaa, 0x95, 0x9a, 0x25, 0x5d, 0x06, 0xa6, 0xeb, 0xcf, 0x9f, 0x93, 0x8f, 0x58, 0x31, 0x45, 0x27, - 0x14, 0xe6, 0x61, 0xf6, 0x40, 0xd7, 0x8e, 0xb0, 0xad, 0x3f, 0x05, 0x98, 0x63, 0xdf, 0x4c, 0x5f, - 0xbe, 0x0f, 0x49, 0x1d, 0xcb, 0xed, 0x73, 0x76, 0xb4, 0x7c, 0x9e, 0xda, 0x64, 0xde, 0xb6, 0xc9, - 0x7c, 0x51, 0xd3, 0x3a, 0x2f, 0x2d, 0xfd, 0x14, 0x29, 0xa2, 0xf0, 0x4d, 0x02, 0x16, 0x4a, 0x3a, - 0x96, 0x4d, 0x4c, 0xa5, 0x65, 0xac, 0x43, 0x6d, 0xef, 0x19, 0xcc, 0x5b, 0xfa, 0xd5, 0x52, 0xcc, - 0x73, 0x49, 0x97, 0xd5, 0x13, 0xcc, 0x8e, 0x7e, 0xc9, 0xde, 0x81, 0x12, 0x1b, 0x15, 0xad, 0x41, - 0x71, 0xae, 0xe5, 0xfe, 0x44, 0x15, 0x58, 0x60, 0xaa, 0xe3, 0x51, 0xe9, 0xb8, 0x57, 0xa5, 0xa9, - 0x14, 0x2e, 0x95, 0x46, 0xa7, 0x5e, 0x88, 0x82, 0x0d, 0xf4, 0x02, 0xa0, 0x27, 0xeb, 0x72, 0x17, - 0x9b, 0x58, 0x37, 0x72, 0x09, 0xaf, 0x7d, 0x87, 0xac, 0x26, 0x7f, 0xe0, 0x60, 0x53, 0xfb, 0x76, - 0x91, 0xa3, 0x5d, 0xcb, 0x20, 0x5a, 0x3a, 0x36, 0x8d, 0x5c, 0x92, 0x70, 0xda, 0x1c, 0xc6, 0xa9, - 0x41, 0x51, 0x09, 0x9b, 0x62, 0xfc, 0xab, 0x22, 0x27, 0xda, 0xd4, 0xa8, 0x0e, 0x4b, 0xf6, 0x02, - 0x35, 0xd5, 0xc4, 0xaa, 0x29, 0x19, 0x5a, 0x5f, 0x6f, 0xe1, 0x5c, 0x8a, 0xec, 0xd2, 0x8a, 0x6f, - 0x89, 0x14, 0xa7, 0x41, 0x50, 0x44, 0xb6, 0x35, 0x1e, 0x20, 0x7a, 0x03, 0xbc, 0xdc, 0x6a, 0x61, - 0xc3, 0x50, 0xe8, 0x5e, 0x48, 0x3a, 0xfe, 0xa2, 0xaf, 0xe8, 0xb8, 0x8b, 0x55, 0xd3, 0xc8, 0x4d, - 0x7b, 0xb9, 0x36, 0xb5, 0x9e, 0xd6, 0xd1, 0x4e, 0xce, 0xc5, 0x01, 0x8e, 0x78, 0xdd, 0x43, 0xee, - 0x1a, 0x31, 0xf8, 0x8f, 0xe0, 0x8a, 0x6f, 0x53, 0x26, 0xf1, 0x6c, 0xfc, 0x36, 0xcc, 0xba, 0x77, - 0x62, 0x22, 0xaf, 0xf8, 0x27, 0x31, 0x58, 0x08, 0xd9, 0x03, 0xb4, 0x07, 0x69, 0x43, 0x95, 0x7b, - 0xc6, 0x5b, 0xcd, 0x64, 0xfa, 0x7b, 0x6f, 0xc8, 0x96, 0xe5, 0x1b, 0x0c, 0x97, 0x7e, 0xee, 0x4d, - 0x89, 0x0e, 0x35, 0x2a, 0x42, 0x8a, 0xee, 0xa7, 0xdf, 0x37, 0x85, 0xf1, 0xa1, 0x30, 0x87, 0x0b, - 0xa3, 0xe4, 0x1f, 0xc1, 0xbc, 0x77, 0x06, 0xb4, 0x0e, 0x19, 0x7b, 0x06, 0x49, 0x69, 0xb3, 0xb5, - 0x82, 0x0d, 0xaa, 0xb4, 0xf9, 0xf7, 0x61, 0xd6, 0xcd, 0x0c, 0xad, 0xc0, 0x0c, 0x53, 0x08, 0x07, - 0x3d, 0x4d, 0x01, 0x95, 0xb6, 0x63, 0xd3, 0x3f, 0x84, 0x45, 0xaf, 0x9e, 0x31, 0x53, 0xbe, 0xe3, - 0xac, 0x81, 0xee, 0xc5, 0xbc, 0x77, 0x0d, 0xb6, 0x9c, 0xc2, 0x2f, 0x92, 0x90, 0xf5, 0x1b, 0x0d, - 0x7a, 0x06, 0xc9, 0xa3, 0x8e, 0xd6, 0xfa, 0x9c, 0xd1, 0xbe, 0x17, 0x65, 0x5d, 0xf9, 0xa2, 0x85, - 0x45, 0xa1, 0x7b, 0x53, 0x22, 0x25, 0xb2, 0xa8, 0xbb, 0x5a, 0x5f, 0x35, 0xd9, 0xee, 0x45, 0x53, - 0xef, 0x5b, 0x58, 0x03, 0x6a, 0x42, 0x84, 0x76, 0x20, 0x43, 0xd5, 0x4e, 0xea, 0x6a, 0x6d, 0x9c, - 0x8b, 0x13, 0x1e, 0xb7, 0x22, 0x79, 0x14, 0x08, 0xee, 0xbe, 0xd6, 0xc6, 0x22, 0xc8, 0xce, 0x6f, - 0x7e, 0x0e, 0x32, 0x2e, 0xd9, 0xf8, 0x2f, 0x21, 0xe3, 0x9a, 0x0c, 0x5d, 0x83, 0xe9, 0x63, 0x43, - 0x72, 0x9c, 0xf0, 0x8c, 0x98, 0x3a, 0x36, 0x88, 0x3f, 0x5d, 0x87, 0x0c, 0x91, 0x42, 0x3a, 0xee, - 0xc8, 0x27, 0x46, 0x2e, 0xb6, 0x11, 0xb7, 0xce, 0x88, 0x80, 0x9e, 0x5b, 0x10, 0xf4, 0x08, 0x98, - 0x43, 0x91, 0x28, 0xde, 0x89, 0xae, 0xf5, 0x7b, 0x44, 0xc8, 0x99, 0x62, 0xfc, 0xe7, 0x45, 0x4e, - 0x64, 0xf7, 0x1b, 0x99, 0x6d, 0xd7, 0x1a, 0xe4, 0xff, 0x3a, 0x06, 0x30, 0x90, 0x12, 0x3d, 0x83, - 0x04, 0x59, 0x18, 0xf5, 0xfe, 0x9b, 0x63, 0x2c, 0x2c, 0x4f, 0x56, 0x47, 0xa8, 0x84, 0x7f, 0xe7, - 0x20, 0x41, 0xd8, 0xf8, 0xef, 0xa8, 0x46, 0xa5, 0xb6, 0x5b, 0x2d, 0x4b, 0xb5, 0xfa, 0x4e, 0x59, - 0x7a, 0x25, 0x56, 0x9a, 0x65, 0x31, 0xcb, 0xa1, 0x15, 0xb8, 0xe6, 0x86, 0x8b, 0xe5, 0xc2, 0x4e, - 0x59, 0x94, 0xea, 0xb5, 0xea, 0xeb, 0x6c, 0x0c, 0xf1, 0xb0, 0xbc, 0x7f, 0x58, 0x6d, 0x56, 0x82, - 0x63, 0x71, 0xb4, 0x0a, 0x39, 0xd7, 0x18, 0xe3, 0xc1, 0xd8, 0x26, 0x2c, 0xb6, 0xae, 0x51, 0xfa, - 0x93, 0x0d, 0x26, 0x91, 0x00, 0xd7, 0xdd, 0x73, 0x7a, 0x69, 0x53, 0xbc, 0xb5, 0x49, 0xe8, 0x26, - 0xe4, 0xdc, 0x38, 0x1e, 0x0e, 0xd3, 0x04, 0xa5, 0x38, 0xe7, 0xa8, 0x01, 0x51, 0xf3, 0x57, 0x30, - 0xe7, 0xb9, 0x1d, 0xac, 0x40, 0x8e, 0xb9, 0xb3, 0xb6, 0x74, 0x74, 0x6e, 0x92, 0xe0, 0x86, 0xdb, - 0x8c, 0x8b, 0x73, 0x36, 0xb4, 0x68, 0x01, 0xad, 0x03, 0xed, 0x28, 0x5d, 0xc5, 0x64, 0x38, 0x31, - 0x82, 0x03, 0x04, 0x44, 0x10, 0x84, 0xaf, 0x63, 0x90, 0x62, 0x5a, 0x71, 0xdb, 0x75, 0x3f, 0x79, - 0x58, 0xda, 0x50, 0xca, 0xd2, 0x63, 0x96, 0x31, 0xaf, 0x59, 0xa2, 0x3d, 0x98, 0x77, 0x3b, 0xf1, - 0x33, 0x3b, 0x7c, 0xbc, 0xe9, 0x3d, 0x67, 0xb7, 0x27, 0x39, 0x63, 0x41, 0xe3, 0xdc, 0xa9, 0x1b, - 0x86, 0x8a, 0x30, 0xef, 0xbb, 0x07, 0x12, 0xa3, 0xef, 0x81, 0xb9, 0x96, 0xc7, 0x25, 0x16, 0x60, - 0xc1, 0x76, 0xe1, 0x1d, 0x2c, 0x99, 0xcc, 0xc5, 0xb3, 0x7b, 0x2a, 0x1b, 0x70, 0xfd, 0x68, 0x80, - 0x6c, 0xc3, 0xf8, 0x8f, 0x01, 0x05, 0x65, 0x9d, 0xc8, 0x5f, 0xf7, 0x61, 0x21, 0xe4, 0x72, 0x41, - 0x79, 0x98, 0x21, 0x47, 0x65, 0x28, 0x26, 0x66, 0x81, 0x69, 0x50, 0xa2, 0x01, 0x8a, 0x85, 0xdf, - 0xd3, 0xf1, 0x31, 0xd6, 0x75, 0xdc, 0x26, 0x86, 0x19, 0x8a, 0xef, 0xa0, 0x08, 0x7f, 0xc8, 0x41, - 0xda, 0x86, 0xa3, 0x6d, 0x48, 0x1b, 0xf8, 0x84, 0x5e, 0x7c, 0x74, 0xae, 0x1b, 0x7e, 0xda, 0x7c, - 0x83, 0x21, 0xb0, 0x10, 0xde, 0xc6, 0xb7, 0x42, 0x78, 0xcf, 0xd0, 0x44, 0x8b, 0xff, 0x5b, 0x0e, - 0x16, 0x76, 0x70, 0x07, 0xfb, 0xe3, 0xa3, 0x61, 0xbe, 0xdd, 0x1d, 0x52, 0xc4, 0xbc, 0x21, 0x45, - 0x08, 0xab, 0x21, 0x21, 0xc5, 0x85, 0xae, 0xd9, 0x65, 0x58, 0xf4, 0xce, 0x46, 0x2f, 0x16, 0xe1, - 0xbf, 0xe3, 0x70, 0xc3, 0xd2, 0x05, 0x5d, 0xeb, 0x74, 0xb0, 0x7e, 0xd0, 0x3f, 0xea, 0x28, 0xc6, - 0xdb, 0x09, 0x16, 0x77, 0x0d, 0xa6, 0x55, 0xad, 0xed, 0x32, 0x9e, 0x94, 0xf5, 0x59, 0x69, 0xa3, - 0x32, 0x5c, 0xf5, 0x07, 0x78, 0xe7, 0xcc, 0xfd, 0x47, 0x87, 0x77, 0xd9, 0x53, 0xff, 0xdd, 0xc5, - 0x43, 0xda, 0x0a, 0x4d, 0x35, 0xb5, 0x73, 0x4e, 0x2c, 0x26, 0x2d, 0x3a, 0xdf, 0x48, 0xf4, 0xc7, - 0x6a, 0x3f, 0x70, 0x62, 0xb5, 0xa1, 0x2b, 0x1a, 0x16, 0xb6, 0x7d, 0x16, 0xb0, 0xf8, 0x14, 0x61, - 0xfd, 0xe1, 0x98, 0xac, 0x47, 0x7a, 0x82, 0x8b, 0x9c, 0xe2, 0x25, 0x98, 0xef, 0x3f, 0x70, 0xb0, - 0x1e, 0xb9, 0x04, 0x16, 0x6c, 0xb4, 0xe1, 0x4a, 0x8f, 0x0e, 0x38, 0x9b, 0x40, 0xad, 0xec, 0xe9, - 0xc8, 0x4d, 0x60, 0xf9, 0x33, 0x83, 0x7a, 0xb6, 0x61, 0xbe, 0xe7, 0x01, 0xf2, 0x05, 0x58, 0x08, - 0x41, 0x9b, 0x68, 0x31, 0x3f, 0x8d, 0xc1, 0xc6, 0x40, 0x94, 0x43, 0xb5, 0x77, 0x79, 0xea, 0xdb, - 0x1c, 0xe8, 0x16, 0x75, 0xf9, 0x8f, 0x83, 0x6b, 0x0f, 0x9f, 0x70, 0x98, 0x76, 0x2d, 0x42, 0xf2, - 0x18, 0xab, 0xcc, 0xf9, 0xa7, 0x45, 0xfa, 0x71, 0x21, 0xbb, 0xbe, 0x05, 0x37, 0x87, 0x08, 0xc4, - 0x8c, 0xfc, 0xeb, 0x04, 0xdc, 0x7c, 0x29, 0x77, 0x94, 0xb6, 0x13, 0x58, 0x86, 0xd4, 0x1f, 0x86, - 0x6f, 0x54, 0x2b, 0x60, 0x17, 0xd4, 0x97, 0x3d, 0x73, 0x6c, 0x79, 0x14, 0xff, 0x31, 0x2e, 0xc9, - 0x4b, 0x4c, 0x0a, 0x5f, 0x87, 0x24, 0x85, 0x1f, 0x8e, 0x2f, 0xeb, 0xb0, 0x14, 0xf1, 0xd0, 0xef, - 0x76, 0x9e, 0x8c, 0xcf, 0x77, 0x88, 0x77, 0xbf, 0xb0, 0x6d, 0x7f, 0x97, 0x59, 0xdc, 0xdf, 0x27, - 0x40, 0x18, 0xb6, 0x7a, 0xe6, 0x59, 0x44, 0x98, 0x69, 0x69, 0xea, 0xb1, 0xa2, 0x77, 0x71, 0x9b, - 0x65, 0x23, 0x1f, 0x8c, 0xb3, 0x79, 0xcc, 0xad, 0x94, 0x6c, 0x5a, 0x71, 0xc0, 0x06, 0xe5, 0x60, - 0xba, 0x8b, 0x0d, 0x43, 0x3e, 0xb1, 0xc5, 0xb2, 0x3f, 0xf9, 0x5f, 0xc6, 0x61, 0xc6, 0x21, 0x41, - 0x6a, 0x40, 0x83, 0xa9, 0x53, 0xdb, 0x7d, 0x17, 0x01, 0xde, 0x5d, 0x99, 0x63, 0xef, 0xa0, 0xcc, - 0x6d, 0x8f, 0x32, 0x53, 0x73, 0xd8, 0x79, 0x27, 0xb1, 0x87, 0xe8, 0xf5, 0x77, 0xae, 0x80, 0xc2, - 0xef, 0x00, 0xaa, 0x2a, 0x06, 0xcb, 0xea, 0x1c, 0xb7, 0x64, 0x25, 0x71, 0xf2, 0x99, 0x84, 0x55, - 0x53, 0x57, 0x58, 0x10, 0x9f, 0x14, 0xa1, 0x2b, 0x9f, 0x95, 0x29, 0xc4, 0x0a, 0xf4, 0x0d, 0x53, - 0xd6, 0x4d, 0x45, 0x3d, 0x91, 0x4c, 0xed, 0x73, 0xec, 0x14, 0x81, 0x6d, 0x68, 0xd3, 0x02, 0x0a, - 0xff, 0x15, 0x83, 0x05, 0x0f, 0x7b, 0xa6, 0x93, 0x4f, 0x61, 0x7a, 0xc0, 0xdb, 0x13, 0xdc, 0x87, - 0x60, 0xe7, 0xe9, 0xb6, 0xd9, 0x14, 0x68, 0x0d, 0x40, 0xc5, 0x67, 0xa6, 0x67, 0xde, 0x19, 0x0b, - 0x42, 0xe6, 0xe4, 0xff, 0x88, 0x73, 0x8a, 0x00, 0xa6, 0x6c, 0xf6, 0x0d, 0x74, 0x1f, 0x10, 0x73, - 0xd1, 0xb8, 0x2d, 0xb1, 0x9b, 0x87, 0xce, 0x3b, 0x23, 0x66, 0x9d, 0x91, 0x1a, 0xb9, 0x83, 0x0c, - 0xb4, 0xeb, 0xd4, 0x57, 0x5b, 0x9a, 0xda, 0x56, 0xcc, 0x41, 0x7d, 0xf5, 0x5a, 0x20, 0x6d, 0xa0, - 0xc3, 0x34, 0x6b, 0xbd, 0x72, 0xea, 0x85, 0xf2, 0x5f, 0x40, 0x92, 0x1e, 0xc7, 0x98, 0x75, 0x04, - 0xf4, 0x31, 0xa4, 0x0c, 0x22, 0xb1, 0xbf, 0x66, 0x12, 0xb6, 0x27, 0xee, 0x15, 0x8a, 0x8c, 0x4e, - 0xf8, 0x21, 0xf0, 0x83, 0x8b, 0x69, 0x17, 0x9b, 0xe3, 0x5f, 0xca, 0xdb, 0xd6, 0x1a, 0x84, 0x9f, - 0xc5, 0x60, 0x25, 0x94, 0xc1, 0x64, 0x15, 0x11, 0xb4, 0xe7, 0x5b, 0xc9, 0xf7, 0x83, 0xf7, 0x78, - 0x80, 0x79, 0xe8, 0x8a, 0xf8, 0x9f, 0x5e, 0xec, 0x30, 0x8b, 0x13, 0x1f, 0x66, 0xe0, 0x1c, 0xe9, - 0xce, 0xfc, 0x32, 0x06, 0x68, 0x17, 0x9b, 0x4e, 0x02, 0xcd, 0xb6, 0x34, 0xc2, 0xdf, 0x70, 0xef, - 0xe0, 0x6f, 0x7e, 0xec, 0xf1, 0x37, 0xd4, 0x63, 0xdd, 0x73, 0x75, 0x4c, 0x7c, 0x53, 0x0f, 0xbd, - 0x2d, 0x23, 0x92, 0x56, 0x9a, 0x09, 0x8c, 0x97, 0xb4, 0x5e, 0xd0, 0xad, 0xfc, 0x07, 0x07, 0x0b, - 0x1e, 0xa1, 0x99, 0x06, 0x3d, 0x00, 0x24, 0x9f, 0xca, 0x4a, 0x47, 0xb6, 0x04, 0xb3, 0x8b, 0x02, - 0xac, 0x48, 0x70, 0xd5, 0x19, 0xb1, 0xc9, 0xd0, 0x01, 0x2c, 0x74, 0xe5, 0x33, 0xa5, 0xdb, 0xef, - 0x4a, 0x6c, 0x9f, 0x0d, 0xe5, 0x4b, 0xbb, 0xa6, 0xb8, 0x12, 0xa8, 0xad, 0x57, 0x54, 0xf3, 0xc9, - 0x07, 0xa4, 0xb8, 0x4e, 0x6d, 0xf2, 0x2a, 0x23, 0x66, 0x1a, 0xa4, 0x7c, 0x89, 0x09, 0x47, 0x45, - 0x0d, 0x70, 0x8c, 0x8f, 0xcd, 0x91, 0x12, 0x0f, 0x38, 0x0a, 0x82, 0x3b, 0x1e, 0x66, 0x6b, 0xf6, - 0xb7, 0x99, 0x3a, 0xee, 0x88, 0x31, 0x80, 0xc3, 0xf6, 0x66, 0x37, 0xb4, 0xd5, 0x74, 0x2b, 0x68, - 0x3b, 0xac, 0xef, 0x12, 0xd9, 0x75, 0xfa, 0xbf, 0xb8, 0xdb, 0x8c, 0x03, 0xd8, 0xe8, 0x29, 0xc4, - 0xf5, 0x5e, 0x8b, 0xd9, 0xf0, 0xf7, 0xc6, 0xe0, 0x9f, 0x17, 0x0f, 0x4a, 0x7b, 0x53, 0xa2, 0x45, - 0xc5, 0xff, 0x59, 0x1c, 0xe2, 0xe2, 0x41, 0x09, 0x7d, 0xec, 0x69, 0xc1, 0xdc, 0x1f, 0x93, 0x8b, - 0xbb, 0x03, 0xf3, 0x4f, 0xb1, 0xb0, 0x16, 0x4c, 0x0e, 0x16, 0x4b, 0x62, 0xb9, 0xd0, 0x2c, 0x4b, - 0x3b, 0xe5, 0x6a, 0xb9, 0x59, 0x96, 0x68, 0x8b, 0x28, 0xcb, 0xa1, 0x55, 0xc8, 0x1d, 0x1c, 0x16, - 0xab, 0x95, 0xc6, 0x9e, 0x74, 0x58, 0xb3, 0x7f, 0xb1, 0xd1, 0x18, 0xca, 0xc2, 0x6c, 0xb5, 0xd2, - 0x68, 0x32, 0x40, 0x23, 0x1b, 0xb7, 0x20, 0xbb, 0xe5, 0xa6, 0x54, 0x2a, 0x1c, 0x14, 0x4a, 0x95, - 0xe6, 0xeb, 0x6c, 0x02, 0xf1, 0xb0, 0xec, 0xe5, 0xdd, 0xa8, 0x15, 0x0e, 0x1a, 0x7b, 0xf5, 0x66, - 0x36, 0x89, 0x10, 0xcc, 0x13, 0x7a, 0x1b, 0xd4, 0xc8, 0xa6, 0x2c, 0x0e, 0xa5, 0x6a, 0xbd, 0xe6, - 0xc8, 0x30, 0x8d, 0x16, 0x21, 0x6b, 0xcf, 0x2c, 0x96, 0x0b, 0x3b, 0xa4, 0xd6, 0x97, 0x46, 0x57, - 0x61, 0xae, 0xfc, 0x93, 0x83, 0x42, 0x6d, 0xc7, 0x46, 0x9c, 0x41, 0x1b, 0xb0, 0xea, 0x16, 0x47, - 0x62, 0x54, 0xe5, 0x1d, 0x52, 0xaf, 0x6b, 0x64, 0x01, 0x5d, 0x87, 0x2c, 0xeb, 0x7e, 0x95, 0xea, - 0xb5, 0x9d, 0x4a, 0xb3, 0x52, 0xaf, 0x65, 0x33, 0xb4, 0xb8, 0xb7, 0x00, 0x60, 0x49, 0xce, 0x98, - 0xcd, 0x8e, 0xae, 0xf8, 0xcd, 0xd1, 0x8a, 0x9f, 0x5d, 0xd1, 0xfe, 0xcf, 0x18, 0x2c, 0xd1, 0x92, - 0xb6, 0x5d, 0x40, 0xb7, 0x1d, 0xd6, 0x26, 0x64, 0x69, 0x29, 0x4c, 0xf2, 0x5f, 0x05, 0xf3, 0x14, - 0xfe, 0xd2, 0x4e, 0x3e, 0xec, 0xf6, 0x53, 0xcc, 0xd5, 0x7e, 0xaa, 0xf8, 0x13, 0xb4, 0x7b, 0xde, - 0x46, 0x8d, 0x6f, 0xb6, 0x61, 0x59, 0xd9, 0x7e, 0x48, 0xae, 0xf0, 0x60, 0x38, 0xb7, 0x61, 0x71, - 0xd4, 0x45, 0x12, 0xfc, 0x0b, 0xba, 0xba, 0xe7, 0xb0, 0xec, 0x97, 0x97, 0x19, 0xf4, 0xfd, 0x40, - 0x3b, 0xc5, 0xf1, 0xbd, 0x0e, 0xae, 0x83, 0x21, 0xfc, 0x0b, 0x07, 0x69, 0x1b, 0x6c, 0xc5, 0x38, - 0x96, 0x5f, 0xf2, 0x14, 0x51, 0x67, 0x2c, 0x88, 0x53, 0x93, 0x75, 0x37, 0x42, 0x62, 0xfe, 0x46, - 0x48, 0xe8, 0x39, 0xc7, 0x43, 0xcf, 0xf9, 0x47, 0x30, 0xd7, 0xb2, 0xc4, 0x57, 0x34, 0x55, 0x32, - 0x95, 0xae, 0x5d, 0x23, 0x0d, 0x36, 0x2e, 0x9b, 0xf6, 0x6b, 0x03, 0x71, 0xd6, 0x26, 0xb0, 0x40, - 0x68, 0x03, 0x66, 0x49, 0x23, 0x53, 0x32, 0x35, 0xa9, 0x6f, 0xe0, 0x5c, 0x92, 0xa4, 0xd9, 0x40, - 0x60, 0x4d, 0xed, 0xd0, 0xc0, 0xc2, 0xdf, 0x71, 0xb0, 0x44, 0x0b, 0x61, 0x7e, 0x75, 0x1c, 0xd5, - 0xd0, 0x71, 0x6b, 0x9c, 0xef, 0x4a, 0x0c, 0x65, 0xf8, 0x6d, 0x55, 0xf2, 0x72, 0xb0, 0xec, 0x9f, - 0x8f, 0xa5, 0xf9, 0xbf, 0x8a, 0xc1, 0xa2, 0x15, 0x9f, 0xd9, 0x03, 0x97, 0x1d, 0x42, 0x4f, 0x70, - 0x92, 0xbe, 0xcd, 0x4c, 0x04, 0x36, 0x73, 0xcf, 0x9f, 0x44, 0xdf, 0x75, 0x47, 0x98, 0xfe, 0x15, - 0x7c, 0x5b, 0x7b, 0xf9, 0x97, 0x1c, 0x2c, 0xf9, 0xe6, 0x63, 0xf6, 0xf2, 0x91, 0x3f, 0x2b, 0xb8, - 0x15, 0x21, 0xdf, 0x3b, 0xe5, 0x05, 0x8f, 0xed, 0x78, 0x7c, 0x32, 0xb3, 0xfc, 0xe7, 0x18, 0xac, - 0x0d, 0x2e, 0x35, 0xf2, 0x94, 0xa0, 0x3d, 0x41, 0xb1, 0xeb, 0x62, 0x1d, 0xfb, 0x4f, 0xfc, 0x0e, - 0x77, 0x2b, 0x78, 0xcf, 0x86, 0x88, 0x34, 0xcc, 0xf1, 0x86, 0xd6, 0x88, 0x13, 0x93, 0xd6, 0x88, - 0x2f, 0xa4, 0x01, 0xbf, 0xef, 0x2e, 0x7f, 0x7b, 0xc5, 0x67, 0x9a, 0x30, 0x66, 0x1f, 0xe9, 0x09, - 0x5c, 0x23, 0x29, 0x80, 0xf3, 0x12, 0xc6, 0xee, 0xcf, 0x53, 0x97, 0x98, 0x16, 0x97, 0xac, 0x61, - 0xe7, 0xf9, 0x07, 0xeb, 0x9d, 0xb4, 0x85, 0x6f, 0x12, 0xb0, 0x6c, 0xa5, 0x08, 0x0d, 0x53, 0x3e, - 0x99, 0xa4, 0xab, 0xf0, 0xdb, 0xc1, 0x22, 0x6d, 0xcc, 0x7b, 0x2c, 0xe1, 0x5c, 0xc7, 0xa9, 0xcd, - 0xa2, 0x3c, 0x2c, 0x18, 0xa6, 0x7c, 0x42, 0xdc, 0x81, 0xac, 0x9f, 0x60, 0x53, 0xea, 0xc9, 0xe6, - 0x5b, 0x66, 0xeb, 0x57, 0xd9, 0x50, 0x93, 0x8c, 0x1c, 0xc8, 0xe6, 0xdb, 0x4b, 0x3a, 0x48, 0xf4, - 0x63, 0xbf, 0x53, 0x78, 0x7f, 0xc4, 0x5a, 0x86, 0xe8, 0xd6, 0x4f, 0x22, 0x0a, 0xf9, 0x8f, 0x46, - 0xb0, 0x1c, 0x5d, 0xc0, 0xbf, 0x78, 0xe1, 0xfa, 0x3b, 0xee, 0x01, 0x5c, 0x87, 0x6b, 0x81, 0xc5, - 0xb3, 0x2b, 0xe4, 0xf7, 0x20, 0x67, 0x0d, 0x1d, 0xaa, 0xc6, 0x84, 0xea, 0x18, 0xa1, 0x31, 0xb1, - 0x28, 0x8d, 0x59, 0x84, 0xe4, 0xb1, 0xa6, 0xb7, 0x68, 0xb6, 0x93, 0x16, 0xe9, 0x87, 0xb0, 0x02, - 0xd7, 0x43, 0xa6, 0x67, 0xb2, 0xfd, 0x4d, 0x92, 0x0a, 0x37, 0x79, 0x93, 0xea, 0xd3, 0x28, 0x5b, - 0xf9, 0xc0, 0xad, 0x0c, 0xa1, 0xfd, 0x9c, 0x6f, 0xc3, 0x5a, 0xd6, 0x21, 0xe3, 0xc6, 0x63, 0x97, - 0xa3, 0x39, 0xc2, 0x9c, 0x92, 0x17, 0xea, 0x9d, 0xa5, 0x7c, 0xbd, 0xb3, 0xea, 0xc0, 0xd4, 0xa6, - 0xbd, 0x01, 0x6f, 0xe4, 0x56, 0x0c, 0x31, 0xb6, 0x37, 0x01, 0x63, 0x4b, 0x7b, 0x1b, 0x72, 0x91, - 0x4c, 0x7f, 0x03, 0xcc, 0x8d, 0x29, 0x75, 0x68, 0xa7, 0x4c, 0xe8, 0x01, 0x4f, 0x35, 0x7e, 0xf2, - 0xde, 0x95, 0x4f, 0x8d, 0x62, 0x01, 0x35, 0x0a, 0xb7, 0xb1, 0x35, 0x58, 0x09, 0x9d, 0x91, 0x09, - 0xf4, 0xc7, 0x1c, 0x15, 0xd7, 0x29, 0x8a, 0x35, 0x4c, 0xd9, 0x34, 0xc6, 0x15, 0x88, 0x0d, 0xba, - 0x05, 0xa2, 0x20, 0x22, 0xd0, 0x84, 0x86, 0x22, 0xfc, 0x29, 0x47, 0x77, 0xc7, 0x2f, 0x0b, 0xbb, - 0x99, 0xef, 0x42, 0xb2, 0x4f, 0xea, 0xfe, 0x34, 0x42, 0x5b, 0xf0, 0x9a, 0xc6, 0xa1, 0x35, 0x24, - 0x52, 0x8c, 0x4b, 0xab, 0xa4, 0x0a, 0xbf, 0xe2, 0x20, 0xe3, 0xe2, 0x8f, 0x56, 0x61, 0xc6, 0x29, - 0x15, 0xd9, 0xb9, 0x91, 0x03, 0xb0, 0x4e, 0xc0, 0xd4, 0x4c, 0xb9, 0xc3, 0x5e, 0xaa, 0xd0, 0x0f, - 0x2b, 0x9d, 0xed, 0x1b, 0x98, 0x86, 0xce, 0x71, 0x91, 0xfc, 0x46, 0xf7, 0x21, 0xd1, 0x57, 0x15, - 0x93, 0x38, 0x83, 0x79, 0xbf, 0x95, 0x93, 0xa9, 0xf2, 0x87, 0xaa, 0x62, 0x8a, 0x04, 0x4b, 0xb8, - 0x07, 0x09, 0xeb, 0xcb, 0x5b, 0xad, 0x98, 0x81, 0x64, 0xf1, 0x75, 0xb3, 0xdc, 0xc8, 0x72, 0x08, - 0x20, 0x55, 0xa1, 0xb9, 0x7d, 0x4c, 0xa8, 0xda, 0x4f, 0x56, 0x9d, 0x45, 0x58, 0x8e, 0x41, 0x3e, - 0x52, 0x35, 0xbd, 0x2b, 0x77, 0x88, 0xcc, 0x69, 0xd1, 0xf9, 0x8e, 0x6e, 0xa7, 0xd0, 0xe2, 0xe3, - 0xaa, 0x73, 0x22, 0x61, 0xb5, 0xa5, 0xcf, 0xa8, 0x6e, 0x45, 0x55, 0x95, 0x0a, 0xa1, 0x55, 0xa5, - 0x35, 0xcf, 0x8d, 0x3c, 0xa2, 0x9e, 0xf4, 0xeb, 0x18, 0x2c, 0x85, 0xe2, 0xa1, 0xc7, 0xee, 0x4a, - 0xd2, 0xcd, 0xa1, 0x3c, 0xdd, 0x35, 0xa4, 0xff, 0xe1, 0x68, 0x0d, 0x69, 0xdb, 0x53, 0x43, 0xba, - 0x33, 0x92, 0xde, 0x5d, 0x3d, 0xfa, 0x2b, 0x2e, 0xa2, 0x7a, 0xd4, 0x68, 0x16, 0x76, 0xcb, 0xd2, - 0x61, 0x8d, 0xfe, 0x75, 0xaa, 0x47, 0x8b, 0x90, 0x1d, 0xd4, 0x54, 0xa4, 0x46, 0xb3, 0xd0, 0x6c, - 0x64, 0x63, 0xc1, 0xca, 0x4d, 0x3c, 0xb4, 0x2e, 0x93, 0x18, 0x5d, 0x82, 0x49, 0x52, 0x94, 0x15, - 0x40, 0x8c, 0x7a, 0xbf, 0x7e, 0x58, 0x6b, 0x4a, 0xbb, 0x62, 0xfd, 0xf0, 0x80, 0x3d, 0xda, 0x72, - 0xea, 0x33, 0x8b, 0x80, 0xd8, 0x91, 0xb9, 0x9f, 0xe1, 0xff, 0x39, 0x07, 0x0b, 0x1e, 0x30, 0x3b, - 0x41, 0x57, 0xbf, 0x9c, 0xf3, 0xf4, 0xcb, 0x1f, 0xc2, 0xa2, 0x95, 0x62, 0x52, 0x73, 0x31, 0xa4, - 0x1e, 0xd6, 0x49, 0x45, 0x9c, 0x29, 0xfe, 0xd5, 0xae, 0x7c, 0xc6, 0xba, 0x06, 0x07, 0x58, 0xb7, - 0x18, 0x5f, 0x42, 0x5d, 0x58, 0xf8, 0x2a, 0x4e, 0x03, 0x99, 0x89, 0x13, 0xa1, 0x91, 0x8e, 0x2a, - 0x98, 0x29, 0xc5, 0x27, 0xc8, 0x94, 0x22, 0xdc, 0x5c, 0x62, 0xa2, 0xe8, 0x79, 0xf2, 0xeb, 0xbe, - 0x36, 0xb8, 0xd2, 0x69, 0xa8, 0x7b, 0xdf, 0xad, 0xc4, 0x23, 0x53, 0xb3, 0xd4, 0x57, 0x45, 0xee, - 0xe7, 0x97, 0x95, 0x58, 0x17, 0x68, 0xa8, 0x76, 0x81, 0x84, 0x6a, 0xeb, 0x7f, 0x39, 0x48, 0x57, - 0xda, 0x58, 0x35, 0xe9, 0xda, 0xe6, 0x3c, 0xff, 0xa9, 0x81, 0x56, 0x23, 0xfe, 0x81, 0x83, 0x2c, - 0x8c, 0x5f, 0x1b, 0xfa, 0xef, 0x1d, 0xc2, 0x14, 0x3a, 0x76, 0xfd, 0x97, 0x89, 0xa7, 0xf5, 0xf1, - 0x5e, 0x80, 0x32, 0xc4, 0xcf, 0xf1, 0xb7, 0x47, 0x60, 0x39, 0xf3, 0x3c, 0x81, 0x24, 0x79, 0x93, - 0x8f, 0x16, 0x9d, 0xff, 0x0b, 0x70, 0x3d, 0xd9, 0xe7, 0x97, 0x7c, 0x50, 0x9b, 0x6e, 0xeb, 0x1f, - 0x67, 0x00, 0x06, 0x79, 0x29, 0x7a, 0x01, 0xb3, 0xee, 0x67, 0xc1, 0x68, 0x65, 0xc8, 0xa3, 0x74, - 0x7e, 0x35, 0x7c, 0xd0, 0x91, 0xe9, 0x05, 0xcc, 0xba, 0x9f, 0x82, 0x0d, 0x98, 0x85, 0x3c, 0x47, - 0x1b, 0x30, 0x0b, 0x7d, 0x3d, 0x36, 0x85, 0x3a, 0x70, 0x2d, 0xe2, 0x31, 0x10, 0xba, 0x33, 0xde, - 0x93, 0x29, 0xfe, 0x7b, 0x63, 0xbe, 0x2a, 0x12, 0xa6, 0x90, 0x0e, 0xd7, 0x23, 0x5f, 0xbb, 0xa0, - 0xcd, 0x71, 0x5f, 0xe8, 0xf0, 0x77, 0xc7, 0xc0, 0x74, 0xe6, 0xec, 0x03, 0x1f, 0xdd, 0x62, 0x47, - 0x77, 0xc7, 0x7e, 0xfb, 0xc1, 0xdf, 0x1b, 0xbf, 0x63, 0x2f, 0x4c, 0xa1, 0x3d, 0xc8, 0xb8, 0x7a, - 0xad, 0x88, 0x0f, 0x6d, 0xc0, 0x52, 0xc6, 0x2b, 0x43, 0x9a, 0xb3, 0x94, 0x93, 0xab, 0xfd, 0x35, - 0xe0, 0x14, 0x6c, 0xe4, 0x0d, 0x38, 0x85, 0xf4, 0xcb, 0xfc, 0xdb, 0xef, 0xbb, 0xe4, 0xc3, 0xb6, - 0x3f, 0x3c, 0x4a, 0x08, 0xdb, 0xfe, 0x88, 0x88, 0x41, 0x98, 0x42, 0x9f, 0xc0, 0xbc, 0xb7, 0xa4, - 0x8d, 0xd6, 0x86, 0x96, 0xe6, 0xf9, 0x1b, 0x51, 0xc3, 0x6e, 0x96, 0xde, 0x0a, 0xea, 0x80, 0x65, - 0x68, 0x25, 0x77, 0xc0, 0x32, 0xa2, 0xf0, 0x3a, 0x65, 0xf9, 0x27, 0x4f, 0x5d, 0x70, 0xe0, 0x9f, - 0xc2, 0xca, 0x99, 0x03, 0xff, 0x14, 0x5a, 0x4c, 0x14, 0xa6, 0x90, 0x02, 0xcb, 0xe1, 0x65, 0x29, - 0x74, 0x7b, 0xac, 0xaa, 0x1b, 0x7f, 0x67, 0x14, 0x9a, 0x33, 0x55, 0x0b, 0x16, 0x42, 0x5a, 0xe1, - 0x48, 0x18, 0xda, 0x27, 0xa7, 0x93, 0xdc, 0x1a, 0xa3, 0x97, 0x2e, 0x58, 0xd1, 0xc6, 0xd6, 0xbf, - 0x25, 0x21, 0x41, 0xae, 0xfd, 0x26, 0x5c, 0xf1, 0xd5, 0x1e, 0xd0, 0x8d, 0xe1, 0x15, 0x19, 0x7e, - 0x3d, 0x72, 0xdc, 0x59, 0xc3, 0x1b, 0xb8, 0x1a, 0xa8, 0x1b, 0xa0, 0x0d, 0x37, 0x5d, 0x58, 0x45, - 0x83, 0xbf, 0x39, 0x04, 0xc3, 0xcf, 0xdb, 0xeb, 0xdb, 0x36, 0x46, 0x25, 0xb6, 0x5e, 0xde, 0x51, - 0xfe, 0xec, 0x33, 0x1a, 0x65, 0xf9, 0x3d, 0x99, 0xe0, 0x95, 0x2b, 0xd4, 0x87, 0xdd, 0x1a, 0x8a, - 0xe3, 0xcc, 0xf0, 0xa9, 0x13, 0xde, 0xb9, 0x32, 0x28, 0xe4, 0x11, 0x2e, 0x34, 0xd3, 0xe3, 0x85, - 0x61, 0x28, 0x0e, 0xfb, 0x57, 0x90, 0xf5, 0xdf, 0xf3, 0x68, 0x7d, 0x44, 0xd8, 0xc1, 0x6f, 0x44, - 0x23, 0xf8, 0x77, 0xc6, 0xef, 0x64, 0xfc, 0x52, 0x85, 0xb9, 0x97, 0x5b, 0x43, 0x71, 0xdc, 0x6e, - 0xd1, 0x15, 0xe1, 0x0e, 0xdc, 0x62, 0x30, 0x1a, 0x1e, 0xb8, 0xc5, 0x90, 0x90, 0x58, 0x98, 0xda, - 0x7e, 0x06, 0x20, 0x77, 0x7a, 0x6f, 0x65, 0x09, 0xab, 0xfd, 0x2e, 0x5a, 0x0d, 0x74, 0xab, 0xca, - 0x6a, 0xbf, 0x5b, 0xef, 0x59, 0x99, 0x97, 0x91, 0xfb, 0x45, 0x9a, 0xe4, 0x5b, 0x33, 0x84, 0xc0, - 0x1a, 0xd8, 0xae, 0x42, 0x76, 0x40, 0x2d, 0x91, 0x10, 0x0a, 0xdd, 0x0c, 0xe5, 0x41, 0x7a, 0xff, - 0x3e, 0x46, 0xf3, 0x0e, 0x23, 0x32, 0xba, 0xfd, 0x11, 0x40, 0xcb, 0x50, 0x24, 0x1a, 0xc3, 0xa1, - 0xb5, 0x00, 0x9f, 0xe7, 0x0a, 0xee, 0xb4, 0x6d, 0x1e, 0x7f, 0xc1, 0x84, 0x69, 0x19, 0x0a, 0x8d, - 0xf4, 0xb6, 0x7f, 0x04, 0x19, 0x2a, 0xcc, 0xb1, 0x85, 0x37, 0x8a, 0x9e, 0xc9, 0x40, 0x57, 0x4f, - 0x46, 0xb6, 0xcb, 0x30, 0x47, 0x19, 0xb0, 0xac, 0x11, 0xad, 0x07, 0x58, 0xec, 0xd3, 0x11, 0x1f, - 0x93, 0x59, 0x42, 0xc6, 0xc6, 0xb6, 0x8b, 0x30, 0x6b, 0xb3, 0x31, 0xdf, 0x6a, 0x6d, 0x74, 0x23, - 0x84, 0x8b, 0x35, 0xe0, 0x63, 0x92, 0x61, 0x4c, 0xac, 0xa1, 0x81, 0x28, 0xf6, 0xbf, 0xab, 0x06, - 0x45, 0x61, 0x99, 0x5d, 0xa8, 0x28, 0x6c, 0xac, 0x98, 0x7c, 0x13, 0x6f, 0x19, 0xca, 0x51, 0x8a, - 0x10, 0xfd, 0xe0, 0xff, 0x03, 0x00, 0x00, 0xff, 0xff, 0x84, 0x6c, 0x3a, 0xcf, 0x5b, 0x3d, 0x00, - 0x00, + // 3851 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x3b, 0x4b, 0x6c, 0x23, 0x47, + 0x76, 0x6a, 0xfe, 0x24, 0x3d, 0xea, 0xc3, 0x29, 0x7d, 0x86, 0x6a, 0x49, 0x23, 0x4d, 0x8f, 0xc7, + 0x2b, 0x8f, 0x67, 0x38, 0x6b, 0xad, 0x6d, 0xc4, 0xf2, 0x78, 0xd7, 0x24, 0xc5, 0x91, 0xb8, 0xa6, + 0x48, 0xb9, 0x49, 0x8d, 0x77, 0x26, 0x31, 0xda, 0x2d, 0xb2, 0xa4, 0x69, 0x98, 0xec, 0xa6, 0xbb, + 0x9b, 0x8a, 0xe4, 0x4b, 0x82, 0x0d, 0xf6, 0x10, 0xe4, 0x90, 0xdc, 0x76, 0x8e, 0x8b, 0x64, 0x8f, + 0x59, 0xec, 0x61, 0x11, 0xe4, 0x18, 0x20, 0xc7, 0x04, 0x09, 0x72, 0x4b, 0x90, 0xcb, 0xde, 0x82, + 0x4d, 0x90, 0x00, 0x3e, 0xe7, 0x14, 0x74, 0x55, 0x75, 0xb3, 0xff, 0x24, 0x47, 0x32, 0x7c, 0xc8, + 0x49, 0xec, 0x57, 0xef, 0xbd, 0x7a, 0x55, 0xf5, 0xde, 0xab, 0xf7, 0x29, 0xc1, 0x7b, 0xe7, 0x8a, + 0xf9, 0x72, 0x70, 0x5a, 0x68, 0x6b, 0xbd, 0xc7, 0x6d, 0x4d, 0x35, 0x65, 0x45, 0xc5, 0xfa, 0x23, + 0xc3, 0xd4, 0x74, 0xf9, 0x1c, 0x3f, 0x52, 0x54, 0x13, 0xeb, 0x67, 0x72, 0x1b, 0x3f, 0x36, 0xfa, + 0xb8, 0xfd, 0xb8, 0x6d, 0x28, 0x85, 0xbe, 0xae, 0x99, 0x1a, 0xca, 0x58, 0x3f, 0x2f, 0xde, 0xe1, + 0xb7, 0xcf, 0x35, 0xed, 0xbc, 0x8b, 0x1f, 0x13, 0xe8, 0xe9, 0xe0, 0xec, 0x71, 0x07, 0x1b, 0x6d, + 0x5d, 0xe9, 0x9b, 0x9a, 0x4e, 0x31, 0xf9, 0x2d, 0x3f, 0x86, 0xa9, 0xf4, 0xb0, 0x61, 0xca, 0xbd, + 0x3e, 0x43, 0xb8, 0xe3, 0x47, 0xf8, 0x43, 0x5d, 0xee, 0xf7, 0xb1, 0x6e, 0xd0, 0x71, 0x61, 0x15, + 0x96, 0x0f, 0xb0, 0x79, 0xdc, 0x1d, 0x9c, 0x2b, 0x6a, 0x55, 0x3d, 0xd3, 0x44, 0xfc, 0xd5, 0x00, + 0x1b, 0xa6, 0xf0, 0x6f, 0x1c, 0xac, 0xf8, 0x06, 0x8c, 0xbe, 0xa6, 0x1a, 0x18, 0x21, 0x48, 0xa9, + 0x72, 0x0f, 0xe7, 0xb9, 0x6d, 0x6e, 0x67, 0x56, 0x24, 0xbf, 0xd1, 0x7d, 0x58, 0xb8, 0xc0, 0x6a, + 0x47, 0xd3, 0xa5, 0x0b, 0xac, 0x1b, 0x8a, 0xa6, 0xe6, 0x13, 0x64, 0x74, 0x9e, 0x42, 0x9f, 0x51, + 0x20, 0x3a, 0x80, 0x99, 0x9e, 0xac, 0x2a, 0x67, 0xd8, 0x30, 0xf3, 0xc9, 0xed, 0xe4, 0x4e, 0x76, + 0xf7, 0xed, 0x02, 0x5d, 0x6a, 0x21, 0x74, 0xae, 0xc2, 0x11, 0xc3, 0xae, 0xa8, 0xa6, 0x7e, 0x25, + 0x3a, 0xc4, 0xfc, 0x87, 0x30, 0xef, 0x19, 0x42, 0x39, 0x48, 0x7e, 0x89, 0xaf, 0x98, 0x4c, 0xd6, + 0x4f, 0xb4, 0x0c, 0xe9, 0x0b, 0xb9, 0x3b, 0xc0, 0x4c, 0x12, 0xfa, 0xb1, 0x97, 0xf8, 0x3d, 0x4e, + 0xb8, 0x03, 0x1b, 0xce, 0x6c, 0x65, 0xb9, 0x2f, 0x9f, 0x2a, 0x5d, 0xc5, 0x54, 0xb0, 0x61, 0x2f, + 0xfd, 0x73, 0xd8, 0x8c, 0x18, 0x67, 0x3b, 0xf0, 0x04, 0xe6, 0xda, 0x2e, 0x78, 0x9e, 0x23, 0x4b, + 0xc9, 0xdb, 0x4b, 0xf1, 0x51, 0x5e, 0x89, 0x1e, 0x6c, 0xe1, 0x9f, 0x93, 0x90, 0xf3, 0xa3, 0xa0, + 0x27, 0x30, 0x6d, 0x60, 0xfd, 0x42, 0x69, 0xd3, 0x7d, 0xcd, 0xee, 0x6e, 0x47, 0x71, 0x2b, 0x34, + 0x29, 0xde, 0xe1, 0x94, 0x68, 0x93, 0xa0, 0x13, 0xc8, 0x5d, 0x68, 0xdd, 0x41, 0x0f, 0x4b, 0xf8, + 0xb2, 0x2f, 0xab, 0xce, 0x01, 0x64, 0x77, 0x77, 0x22, 0xd9, 0x3c, 0x23, 0x04, 0x15, 0x1b, 0xff, + 0x70, 0x4a, 0x5c, 0xbc, 0xf0, 0x82, 0xf8, 0x9f, 0x73, 0x30, 0xcd, 0x66, 0x43, 0x1f, 0x40, 0xca, + 0xbc, 0xea, 0x53, 0xe9, 0x16, 0x76, 0xef, 0x8f, 0x92, 0xae, 0xd0, 0xba, 0xea, 0x63, 0x91, 0x90, + 0x08, 0x9f, 0x42, 0xca, 0xfa, 0x42, 0x59, 0x98, 0x3e, 0xa9, 0x7f, 0x52, 0x6f, 0x7c, 0x56, 0xcf, + 0x4d, 0xa1, 0x55, 0x40, 0xe5, 0x46, 0xbd, 0x25, 0x36, 0x6a, 0xb5, 0x8a, 0x28, 0x35, 0x2b, 0xe2, + 0xb3, 0x6a, 0xb9, 0x92, 0xe3, 0xd0, 0x1b, 0xb0, 0xfd, 0xac, 0x51, 0x3b, 0x39, 0xaa, 0x48, 0xc5, + 0x72, 0xb9, 0xd2, 0x6c, 0x56, 0x4b, 0xd5, 0x5a, 0xb5, 0xf5, 0x5c, 0x2a, 0x37, 0xea, 0xcd, 0x96, + 0x58, 0xac, 0xd6, 0x5b, 0xcd, 0x5c, 0x82, 0xff, 0x29, 0x07, 0x8b, 0xbe, 0x05, 0xa0, 0xa2, 0x47, + 0xc2, 0x47, 0xe3, 0x2e, 0xdc, 0x2d, 0xe9, 0xc3, 0x30, 0x49, 0x01, 0x32, 0x8d, 0x7a, 0xad, 0x5a, + 0xb7, 0xa4, 0xcb, 0xc2, 0x74, 0xe3, 0xe9, 0x53, 0xf2, 0x91, 0x28, 0x65, 0xe8, 0x84, 0xc2, 0x02, + 0xcc, 0x1d, 0xeb, 0xda, 0x29, 0xb6, 0xf5, 0xa7, 0x08, 0xf3, 0xec, 0x9b, 0xe9, 0xcb, 0xf7, 0x21, + 0xad, 0x63, 0xb9, 0x73, 0xc5, 0x8e, 0x96, 0x2f, 0x50, 0x9b, 0x2c, 0xd8, 0x36, 0x59, 0x28, 0x69, + 0x5a, 0xf7, 0x99, 0xa5, 0x9f, 0x22, 0x45, 0x14, 0xbe, 0x49, 0xc1, 0x52, 0x59, 0xc7, 0xb2, 0x89, + 0xa9, 0xb4, 0x8c, 0x75, 0xa8, 0xed, 0x3d, 0x81, 0x05, 0x4b, 0xbf, 0xda, 0x8a, 0x79, 0x25, 0xe9, + 0xb2, 0x7a, 0x8e, 0xd9, 0xd1, 0xaf, 0xd8, 0x3b, 0x50, 0x66, 0xa3, 0xa2, 0x35, 0x28, 0xce, 0xb7, + 0xdd, 0x9f, 0xa8, 0x0a, 0x4b, 0x4c, 0x75, 0x3c, 0x2a, 0x9d, 0xf4, 0xaa, 0x34, 0x95, 0xc2, 0xa5, + 0xd2, 0xe8, 0xc2, 0x0b, 0x51, 0xb0, 0x81, 0x3e, 0x01, 0xe8, 0xcb, 0xba, 0xdc, 0xc3, 0x26, 0xd6, + 0x8d, 0x7c, 0xca, 0x6b, 0xdf, 0x21, 0xab, 0x29, 0x1c, 0x3b, 0xd8, 0xd4, 0xbe, 0x5d, 0xe4, 0xe8, + 0xc0, 0x32, 0x88, 0xb6, 0x8e, 0x4d, 0x23, 0x9f, 0x26, 0x9c, 0x76, 0xe2, 0x38, 0x35, 0x29, 0x2a, + 0x61, 0x53, 0x4a, 0xbe, 0x2a, 0x71, 0xa2, 0x4d, 0x8d, 0x1a, 0xb0, 0x62, 0x2f, 0x50, 0x53, 0x4d, + 0xac, 0x9a, 0x92, 0xa1, 0x0d, 0xf4, 0x36, 0xce, 0x67, 0xc8, 0x2e, 0xad, 0xfb, 0x96, 0x48, 0x71, + 0x9a, 0x04, 0x45, 0x64, 0x5b, 0xe3, 0x01, 0xa2, 0x17, 0xc0, 0xcb, 0xed, 0x36, 0x36, 0x0c, 0x85, + 0xee, 0x85, 0xa4, 0xe3, 0xaf, 0x06, 0x8a, 0x8e, 0x7b, 0x58, 0x35, 0x8d, 0xfc, 0xb4, 0x97, 0x6b, + 0x4b, 0xeb, 0x6b, 0x5d, 0xed, 0xfc, 0x4a, 0x1c, 0xe2, 0x88, 0x6b, 0x1e, 0x72, 0xd7, 0x88, 0xc1, + 0x7f, 0x04, 0x8b, 0xbe, 0x4d, 0x99, 0xc4, 0xb3, 0xf1, 0x7b, 0x30, 0xe7, 0xde, 0x89, 0x89, 0xbc, + 0xe2, 0x9f, 0x25, 0x60, 0x29, 0x64, 0x0f, 0xd0, 0x21, 0xcc, 0x18, 0xaa, 0xdc, 0x37, 0x5e, 0x6a, + 0x26, 0xd3, 0xdf, 0x07, 0x31, 0x5b, 0x56, 0x68, 0x32, 0x5c, 0xfa, 0x79, 0x38, 0x25, 0x3a, 0xd4, + 0xa8, 0x04, 0x19, 0xba, 0x9f, 0x7e, 0xdf, 0x14, 0xc6, 0x87, 0xc2, 0x1c, 0x2e, 0x8c, 0x92, 0x7f, + 0x07, 0x16, 0xbc, 0x33, 0xa0, 0x2d, 0xc8, 0xda, 0x33, 0x48, 0x4a, 0x87, 0xad, 0x15, 0x6c, 0x50, + 0xb5, 0xc3, 0xbf, 0x0d, 0x73, 0x6e, 0x66, 0x68, 0x1d, 0x66, 0x99, 0x42, 0x38, 0xe8, 0x33, 0x14, + 0x50, 0xed, 0x38, 0x36, 0xfd, 0x43, 0x58, 0xf6, 0xea, 0x19, 0x33, 0xe5, 0x37, 0x9d, 0x35, 0xd0, + 0xbd, 0x58, 0xf0, 0xae, 0xc1, 0x96, 0x53, 0xf8, 0x65, 0x1a, 0x72, 0x7e, 0xa3, 0x41, 0x4f, 0x20, + 0x7d, 0xda, 0xd5, 0xda, 0x5f, 0x32, 0xda, 0x37, 0xa2, 0xac, 0xab, 0x50, 0xb2, 0xb0, 0x28, 0xf4, + 0x70, 0x4a, 0xa4, 0x44, 0x16, 0x75, 0x4f, 0x1b, 0xa8, 0x26, 0xdb, 0xbd, 0x68, 0xea, 0x23, 0x0b, + 0x6b, 0x48, 0x4d, 0x88, 0xd0, 0x3e, 0x64, 0xa9, 0xda, 0x49, 0x3d, 0xad, 0x83, 0xf3, 0x49, 0xc2, + 0xe3, 0x5e, 0x24, 0x8f, 0x22, 0xc1, 0x3d, 0xd2, 0x3a, 0x58, 0x04, 0xd9, 0xf9, 0xcd, 0xcf, 0x43, + 0xd6, 0x25, 0x1b, 0xff, 0x35, 0x64, 0x5d, 0x93, 0xa1, 0xdb, 0x30, 0x7d, 0x66, 0x48, 0x8e, 0x13, + 0x9e, 0x15, 0x33, 0x67, 0x06, 0xf1, 0xa7, 0x5b, 0x90, 0x25, 0x52, 0x48, 0x67, 0x5d, 0xf9, 0xdc, + 0xc8, 0x27, 0xb6, 0x93, 0xd6, 0x19, 0x11, 0xd0, 0x53, 0x0b, 0x82, 0xde, 0x01, 0xe6, 0x50, 0x24, + 0x8a, 0x77, 0xae, 0x6b, 0x83, 0x3e, 0x11, 0x72, 0xb6, 0x94, 0xfc, 0x45, 0x89, 0x13, 0xd9, 0xfd, + 0x46, 0x66, 0x3b, 0xb0, 0x06, 0xf9, 0xdf, 0x24, 0x00, 0x86, 0x52, 0xa2, 0x27, 0x90, 0x22, 0x0b, + 0xa3, 0xde, 0x7f, 0x67, 0x8c, 0x85, 0x15, 0xc8, 0xea, 0x08, 0x95, 0xf0, 0x1f, 0x1c, 0xa4, 0x08, + 0x1b, 0xff, 0x1d, 0xd5, 0xac, 0xd6, 0x0f, 0x6a, 0x15, 0xa9, 0xde, 0xd8, 0xaf, 0x48, 0x9f, 0x89, + 0xd5, 0x56, 0x45, 0xcc, 0x71, 0x68, 0x1d, 0x6e, 0xbb, 0xe1, 0x62, 0xa5, 0xb8, 0x5f, 0x11, 0xa5, + 0x46, 0xbd, 0xf6, 0x3c, 0x97, 0x40, 0x3c, 0xac, 0x1e, 0x9d, 0xd4, 0x5a, 0xd5, 0xe0, 0x58, 0x12, + 0x6d, 0x40, 0xde, 0x35, 0xc6, 0x78, 0x30, 0xb6, 0x29, 0x8b, 0xad, 0x6b, 0x94, 0xfe, 0x64, 0x83, + 0x69, 0x24, 0xc0, 0x9a, 0x7b, 0x4e, 0x2f, 0x6d, 0x86, 0xb7, 0x36, 0x09, 0xdd, 0x85, 0xbc, 0x1b, + 0xc7, 0xc3, 0x61, 0x9a, 0xa0, 0x94, 0xe6, 0x1d, 0x35, 0x20, 0x6a, 0xfe, 0x19, 0xcc, 0x7b, 0x6e, + 0x07, 0x2b, 0x90, 0x63, 0xee, 0xac, 0x23, 0x9d, 0x5e, 0x99, 0x24, 0xb8, 0xe1, 0x76, 0x92, 0xe2, + 0xbc, 0x0d, 0x2d, 0x59, 0x40, 0xeb, 0x40, 0xbb, 0x4a, 0x4f, 0x31, 0x19, 0x4e, 0x82, 0xe0, 0x00, + 0x01, 0x11, 0x04, 0xe1, 0xb7, 0x09, 0xc8, 0x30, 0xad, 0xb8, 0xef, 0xba, 0x9f, 0x3c, 0x2c, 0x6d, + 0x28, 0x65, 0xe9, 0x31, 0xcb, 0x84, 0xd7, 0x2c, 0xd1, 0x21, 0x2c, 0xb8, 0x9d, 0xf8, 0xa5, 0x1d, + 0x3e, 0xde, 0xf5, 0x9e, 0xb3, 0xdb, 0x93, 0x5c, 0xb2, 0xa0, 0x71, 0xfe, 0xc2, 0x0d, 0x43, 0x25, + 0x58, 0xf0, 0xdd, 0x03, 0xa9, 0xd1, 0xf7, 0xc0, 0x7c, 0xdb, 0xe3, 0x12, 0x8b, 0xb0, 0x64, 0xbb, + 0xf0, 0x2e, 0x96, 0x4c, 0xe6, 0xe2, 0xd9, 0x3d, 0x95, 0x0b, 0xb8, 0x7e, 0x34, 0x44, 0xb6, 0x61, + 0xfc, 0xc7, 0x80, 0x82, 0xb2, 0x4e, 0xe4, 0xaf, 0x07, 0xb0, 0x14, 0x72, 0xb9, 0xa0, 0x02, 0xcc, + 0x92, 0xa3, 0x32, 0x14, 0x13, 0xb3, 0xc0, 0x34, 0x28, 0xd1, 0x10, 0xc5, 0xc2, 0xef, 0xeb, 0xf8, + 0x0c, 0xeb, 0x3a, 0xee, 0x10, 0xc3, 0x0c, 0xc5, 0x77, 0x50, 0x84, 0x3f, 0xe1, 0x60, 0xc6, 0x86, + 0xa3, 0x3d, 0x98, 0x31, 0xf0, 0x39, 0xbd, 0xf8, 0xe8, 0x5c, 0x77, 0xfc, 0xb4, 0x85, 0x26, 0x43, + 0x60, 0x21, 0xbc, 0x8d, 0x6f, 0x85, 0xf0, 0x9e, 0xa1, 0x89, 0x16, 0xff, 0xb7, 0x1c, 0x2c, 0xed, + 0xe3, 0x2e, 0xf6, 0xc7, 0x47, 0x71, 0xbe, 0xdd, 0x1d, 0x52, 0x24, 0xbc, 0x21, 0x45, 0x08, 0xab, + 0x98, 0x90, 0xe2, 0x5a, 0xd7, 0xec, 0x2a, 0x2c, 0x7b, 0x67, 0xa3, 0x17, 0x8b, 0xf0, 0x3f, 0x49, + 0xb8, 0x63, 0xe9, 0x82, 0xae, 0x75, 0xbb, 0x58, 0x3f, 0x1e, 0x9c, 0x76, 0x15, 0xe3, 0xe5, 0x04, + 0x8b, 0xbb, 0x0d, 0xd3, 0xaa, 0xd6, 0x71, 0x19, 0x4f, 0xc6, 0xfa, 0xac, 0x76, 0x50, 0x05, 0x6e, + 0xf9, 0x03, 0xbc, 0x2b, 0xe6, 0xfe, 0xa3, 0xc3, 0xbb, 0xdc, 0x85, 0xff, 0xee, 0xe2, 0x61, 0xc6, + 0x0a, 0x4d, 0x35, 0xb5, 0x7b, 0x45, 0x2c, 0x66, 0x46, 0x74, 0xbe, 0x91, 0xe8, 0x8f, 0xd5, 0x7e, + 0xe0, 0xc4, 0x6a, 0xb1, 0x2b, 0x8a, 0x0b, 0xdb, 0xbe, 0x08, 0x58, 0x7c, 0x86, 0xb0, 0xfe, 0x60, + 0x4c, 0xd6, 0x23, 0x3d, 0xc1, 0x75, 0x4e, 0xf1, 0x06, 0xcc, 0xf7, 0x1f, 0x38, 0xd8, 0x8a, 0x5c, + 0x02, 0x0b, 0x36, 0x3a, 0xb0, 0xd8, 0xa7, 0x03, 0xce, 0x26, 0x50, 0x2b, 0xfb, 0x70, 0xe4, 0x26, + 0xb0, 0xfc, 0x99, 0x41, 0x3d, 0xdb, 0xb0, 0xd0, 0xf7, 0x00, 0xf9, 0x22, 0x2c, 0x85, 0xa0, 0x4d, + 0xb4, 0x98, 0x9f, 0x25, 0x60, 0x7b, 0x28, 0xca, 0x89, 0xda, 0xbf, 0x39, 0xf5, 0x6d, 0x0d, 0x75, + 0x8b, 0xba, 0xfc, 0xf7, 0x82, 0x6b, 0x0f, 0x9f, 0x30, 0x4e, 0xbb, 0xd6, 0x20, 0x7d, 0x86, 0x55, + 0xe6, 0xfc, 0x67, 0x68, 0x88, 0x41, 0x21, 0xd7, 0x32, 0xee, 0x7b, 0x70, 0x37, 0x46, 0x2a, 0x66, + 0xe9, 0xbf, 0x4d, 0xc1, 0xdd, 0x67, 0x72, 0x57, 0xe9, 0x38, 0xd1, 0x65, 0x48, 0x11, 0x22, 0x7e, + 0xb7, 0xda, 0x01, 0xe3, 0xa0, 0x0e, 0xed, 0x89, 0x63, 0xd0, 0xa3, 0xf8, 0x8f, 0x71, 0x53, 0xde, + 0x60, 0x66, 0xf8, 0x3c, 0x24, 0x33, 0xfc, 0x60, 0x7c, 0x59, 0xe3, 0xf2, 0xc4, 0x13, 0xbf, 0xef, + 0x79, 0x7f, 0x7c, 0xbe, 0x31, 0x2e, 0xfe, 0xda, 0x06, 0xfe, 0x5d, 0xa6, 0x72, 0x7f, 0x9f, 0x02, + 0x21, 0x6e, 0xf5, 0xcc, 0xbd, 0x88, 0x30, 0xdb, 0xd6, 0xd4, 0x33, 0x45, 0xef, 0xe1, 0x0e, 0x4b, + 0x49, 0xde, 0x1d, 0x67, 0xf3, 0x98, 0x6f, 0x29, 0xdb, 0xb4, 0xe2, 0x90, 0x0d, 0xca, 0xc3, 0x74, + 0x0f, 0x1b, 0x86, 0x7c, 0x6e, 0x8b, 0x65, 0x7f, 0xf2, 0xbf, 0x4a, 0xc2, 0xac, 0x43, 0x82, 0xd4, + 0x80, 0x06, 0x53, 0xcf, 0x76, 0xf0, 0x3a, 0x02, 0xbc, 0xbe, 0x32, 0x27, 0x5e, 0x43, 0x99, 0x3b, + 0x1e, 0x65, 0xa6, 0xe6, 0xb0, 0xff, 0x5a, 0x62, 0xc7, 0xe8, 0xf5, 0x77, 0xae, 0x80, 0xc2, 0x1f, + 0x00, 0xaa, 0x29, 0x06, 0x4b, 0xed, 0x1c, 0xb7, 0x64, 0x65, 0x72, 0xf2, 0xa5, 0x84, 0x55, 0x53, + 0x57, 0x58, 0x24, 0x9f, 0x16, 0xa1, 0x27, 0x5f, 0x56, 0x28, 0xc4, 0x8a, 0xf6, 0x0d, 0x53, 0xd6, + 0x4d, 0x45, 0x3d, 0x97, 0x4c, 0xed, 0x4b, 0xec, 0x54, 0x82, 0x6d, 0x68, 0xcb, 0x02, 0x0a, 0xff, + 0x9d, 0x80, 0x25, 0x0f, 0x7b, 0xa6, 0x93, 0x1f, 0xc2, 0xf4, 0x90, 0xb7, 0x27, 0xc2, 0x0f, 0xc1, + 0x2e, 0xd0, 0x6d, 0xb3, 0x29, 0xd0, 0x26, 0x80, 0x8a, 0x2f, 0x4d, 0xcf, 0xbc, 0xb3, 0x16, 0x84, + 0xcc, 0xc9, 0xff, 0x8c, 0x73, 0x2a, 0x01, 0xa6, 0x6c, 0x0e, 0x0c, 0xf4, 0x10, 0x10, 0x73, 0xd1, + 0xb8, 0x23, 0xb1, 0xeb, 0x87, 0xce, 0x3b, 0x2b, 0xe6, 0x9c, 0x91, 0x3a, 0xb9, 0x88, 0x0c, 0x74, + 0xe0, 0x14, 0x59, 0xdb, 0x9a, 0xda, 0x51, 0xcc, 0x61, 0x91, 0xf5, 0x76, 0x20, 0x77, 0xa0, 0xc3, + 0xf4, 0x5e, 0x59, 0xbc, 0xf0, 0x42, 0xf9, 0xaf, 0x20, 0x4d, 0x8f, 0x63, 0xcc, 0x62, 0x02, 0xfa, + 0x18, 0x32, 0x06, 0x91, 0xd8, 0x5f, 0x38, 0x09, 0xdb, 0x13, 0xf7, 0x0a, 0x45, 0x46, 0x27, 0xfc, + 0x10, 0xf8, 0xe1, 0xc5, 0x74, 0x80, 0xcd, 0xf1, 0x6f, 0xe6, 0x3d, 0x6b, 0x0d, 0xc2, 0xcf, 0x13, + 0xb0, 0x1e, 0xca, 0x60, 0xb2, 0xb2, 0x08, 0x3a, 0xf4, 0xad, 0xe4, 0xfb, 0xc1, 0xcb, 0x3c, 0xc0, + 0x3c, 0x74, 0x45, 0xfc, 0x1f, 0x5f, 0xef, 0x30, 0x4b, 0x13, 0x1f, 0x66, 0xe0, 0x1c, 0xe9, 0xce, + 0xfc, 0x2a, 0x01, 0xe8, 0x00, 0x9b, 0x4e, 0x16, 0xcd, 0xb6, 0x34, 0xc2, 0xdf, 0x70, 0xaf, 0xe1, + 0x6f, 0x7e, 0xec, 0xf1, 0x37, 0xd4, 0x63, 0x3d, 0x70, 0xb5, 0x4d, 0x7c, 0x53, 0xc7, 0xde, 0x96, + 0x11, 0x99, 0x2b, 0x4d, 0x07, 0xc6, 0xcb, 0x5c, 0xaf, 0xe9, 0x56, 0x7e, 0xc7, 0xc1, 0x92, 0x47, + 0x68, 0xa6, 0x41, 0x8f, 0x00, 0xc9, 0x17, 0xb2, 0xd2, 0x95, 0x2d, 0xc1, 0xec, 0xca, 0x00, 0xab, + 0x14, 0xdc, 0x72, 0x46, 0x6c, 0x32, 0x74, 0x0c, 0x4b, 0x3d, 0xf9, 0x52, 0xe9, 0x0d, 0x7a, 0x12, + 0xdb, 0x67, 0x43, 0xf9, 0xda, 0x2e, 0x2c, 0xae, 0x07, 0x0a, 0xec, 0x55, 0xd5, 0x7c, 0xff, 0x5d, + 0x52, 0x61, 0xa7, 0x36, 0x79, 0x8b, 0x11, 0x33, 0x0d, 0x52, 0xbe, 0xc6, 0x84, 0xa3, 0xa2, 0x06, + 0x38, 0x26, 0xc7, 0xe6, 0x48, 0x89, 0x87, 0x1c, 0x05, 0xc1, 0x1d, 0x14, 0xb3, 0x35, 0xfb, 0x7b, + 0x4d, 0x5d, 0x77, 0xc4, 0x18, 0xc0, 0x61, 0x7b, 0x73, 0x10, 0xda, 0x6f, 0xba, 0x17, 0xb4, 0x1d, + 0xd6, 0x7c, 0x89, 0x6c, 0x3d, 0xbd, 0x4a, 0xb9, 0xcd, 0x38, 0x80, 0x8d, 0x3e, 0x84, 0xa4, 0xde, + 0x6f, 0x33, 0x1b, 0xfe, 0xde, 0x18, 0xfc, 0x0b, 0xe2, 0x71, 0xf9, 0x70, 0x4a, 0xb4, 0xa8, 0xf8, + 0xdf, 0x24, 0x21, 0x29, 0x1e, 0x97, 0xd1, 0xc7, 0x9e, 0x3e, 0xcc, 0xc3, 0x31, 0xb9, 0xb8, 0xdb, + 0x30, 0xff, 0x99, 0x08, 0xeb, 0xc3, 0xe4, 0x61, 0xb9, 0x2c, 0x56, 0x8a, 0xad, 0x8a, 0xb4, 0x5f, + 0xa9, 0x55, 0x5a, 0x15, 0x89, 0xf6, 0x89, 0x72, 0x1c, 0xda, 0x80, 0xfc, 0xf1, 0x49, 0xa9, 0x56, + 0x6d, 0x1e, 0x4a, 0x27, 0x75, 0xfb, 0x17, 0x1b, 0x4d, 0xa0, 0x1c, 0xcc, 0xd5, 0xaa, 0xcd, 0x16, + 0x03, 0x34, 0x73, 0x49, 0x0b, 0x72, 0x50, 0x69, 0x49, 0xe5, 0xe2, 0x71, 0xb1, 0x5c, 0x6d, 0x3d, + 0xcf, 0xa5, 0x10, 0x0f, 0xab, 0x5e, 0xde, 0xcd, 0x7a, 0xf1, 0xb8, 0x79, 0xd8, 0x68, 0xe5, 0xd2, + 0x08, 0xc1, 0x02, 0xa1, 0xb7, 0x41, 0xcd, 0x5c, 0xc6, 0xe2, 0x50, 0xae, 0x35, 0xea, 0x8e, 0x0c, + 0xd3, 0x68, 0x19, 0x72, 0xf6, 0xcc, 0x62, 0xa5, 0xb8, 0x4f, 0x0a, 0x7e, 0x33, 0xe8, 0x16, 0xcc, + 0x57, 0x7e, 0x72, 0x5c, 0xac, 0xef, 0xdb, 0x88, 0xb3, 0x68, 0x1b, 0x36, 0xdc, 0xe2, 0x48, 0x8c, + 0xaa, 0xb2, 0x4f, 0x8a, 0x76, 0xcd, 0x1c, 0xa0, 0x35, 0xc8, 0xb1, 0x16, 0x58, 0xb9, 0x51, 0xdf, + 0xaf, 0xb6, 0xaa, 0x8d, 0x7a, 0x2e, 0x4b, 0x2b, 0x7c, 0x4b, 0x00, 0x96, 0xe4, 0x8c, 0xd9, 0xdc, + 0xe8, 0xb2, 0xdf, 0x3c, 0x45, 0xc9, 0xc3, 0xe2, 0x70, 0x67, 0x9e, 0x56, 0xea, 0xe5, 0x4a, 0x6e, + 0x81, 0x16, 0x04, 0xed, 0x82, 0xf7, 0x7f, 0x25, 0x60, 0x85, 0x56, 0xbc, 0xed, 0xfa, 0xba, 0xed, + 0xca, 0x76, 0x20, 0x47, 0x2b, 0x65, 0x92, 0xff, 0x92, 0x58, 0xa0, 0xf0, 0x67, 0x76, 0x5a, 0x62, + 0x77, 0xa7, 0x12, 0xae, 0xee, 0x54, 0xd5, 0x9f, 0xbf, 0x3d, 0xf0, 0xf6, 0x71, 0x7c, 0xb3, 0xc5, + 0x25, 0x6d, 0x47, 0x21, 0x59, 0xc4, 0xa3, 0x78, 0x6e, 0x71, 0x11, 0xd6, 0x75, 0xf2, 0xff, 0x6b, + 0x3a, 0xc1, 0xa7, 0xb0, 0xea, 0x97, 0x97, 0x99, 0xfa, 0xc3, 0x40, 0xb7, 0xc5, 0xf1, 0xca, 0x0e, + 0xae, 0x83, 0x21, 0xfc, 0x2b, 0x07, 0x33, 0x36, 0xd8, 0x8a, 0x7e, 0x2c, 0x8f, 0xe5, 0xa9, 0xb1, + 0xce, 0x5a, 0x10, 0xa7, 0x64, 0xeb, 0xee, 0x93, 0x24, 0xfc, 0x7d, 0x92, 0xd0, 0x73, 0x4e, 0x86, + 0x9e, 0xf3, 0x8f, 0x60, 0xbe, 0x6d, 0x89, 0xaf, 0x68, 0xaa, 0x64, 0x2a, 0x3d, 0xbb, 0x84, 0x1a, + 0xec, 0x6b, 0xb6, 0xec, 0xc7, 0x08, 0xe2, 0x9c, 0x4d, 0x60, 0x81, 0xd0, 0x36, 0xcc, 0x91, 0x3e, + 0xa7, 0x64, 0x6a, 0xd2, 0xc0, 0xc0, 0xf9, 0x34, 0x29, 0x28, 0x01, 0x81, 0xb5, 0xb4, 0x13, 0x03, + 0x0b, 0x7f, 0xc7, 0xc1, 0x0a, 0xad, 0x93, 0xf9, 0xd5, 0x71, 0x54, 0xbf, 0xc7, 0xad, 0x71, 0xbe, + 0xcb, 0x32, 0x94, 0xe1, 0xb7, 0x55, 0xe8, 0xcb, 0xc3, 0xaa, 0x7f, 0x3e, 0x56, 0x00, 0xf8, 0x75, + 0x02, 0x96, 0xad, 0xc8, 0xcd, 0x1e, 0xb8, 0xe9, 0xe0, 0x7a, 0x82, 0x93, 0xf4, 0x6d, 0x66, 0x2a, + 0xb0, 0x99, 0x87, 0xfe, 0xf4, 0xfa, 0x2d, 0x77, 0xec, 0xe9, 0x5f, 0xc1, 0xb7, 0xb5, 0x97, 0x7f, + 0xcd, 0xc1, 0x8a, 0x6f, 0x3e, 0x66, 0x2f, 0x1f, 0xf9, 0xf3, 0x85, 0x7b, 0x11, 0xf2, 0xbd, 0x56, + 0xc6, 0xf0, 0x9e, 0x1d, 0xa9, 0x4f, 0x66, 0x96, 0xff, 0x92, 0x80, 0xcd, 0xe1, 0x75, 0x47, 0x5e, + 0x1a, 0x74, 0x26, 0xa8, 0x85, 0x5d, 0xaf, 0xa1, 0xff, 0xa9, 0xdf, 0xe1, 0xee, 0x06, 0x6f, 0xe0, + 0x10, 0x91, 0xe2, 0x1c, 0x6f, 0x68, 0x09, 0x39, 0x35, 0x69, 0x09, 0xf9, 0x5a, 0x1a, 0xf0, 0x47, + 0xee, 0xea, 0xb8, 0x57, 0x7c, 0xa6, 0x09, 0x63, 0xb6, 0x99, 0xde, 0x87, 0xdb, 0x24, 0x39, 0x70, + 0x1e, 0xca, 0xd8, 0xed, 0x7b, 0xea, 0x12, 0x67, 0xc4, 0x15, 0x6b, 0xd8, 0x79, 0x1d, 0xc2, 0x5a, + 0x2b, 0x1d, 0xe1, 0x9b, 0x14, 0xac, 0x5a, 0xc9, 0x43, 0xd3, 0x94, 0xcf, 0x27, 0x69, 0x3a, 0xfc, + 0x7e, 0xb0, 0x86, 0x9b, 0xf0, 0x1e, 0x4b, 0x38, 0xd7, 0x71, 0x4a, 0xb7, 0xa8, 0x00, 0x4b, 0x86, + 0x29, 0x9f, 0x13, 0x77, 0x20, 0xeb, 0xe7, 0xd8, 0x94, 0xfa, 0xb2, 0xf9, 0x92, 0xd9, 0xfa, 0x2d, + 0x36, 0xd4, 0x22, 0x23, 0xc7, 0xb2, 0xf9, 0xf2, 0x86, 0x0e, 0x12, 0xfd, 0xd8, 0xef, 0x14, 0xde, + 0x1e, 0xb1, 0x96, 0x18, 0xdd, 0xfa, 0x49, 0x44, 0x9d, 0xff, 0x9d, 0x11, 0x2c, 0x47, 0xd7, 0xf7, + 0xaf, 0x5f, 0xd7, 0xfe, 0x8e, 0x5b, 0x04, 0x6b, 0x70, 0x3b, 0xb0, 0x78, 0x76, 0x85, 0xfc, 0x94, + 0x83, 0xbc, 0x35, 0x76, 0xa2, 0x1a, 0x13, 0xea, 0x63, 0x84, 0xca, 0x24, 0xa2, 0x54, 0x66, 0x0d, + 0xd2, 0x67, 0x9a, 0xde, 0xa6, 0x89, 0x90, 0x53, 0x29, 0xb7, 0x20, 0xc2, 0x3a, 0xac, 0x85, 0xc8, + 0xc0, 0x24, 0xfc, 0x9b, 0x34, 0x95, 0x70, 0xf2, 0x4e, 0xd6, 0xe7, 0x51, 0x16, 0xf3, 0xae, 0x5b, + 0x25, 0x42, 0x9b, 0x3e, 0xdf, 0x86, 0xcd, 0x6c, 0x41, 0xd6, 0x8d, 0xc7, 0xae, 0x48, 0x73, 0x84, + 0x51, 0xa5, 0xaf, 0xd5, 0x60, 0xcb, 0xf8, 0x1a, 0x6c, 0xb5, 0xa1, 0xc1, 0x4d, 0x7b, 0xc3, 0xde, + 0xc8, 0xad, 0x88, 0x31, 0xb9, 0x17, 0x01, 0x93, 0x9b, 0xf1, 0x76, 0xed, 0x22, 0x99, 0xfe, 0x3f, + 0x30, 0x3a, 0xa6, 0xd4, 0xa1, 0xed, 0x34, 0x61, 0x00, 0x3c, 0xd5, 0xf8, 0xc9, 0x1b, 0x5c, 0x3e, + 0x35, 0x4a, 0x04, 0xd4, 0x28, 0xc6, 0xd0, 0x36, 0x61, 0x3d, 0x74, 0x5a, 0x26, 0xd5, 0x9f, 0x72, + 0x54, 0x66, 0xa7, 0x72, 0xd6, 0x34, 0x65, 0xd3, 0x18, 0x57, 0x2a, 0x36, 0xe8, 0x96, 0x8a, 0x82, + 0x88, 0x54, 0x13, 0x5a, 0x8b, 0xf0, 0x17, 0x1c, 0xdd, 0x22, 0xbf, 0x2c, 0xec, 0x92, 0x7e, 0x0b, + 0xd2, 0x03, 0xd2, 0x1c, 0xa0, 0xc1, 0xda, 0x92, 0xd7, 0x3e, 0x4e, 0xac, 0x21, 0x91, 0x62, 0xdc, + 0x58, 0xb9, 0x55, 0xf8, 0x35, 0x07, 0x59, 0x17, 0x7f, 0xb4, 0x01, 0xb3, 0x4e, 0x3d, 0xc9, 0x4e, + 0x93, 0x1c, 0x80, 0xa5, 0x19, 0xa6, 0x66, 0xca, 0x5d, 0xf6, 0xa6, 0x85, 0x7e, 0x58, 0x99, 0xed, + 0xc0, 0xc0, 0x34, 0x8a, 0x4e, 0x8a, 0xe4, 0x37, 0x7a, 0x08, 0xa9, 0x81, 0xaa, 0x98, 0xc4, 0x23, + 0x2c, 0xf8, 0x4d, 0x9d, 0x4c, 0x55, 0x38, 0x51, 0x15, 0x53, 0x24, 0x58, 0xc2, 0x03, 0x48, 0x59, + 0x5f, 0xde, 0x92, 0xc6, 0x2c, 0xa4, 0x4b, 0xcf, 0x5b, 0x95, 0x66, 0x8e, 0x43, 0x00, 0x99, 0x2a, + 0x2d, 0x00, 0x24, 0x84, 0x9a, 0xfd, 0xb8, 0xd5, 0x59, 0x84, 0xe5, 0x1d, 0xe4, 0x53, 0x55, 0xd3, + 0x7b, 0x72, 0x97, 0xc8, 0x3c, 0x23, 0x3a, 0xdf, 0xd1, 0x3d, 0x17, 0x5a, 0xa1, 0xdc, 0x70, 0x4e, + 0x24, 0xac, 0x00, 0xf5, 0x05, 0xd5, 0xad, 0xa8, 0xd2, 0x53, 0x31, 0xb4, 0xf4, 0xb4, 0xe9, 0xb9, + 0x9c, 0x47, 0x14, 0x9d, 0x7e, 0x97, 0x80, 0x95, 0x50, 0x3c, 0xf4, 0x9e, 0xbb, 0xdc, 0x74, 0x37, + 0x96, 0xa7, 0xbb, 0xd0, 0xf4, 0xe7, 0x09, 0x5a, 0x68, 0xda, 0xf3, 0x14, 0x9a, 0xde, 0x1c, 0x49, + 0xef, 0x2e, 0x31, 0xfd, 0x23, 0x17, 0x51, 0x62, 0x6a, 0xb6, 0x8a, 0x07, 0x15, 0xe9, 0xa4, 0x4e, + 0xff, 0x3a, 0x25, 0xa6, 0x65, 0xc8, 0x0d, 0x0b, 0x2f, 0x52, 0xb3, 0x55, 0x6c, 0x35, 0x73, 0x89, + 0x60, 0x79, 0x27, 0x19, 0x5a, 0xbc, 0x49, 0x8d, 0xae, 0xd3, 0xa4, 0x29, 0xca, 0x3a, 0x20, 0x46, + 0x7d, 0xd4, 0x38, 0xa9, 0xb7, 0xa4, 0x03, 0xb1, 0x71, 0x72, 0x6c, 0x3f, 0xef, 0xca, 0xc3, 0xe2, + 0xd3, 0x86, 0x58, 0xae, 0x0c, 0x8b, 0x5c, 0xf6, 0xab, 0x2e, 0xbb, 0x88, 0xb3, 0x0c, 0x88, 0x1d, + 0xa6, 0xfb, 0x29, 0xff, 0x5f, 0x72, 0xb0, 0xe4, 0x01, 0xb3, 0xb3, 0x75, 0xf5, 0xdc, 0x39, 0x4f, + 0xcf, 0xfd, 0x31, 0x2c, 0x5b, 0x79, 0x28, 0x35, 0x24, 0x43, 0xea, 0x63, 0x9d, 0x14, 0xd4, 0x99, + 0x49, 0xdc, 0xea, 0xc9, 0x97, 0xac, 0xe9, 0x70, 0x8c, 0x75, 0x8b, 0xf1, 0x0d, 0x94, 0x95, 0x85, + 0x57, 0x49, 0x1a, 0xed, 0x4c, 0x9c, 0x2d, 0x8d, 0x74, 0x61, 0xc1, 0x74, 0x2a, 0x39, 0x41, 0x3a, + 0x15, 0xe1, 0x00, 0x53, 0x13, 0x85, 0xd8, 0x93, 0x47, 0x03, 0xf5, 0xe1, 0x8d, 0x4f, 0xe3, 0xe1, + 0x87, 0x6e, 0xf5, 0x1e, 0x99, 0xbf, 0x65, 0x5e, 0x95, 0xb8, 0x5f, 0xdc, 0x54, 0xf6, 0x5d, 0xa4, + 0x91, 0xdc, 0x35, 0xb2, 0xae, 0xdd, 0xff, 0xe5, 0x60, 0xa6, 0xda, 0xc1, 0xaa, 0x49, 0xd7, 0x36, + 0xef, 0xf9, 0x6f, 0x0f, 0xb4, 0x11, 0xf1, 0x4f, 0x20, 0x64, 0x61, 0xfc, 0x66, 0xec, 0xbf, 0x88, + 0x08, 0x53, 0xe8, 0xcc, 0xf5, 0x9f, 0x2a, 0x9e, 0xce, 0xc9, 0x1b, 0x01, 0xca, 0x10, 0x0f, 0xc8, + 0xdf, 0x1f, 0x81, 0xe5, 0xcc, 0xf3, 0x3e, 0xa4, 0xc9, 0xbb, 0x7e, 0xb4, 0xec, 0xfc, 0x6f, 0x81, + 0xeb, 0xd9, 0x3f, 0xbf, 0xe2, 0x83, 0xda, 0x74, 0xbb, 0xff, 0x34, 0x0b, 0x30, 0x4c, 0x5e, 0xd1, + 0x27, 0x30, 0xe7, 0x7e, 0x5a, 0x8c, 0xd6, 0x63, 0x1e, 0xb6, 0xf3, 0x1b, 0xe1, 0x83, 0x8e, 0x4c, + 0x9f, 0xc0, 0x9c, 0xfb, 0x39, 0xd9, 0x90, 0x59, 0xc8, 0x93, 0xb6, 0x21, 0xb3, 0xd0, 0x17, 0x68, + 0x53, 0xa8, 0x0b, 0xb7, 0x23, 0x1e, 0x14, 0xa1, 0x37, 0xc7, 0x7b, 0x76, 0xc5, 0x7f, 0x6f, 0xcc, + 0x97, 0x49, 0xc2, 0x14, 0xd2, 0x61, 0x2d, 0xf2, 0xb1, 0x0c, 0xda, 0x19, 0xf7, 0x95, 0x0f, 0xff, + 0xd6, 0x18, 0x98, 0xce, 0x9c, 0x03, 0xe0, 0xa3, 0x3b, 0xf4, 0xe8, 0xad, 0xb1, 0x9f, 0x8e, 0xf0, + 0x0f, 0xc6, 0x6f, 0xf8, 0x0b, 0x53, 0xe8, 0x10, 0xb2, 0xae, 0x56, 0x2d, 0xe2, 0x43, 0xfb, 0xb7, + 0x94, 0xf1, 0x7a, 0x4c, 0x6f, 0x97, 0x72, 0x72, 0x75, 0xcf, 0x86, 0x9c, 0x82, 0x7d, 0xc0, 0x21, + 0xa7, 0x90, 0x76, 0x9b, 0x7f, 0xfb, 0x7d, 0xd7, 0x7f, 0xd8, 0xf6, 0x87, 0xc7, 0x0f, 0x61, 0xdb, + 0x1f, 0x11, 0x4b, 0x08, 0x53, 0xe8, 0x53, 0x58, 0xf0, 0xd6, 0xbd, 0xd1, 0x66, 0x6c, 0xfd, 0x9e, + 0xbf, 0x13, 0x35, 0xec, 0x66, 0xe9, 0x2d, 0xb3, 0x0e, 0x59, 0x86, 0x96, 0x7b, 0x87, 0x2c, 0x23, + 0xaa, 0xb3, 0x53, 0x96, 0x7f, 0xf2, 0x14, 0x0f, 0x87, 0xfe, 0x29, 0xac, 0xe6, 0x39, 0xf4, 0x4f, + 0xa1, 0x15, 0x47, 0x61, 0x0a, 0x29, 0xb0, 0x1a, 0x5e, 0xbb, 0x42, 0xf7, 0xc7, 0x2a, 0xcd, 0xf1, + 0x6f, 0x8e, 0x42, 0x73, 0xa6, 0x6a, 0xc3, 0x52, 0x48, 0x27, 0x1d, 0x09, 0xb1, 0x6d, 0x76, 0x3a, + 0xc9, 0xbd, 0x31, 0x5a, 0xf1, 0x82, 0x15, 0x6d, 0xec, 0xfe, 0x7b, 0x1a, 0x52, 0xe4, 0xda, 0x6f, + 0xc1, 0xa2, 0xaf, 0x40, 0x81, 0xee, 0xc4, 0x97, 0x6d, 0xf8, 0xad, 0xc8, 0x71, 0x67, 0x0d, 0x2f, + 0xe0, 0x56, 0xa0, 0xac, 0x80, 0xb6, 0xdd, 0x74, 0x61, 0x55, 0x0f, 0xfe, 0x6e, 0x0c, 0x86, 0x9f, + 0xb7, 0xd7, 0xb7, 0x6d, 0x8f, 0xca, 0x7b, 0xbd, 0xbc, 0xa3, 0xfc, 0xd9, 0x17, 0x34, 0xca, 0xf2, + 0x7b, 0x32, 0xc1, 0x2b, 0x57, 0xa8, 0x0f, 0xbb, 0x17, 0x8b, 0xe3, 0xcc, 0xf0, 0xb9, 0x13, 0xde, + 0xb9, 0x72, 0x2b, 0xe4, 0x11, 0x2e, 0x34, 0x07, 0xe4, 0x85, 0x38, 0x14, 0x87, 0xfd, 0x67, 0x90, + 0xf3, 0xdf, 0xf3, 0x68, 0x6b, 0x44, 0xd8, 0xc1, 0x6f, 0x47, 0x23, 0xf8, 0x77, 0xc6, 0xef, 0x64, + 0xfc, 0x52, 0x85, 0xb9, 0x97, 0x7b, 0xb1, 0x38, 0x6e, 0xb7, 0xe8, 0x8a, 0x70, 0x87, 0x6e, 0x31, + 0x18, 0x0d, 0x0f, 0xdd, 0x62, 0x48, 0x48, 0x2c, 0x4c, 0xed, 0x3d, 0x01, 0x90, 0xbb, 0xfd, 0x97, + 0xb2, 0x84, 0xd5, 0x41, 0x0f, 0x6d, 0x04, 0x5a, 0x5a, 0x15, 0x75, 0xd0, 0x6b, 0xf4, 0xad, 0x9c, + 0xcc, 0xc8, 0xff, 0x72, 0x86, 0x64, 0x62, 0xb3, 0x84, 0xc0, 0x1a, 0xd8, 0xab, 0x41, 0x6e, 0x48, + 0x2d, 0x91, 0x10, 0x0a, 0xdd, 0x0d, 0xe5, 0x41, 0x9e, 0x0e, 0xf8, 0x18, 0x2d, 0x38, 0x8c, 0xc8, + 0xe8, 0xde, 0x47, 0x00, 0x6d, 0x43, 0x91, 0x68, 0x0c, 0x87, 0x36, 0x03, 0x7c, 0x9e, 0x2a, 0xb8, + 0xdb, 0xb1, 0x79, 0xfc, 0x15, 0x13, 0xa6, 0x6d, 0x28, 0x34, 0xd2, 0xdb, 0xfb, 0x11, 0x64, 0xa9, + 0x30, 0x67, 0x16, 0xde, 0x28, 0x7a, 0x26, 0x03, 0x5d, 0x3d, 0x19, 0xd9, 0xab, 0xc0, 0x3c, 0x65, + 0xc0, 0xf2, 0x49, 0xb4, 0x15, 0x60, 0x71, 0x44, 0x47, 0x7c, 0x4c, 0xe6, 0x08, 0x19, 0x1b, 0xdb, + 0x2b, 0xc1, 0x9c, 0xcd, 0xc6, 0x7c, 0xa9, 0x75, 0xd0, 0x9d, 0x10, 0x2e, 0xd6, 0x80, 0x8f, 0x49, + 0x96, 0x31, 0xb1, 0x86, 0x86, 0xa2, 0xd8, 0xff, 0xf2, 0x1a, 0x14, 0x85, 0xe5, 0x7c, 0xa1, 0xa2, + 0xb0, 0xb1, 0x52, 0xfa, 0x45, 0xb2, 0x6d, 0x28, 0xa7, 0x19, 0x42, 0xf4, 0x83, 0xff, 0x0b, 0x00, + 0x00, 0xff, 0xff, 0x8a, 0xcb, 0x75, 0x7f, 0x9f, 0x3d, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/spec.md b/spec.md index 37abf0e7..ee1c771a 100644 --- a/spec.md +++ b/spec.md @@ -177,9 +177,9 @@ capability. Node | | Node | Unpublish Publish | | Unpublish | Volume Volume | | Volume | (forced) - +---v----+---+ +----+--------+ - | PUBLISHED +------>| QUARANTINED | - +------------+ +-------------+ + +---v----+---+ +----+----------+ + | PUBLISHED +------>| QUARANTINED_P | + +------------+ +---------------+ ControllerUnpublishVolume(fenced) Figure 5: The lifecycle of a dynamically provisioned volume, from @@ -199,16 +199,16 @@ creation to destruction. +---+----^---+ | Unstage Node | | Node | Volume Stage | | Unstage | (forced) - Volume | | Volume +--------------+ - +---v----+---+ | QUARANTINED2 | - | VOL_READY | +---^----------+ + Volume | | Volume +---------------+ + +---v----+---+ | QUARANTINED_S | + | VOL_READY | +---^-----------+ +---+----^---+ | Node Node | | Node | Unpublish Publish | | Unpublish | Volume Volume | | Volume | (forced) - +---v----+---+ +----+---------+ - | PUBLISHED +------>| QUARANTINED3 | - +------------+ +--------------+ + +---v----+---+ +----+-----------+ + | PUBLISHED +------>| QUARANTINED_SP | + +------------+ +----------------+ ControllerUnpublishVolume(fenced) Figure 6: The lifecycle of a dynamically provisioned volume, from @@ -261,6 +261,12 @@ Plugins SHOULD expose all RPCs for an interface: Controller plugins SHOULD imple Unsupported RPCs SHOULD return an appropriate error code that indicates such (e.g. `CALL_NOT_IMPLEMENTED`). The full list of plugin capabilities is documented in the `ControllerGetCapabilities` and `NodeGetCapabilities` RPCs. +### A Word on Quarantine States + +The purpose of the `QUARANTINE_S`, `QUARANTINE_P`, and `QUARANTINE_SP` states are to enable recovery from node problems. +Because CSI is designed to be used in distributed systems, it is inevitable that sometimes volumes will become attached to nodes that get stuck or lost, temporarily or permanently. +Rather than require an administrator to manually clean up such situation, CSI offers a way disconnect a volume from a node "out of order" such that a volume can be disconnected from a problematic node, and safely connected to a different node, and the node can be reliably and safely cleaned up before accessing that volume again, as opposed to the normal path where the node must confirm a volume is disconnected before the controller can unpublish it. + ## Container Storage Interface This section describes the interface between COs and Plugins. @@ -1356,7 +1362,7 @@ message ControllerUnpublishVolumeRequest { // This field is OPTIONAL. Refer to the `Secrets Requirements` // section on how to use this field. map secrets = 3 [(csi_secret) = true]; - + // Indicates SP MUST make the volume inacessible to the node or nodes // it is being unpublished from. Any attempt to read or write data // to a volume from a node that has been fenced MUST NOT succeed, @@ -1366,7 +1372,7 @@ message ControllerUnpublishVolumeRequest { // The SP MAY make the volume inaccessible even when this field is // false. // This is an OPTIONAL field. - bool fence = 4; + bool fence = 4 [(alpha_field) = true]; } message ControllerUnpublishVolumeResponse { @@ -1750,6 +1756,7 @@ message ControllerServiceCapability { // condition after a volume is provisioned. GET_VOLUME = 12 [(alpha_enum_value) = true]; + // Indicates the SP supports the SINGLE_NODE_SINGLE_WRITER and/or // SINGLE_NODE_MULTI_WRITER access modes. // These access modes are intended to replace the @@ -1759,6 +1766,10 @@ message ControllerServiceCapability { // SINGLE_NODE_SINGLE_WRITER and/or SINGLE_NODE_MULTI_WRITER are // supported, in order to permit older COs to continue working. SINGLE_NODE_MULTI_WRITER = 13 [(alpha_enum_value) = true]; + + // Indicates the SP supports ControllerUnpublishVolume.fence + // field. + UNPUBLISH_FENCE = 14 [(alpha_enum_value) = true]; } Type type = 1; @@ -2245,13 +2256,13 @@ message NodeUnstageVolumeRequest { // system/filesystem, but, at a minimum, SP MUST accept a max path // length of at least 128 bytes. string staging_target_path = 2; - + // Indicates that the SP should prefer to successfully unstage the // volume, even if data loss would occur as a result. // CO MUST NOT set this field to true unless SP has the // FORCE_UNPUBLISH node capability. // This in an OPTIONAL field. - bool force = 3; + bool force = 3 [(alpha_field) = true]; } message NodeUnstageVolumeResponse { @@ -2433,13 +2444,13 @@ message NodeUnpublishVolumeRequest { // system/filesystem, but, at a minimum, SP MUST accept a max path // length of at least 128 bytes. string target_path = 2; - + // Indicates that the SP should prefer to successfully unpublish the // volume, even if data loss would occur as a result. // CO MUST NOT set this field to true unless SP has the // FORCE_UNPUBLISH node capability. // This in an OPTIONAL field. - bool force = 3; + bool force = 3 [(alpha_field) = true]; } message NodeUnpublishVolumeResponse { @@ -2612,6 +2623,12 @@ message NodeServiceCapability { // with provided volume group identifier during node stage // or node publish RPC calls. VOLUME_MOUNT_GROUP = 6 [(alpha_enum_value) = true]; + + // Indicates that the node supports the NodeUnpublishVolume.force + // field. Also indicates that the node supports the + // NodeUnstageVolume.force field if it also has the + // STAGE_UNSTAGE_VOLUME capability. + FORCE_UNPUBLISH = 7 [(alpha_enum_value) = true]; } Type type = 1; From 6fbff56dcb287c2ec5b7044d6ef1c4e300a45d7b Mon Sep 17 00:00:00 2001 From: Ben Swartzlander Date: Sat, 5 Jun 2021 13:28:52 -0400 Subject: [PATCH 3/5] Address spelling/grammar errors --- csi.proto | 10 +++++----- lib/go/csi/csi.pb.go | 10 +++++----- spec.md | 18 +++++++++--------- 3 files changed, 19 insertions(+), 19 deletions(-) diff --git a/csi.proto b/csi.proto index d7f02505..cdf0dd4b 100644 --- a/csi.proto +++ b/csi.proto @@ -789,7 +789,7 @@ message ControllerUnpublishVolumeRequest { // section on how to use this field. map secrets = 3 [(csi_secret) = true]; - // Indicates SP MUST make the volume inacessible to the node or nodes + // Indicates SP MUST make the volume inaccessible to the node or nodes // it is being unpublished from. Any attempt to read or write data // to a volume from a node that has been fenced MUST NOT succeed, // even if the volume remains staged and/or published on the node. @@ -1558,10 +1558,10 @@ message NodeServiceCapability { // or node publish RPC calls. VOLUME_MOUNT_GROUP = 6 [(alpha_enum_value) = true]; - // Indicates that the node supports the NodeUnpublishVolume.force - // field. Also indicates that the node supports the - // NodeUnstageVolume.force field if it also has the - // STAGE_UNSTAGE_VOLUME capability. + // Indicates that the Node Plugin supports the + // NodeUnpublishVolume.force field. Also indicates that the + // Node Plugin supports the NodeUnstageVolume.force field if + // it also has the STAGE_UNSTAGE_VOLUME capability. FORCE_UNPUBLISH = 7 [(alpha_enum_value) = true]; } diff --git a/lib/go/csi/csi.pb.go b/lib/go/csi/csi.pb.go index 27f3839f..ff2230cc 100644 --- a/lib/go/csi/csi.pb.go +++ b/lib/go/csi/csi.pb.go @@ -358,10 +358,10 @@ const ( // with provided volume group identifier during node stage // or node publish RPC calls. NodeServiceCapability_RPC_VOLUME_MOUNT_GROUP NodeServiceCapability_RPC_Type = 6 - // Indicates that the node supports the NodeUnpublishVolume.force - // field. Also indicates that the node supports the - // NodeUnstageVolume.force field if it also has the - // STAGE_UNSTAGE_VOLUME capability. + // Indicates that the Node Plugin supports the + // NodeUnpublishVolume.force field. Also indicates that the + // Node Plugin supports the NodeUnstageVolume.force field if + // it also has the STAGE_UNSTAGE_VOLUME capability. NodeServiceCapability_RPC_FORCE_UNPUBLISH NodeServiceCapability_RPC_Type = 7 ) @@ -2083,7 +2083,7 @@ type ControllerUnpublishVolumeRequest struct { // This field is OPTIONAL. Refer to the `Secrets Requirements` // section on how to use this field. Secrets map[string]string `protobuf:"bytes,3,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // Indicates SP MUST make the volume inacessible to the node or nodes + // Indicates SP MUST make the volume inaccessible to the node or nodes // it is being unpublished from. Any attempt to read or write data // to a volume from a node that has been fenced MUST NOT succeed, // even if the volume remains staged and/or published on the node. diff --git a/spec.md b/spec.md index ee1c771a..c9ea0b9e 100644 --- a/spec.md +++ b/spec.md @@ -1363,7 +1363,7 @@ message ControllerUnpublishVolumeRequest { // section on how to use this field. map secrets = 3 [(csi_secret) = true]; - // Indicates SP MUST make the volume inacessible to the node or nodes + // Indicates SP MUST make the volume inaccessible to the node or nodes // it is being unpublished from. Any attempt to read or write data // to a volume from a node that has been fenced MUST NOT succeed, // even if the volume remains staged and/or published on the node. @@ -2231,8 +2231,8 @@ If the corresponding Controller Plugin has `PUBLISH_UNPUBLISH_VOLUME` controller The CO MUST guarantee that this RPC is called after all `NodeUnpublishVolume` have been called and returned success for the given volume on the given node. If the Node Plugin has the `FORCE_UNPUBLISH` capability, the CO MAY specify `force` as `true` in which case the Node Plugin MUST support unstaging volumes even when access has been revoked with `ControllerUnpublishVolume`. -Because data loss is inevitable in such circumstances, the `force` flag is an indication that success is desired even it if means losing data. -It is essential that after a successful call to `NodeUnstageVolume` that there be no buffered data on the node related to the volume which might result in unintetional modification of the volume if it were to be subsequently re-staged to that node. +Because data loss is inevitable in such circumstances, the `force` flag is an indication that success is desired even if it means losing data. +It is essential that after a successful call to `NodeUnstageVolume` that there will be no buffered data on the node related to the volume which might result in unintentional modification of the volume if it was to be subsequently re-staged to that node. The Plugin SHALL assume that this RPC will be executed on the node where the volume is being used. @@ -2422,8 +2422,8 @@ If the corresponding Controller Plugin has `PUBLISH_UNPUBLISH_VOLUME` controller The Plugin SHALL assume that this RPC will be executed on the node where the volume is being used. If the Node Plugin has the `FORCE_UNPUBLISH` capability, the CO MAY specify `force` as `true` in which case the Node Plugin MUST support unpublishing volumes even when access has been revoked with `ControllerUnpublishVolume`. -Because data loss is inevitable in such circumstances, the `force` flag is an indication that success is desired even it if means losing data. -It is essential that after a successful call to `NodeUnpublishVolume` that there be no buffered data on the node related to the volume which might result in unintetional modification of the volume if it were to be subsequently re-published to that node. +Because data loss is inevitable in such circumstances, the `force` flag is an indication that success is desired even if it means losing data. +It is essential that after a successful call to `NodeUnpublishVolume` that there will be no buffered data on the node related to the volume which might result in unintetional modification of the volume if it was to be subsequently re-published to that node. This RPC is typically called by the CO when the workload using the volume is being moved to a different node, or all the workload using the volume on a node has finished. @@ -2624,10 +2624,10 @@ message NodeServiceCapability { // or node publish RPC calls. VOLUME_MOUNT_GROUP = 6 [(alpha_enum_value) = true]; - // Indicates that the node supports the NodeUnpublishVolume.force - // field. Also indicates that the node supports the - // NodeUnstageVolume.force field if it also has the - // STAGE_UNSTAGE_VOLUME capability. + // Indicates that the Node Plugin supports the + // NodeUnpublishVolume.force field. Also indicates that the + // Node Plugin supports the NodeUnstageVolume.force field if + // it also has the STAGE_UNSTAGE_VOLUME capability. FORCE_UNPUBLISH = 7 [(alpha_enum_value) = true]; } From 45b6fd2d5a3da96ad57e65b222a73cd9bfe7aa0a Mon Sep 17 00:00:00 2001 From: Ben Swartzlander Date: Sun, 6 Jun 2021 19:42:59 -0400 Subject: [PATCH 4/5] Implement jdef's grammar suggestions --- csi.proto | 5 ++--- lib/go/csi/csi.pb.go | 4 ++-- spec.md | 17 ++++++++--------- 3 files changed, 12 insertions(+), 14 deletions(-) diff --git a/csi.proto b/csi.proto index cdf0dd4b..c034f7f3 100644 --- a/csi.proto +++ b/csi.proto @@ -1081,7 +1081,6 @@ message ControllerServiceCapability { // condition after a volume is provisioned. GET_VOLUME = 12 [(alpha_enum_value) = true]; - // Indicates the SP supports the SINGLE_NODE_SINGLE_WRITER and/or // SINGLE_NODE_MULTI_WRITER access modes. // These access modes are intended to replace the @@ -1092,8 +1091,8 @@ message ControllerServiceCapability { // supported, in order to permit older COs to continue working. SINGLE_NODE_MULTI_WRITER = 13 [(alpha_enum_value) = true]; - // Indicates the SP supports ControllerUnpublishVolume.fence - // field. + // Indicates the SP supports the + // ControllerUnpublishVolume.fence field. UNPUBLISH_FENCE = 14 [(alpha_enum_value) = true]; } diff --git a/lib/go/csi/csi.pb.go b/lib/go/csi/csi.pb.go index ff2230cc..35e20309 100644 --- a/lib/go/csi/csi.pb.go +++ b/lib/go/csi/csi.pb.go @@ -244,8 +244,8 @@ const ( // SINGLE_NODE_SINGLE_WRITER and/or SINGLE_NODE_MULTI_WRITER are // supported, in order to permit older COs to continue working. ControllerServiceCapability_RPC_SINGLE_NODE_MULTI_WRITER ControllerServiceCapability_RPC_Type = 13 - // Indicates the SP supports ControllerUnpublishVolume.fence - // field. + // Indicates the SP supports the + // ControllerUnpublishVolume.fence field. ControllerServiceCapability_RPC_UNPUBLISH_FENCE ControllerServiceCapability_RPC_Type = 14 ) diff --git a/spec.md b/spec.md index c9ea0b9e..8e6c281d 100644 --- a/spec.md +++ b/spec.md @@ -265,7 +265,7 @@ The full list of plugin capabilities is documented in the `ControllerGetCapabili The purpose of the `QUARANTINE_S`, `QUARANTINE_P`, and `QUARANTINE_SP` states are to enable recovery from node problems. Because CSI is designed to be used in distributed systems, it is inevitable that sometimes volumes will become attached to nodes that get stuck or lost, temporarily or permanently. -Rather than require an administrator to manually clean up such situation, CSI offers a way disconnect a volume from a node "out of order" such that a volume can be disconnected from a problematic node, and safely connected to a different node, and the node can be reliably and safely cleaned up before accessing that volume again, as opposed to the normal path where the node must confirm a volume is disconnected before the controller can unpublish it. +Rather than require an administrator to manually clean up in such a situation, CSI offers a way to disconnect a volume from a node "out of order" such that a volume can be disconnected from problematic *node A*, and safely connected to a different *node B*, and then *node A* can be reliably and safely cleaned up before accessing that volume again; as opposed to the normal path whereby *node A* must confirm a volume is disconnected before the controller can unpublish it. ## Container Storage Interface @@ -1328,13 +1328,13 @@ The CO MUST implement the specified error recovery behavior when it encounters t Controller Plugin MUST implement this RPC call if it has `PUBLISH_UNPUBLISH_VOLUME` controller capability. This RPC is a reverse operation of `ControllerPublishVolume`. -It MUST be called after all `NodeUnstageVolume` and `NodeUnpublishVolume` on the volume are called and succeed unless the plugin has the `UNPUBLISH_FENCE` capability. +It MUST be called after both `NodeUnstageVolume` and `NodeUnpublishVolume` on the volume are called and succeed unless the plugin has the `UNPUBLISH_FENCE` capability. The Plugin SHOULD perform the work that is necessary for making the volume ready to be consumed by a different node. The Plugin MUST NOT assume that this RPC will be executed on the node where the volume was previously used. If the plugin has the `UNPUBLISH_FENCE` capability, the CO MAY specify `fence` as `true`, in which case the SP MUST ensure that the node may no longer access the volume before returning a successful response. This results in a transition into one of the `QUARANTINE` states where the node must be cleaned up without being able to access the volume like usual. -This is intended cut off an unreachable node from accessing volumes so those volumes may be safely published to another node. +This is intended to cut off an unreachable node from accessing volumes so those volumes may be safely published to another node. Once in one of the `QUARANTINE` states the volume MAY NOT be published to that node again until appropriate cleanup has happened using `NodeUnpublishVolume` and `NodeUnstageVolume` (if applicable). This RPC is typically called by the CO when the workload using the volume is being moved to a different node, or all the workload using the volume on a node has finished. @@ -1756,7 +1756,6 @@ message ControllerServiceCapability { // condition after a volume is provisioned. GET_VOLUME = 12 [(alpha_enum_value) = true]; - // Indicates the SP supports the SINGLE_NODE_SINGLE_WRITER and/or // SINGLE_NODE_MULTI_WRITER access modes. // These access modes are intended to replace the @@ -1767,8 +1766,8 @@ message ControllerServiceCapability { // supported, in order to permit older COs to continue working. SINGLE_NODE_MULTI_WRITER = 13 [(alpha_enum_value) = true]; - // Indicates the SP supports ControllerUnpublishVolume.fence - // field. + // Indicates the SP supports the + // ControllerUnpublishVolume.fence field. UNPUBLISH_FENCE = 14 [(alpha_enum_value) = true]; } @@ -2227,7 +2226,7 @@ This RPC is a reverse operation of `NodeStageVolume`. This RPC MUST undo the work by the corresponding `NodeStageVolume`. This RPC SHALL be called by the CO once for each `staging_target_path` that was successfully setup via `NodeStageVolume`. -If the corresponding Controller Plugin has `PUBLISH_UNPUBLISH_VOLUME` controller capability and the Node Plugin has `STAGE_UNSTAGE_VOLUME` capability, the CO MUST guarantee that this RPC is called and returns success before calling `ControllerUnpublishVolume` for the given node and the given volume, unless the Controller Plugin has `UNPUBLISH_FENCE` capability and the Node Plugin has the `FORCE_UNPUBLISH` capability and the `force` flag is `true`. +If the corresponding Controller Plugin has the `PUBLISH_UNPUBLISH_VOLUME` controller capability and the Node Plugin has the `STAGE_UNSTAGE_VOLUME` capability, the CO MUST guarantee that this RPC is called and returns success before calling `ControllerUnpublishVolume` for the given node and the given volume, unless the Controller Plugin has the `UNPUBLISH_FENCE` capability and the Node Plugin has the `FORCE_UNPUBLISH` capability and the `force` flag is `true`. The CO MUST guarantee that this RPC is called after all `NodeUnpublishVolume` have been called and returned success for the given volume on the given node. If the Node Plugin has the `FORCE_UNPUBLISH` capability, the CO MAY specify `force` as `true` in which case the Node Plugin MUST support unstaging volumes even when access has been revoked with `ControllerUnpublishVolume`. @@ -2418,12 +2417,12 @@ A Node Plugin MUST implement this RPC call. This RPC is a reverse operation of `NodePublishVolume`. This RPC MUST undo the work by the corresponding `NodePublishVolume`. This RPC SHALL be called by the CO at least once for each `target_path` that was successfully setup via `NodePublishVolume`. -If the corresponding Controller Plugin has `PUBLISH_UNPUBLISH_VOLUME` controller capability, the CO SHOULD issue all `NodeUnpublishVolume` (as specified above) before calling `ControllerUnpublishVolume` for the given node and the given volume, unless the Controller Plugin has `UNPUBLISH_FENCE` capability and the Node Plugin has the `FORCE_UNPUBLISH` capability and the `force` flag is `true`. +If the corresponding Controller Plugin has the `PUBLISH_UNPUBLISH_VOLUME` controller capability, the CO SHOULD issue `NodeUnpublishVolume` (as specified above) before calling `ControllerUnpublishVolume` for the given node and the given volume, unless the Controller Plugin has the `UNPUBLISH_FENCE` capability and the Node Plugin has the `FORCE_UNPUBLISH` capability and the `force` flag is `true`. The Plugin SHALL assume that this RPC will be executed on the node where the volume is being used. If the Node Plugin has the `FORCE_UNPUBLISH` capability, the CO MAY specify `force` as `true` in which case the Node Plugin MUST support unpublishing volumes even when access has been revoked with `ControllerUnpublishVolume`. Because data loss is inevitable in such circumstances, the `force` flag is an indication that success is desired even if it means losing data. -It is essential that after a successful call to `NodeUnpublishVolume` that there will be no buffered data on the node related to the volume which might result in unintetional modification of the volume if it was to be subsequently re-published to that node. +It is essential that after a successful call to `NodeUnpublishVolume` that there will be no buffered data on the node related to the volume that might result in unintentional modification of the volume if it was to be subsequently re-published to that node. This RPC is typically called by the CO when the workload using the volume is being moved to a different node, or all the workload using the volume on a node has finished. From bafe8498676f5c438011a1d23d7fd33e9428bc99 Mon Sep 17 00:00:00 2001 From: Ben Swartzlander Date: Thu, 1 Jul 2021 16:09:16 -0400 Subject: [PATCH 5/5] Update state transition diagram --- spec.md | 46 ++++++++++++++++++++++++---------------------- 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/spec.md b/spec.md index 8e6c281d..90e9d24b 100644 --- a/spec.md +++ b/spec.md @@ -188,28 +188,30 @@ creation to destruction. ``` CreateVolume +------------+ DeleteVolume - +------------->| CREATED +--------------------------+ - | | +<-----------+ | - | +---+----^---+ | | - | Controller | | Controller | v -+++ Publish | | Unpublish | +++ -|X| Volume | | Volume | | | -+-+ +---v----+---+ | +-+ - | NODE_READY | | Node - +---+----^---+ | Unstage - Node | | Node | Volume - Stage | | Unstage | (forced) - Volume | | Volume +---------------+ - +---v----+---+ | QUARANTINED_S | - | VOL_READY | +---^-----------+ - +---+----^---+ | Node - Node | | Node | Unpublish - Publish | | Unpublish | Volume - Volume | | Volume | (forced) - +---v----+---+ +----+-----------+ - | PUBLISHED +------>| QUARANTINED_SP | - +------------+ +----------------+ - ControllerUnpublishVolume(fenced) + +------------->| CREATED +------------------------------------+ + | | +<---------------------+ | + | +---+----^---+ | | + | Controller | | Controller | v ++++ Publish | | Unpublish | +++ +|X| Volume | | Volume | | | ++-+ +---v----+---+ | +-+ + | NODE_READY | | Node + +---+----^---+ Controller | Unstage + Node | | Node Unpublish | Volume + Stage | | Unstage Volume | (forced) + Volume | | Volume (fenced) +---------------+ + +---v----+---+ +-----> QUARANTINED_S | + | VOL_READY +------------+ +---^-----------+ + +---+----^---+ | Node + Node | | Node | Unpublish + Publish | | Unpublish | Volume + Volume | | Volume | (forced) + +---v----+---+ +----+-----------+ + | PUBLISHED +-----------------> QUARANTINED_SP | + +------------+ Controller +----------------+ + Unpublish + Volume + (fenced) Figure 6: The lifecycle of a dynamically provisioned volume, from creation to destruction, when the Node Plugin advertises the