diff --git a/pkg/kubelet/api/v1alpha1/runtime/api.pb.go b/pkg/kubelet/api/v1alpha1/runtime/api.pb.go index f80182549ca..f136e92f614 100644 --- a/pkg/kubelet/api/v1alpha1/runtime/api.pb.go +++ b/pkg/kubelet/api/v1alpha1/runtime/api.pb.go @@ -982,7 +982,10 @@ type PodSandbox struct { // Creation timestamps of the sandbox CreatedAt *int64 `protobuf:"varint,4,opt,name=created_at,json=createdAt" json:"created_at,omitempty"` // The labels of the PodSandbox - Labels map[string]string `protobuf:"bytes,5,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + Labels map[string]string `protobuf:"bytes,5,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // Annotations is an unstructured key value map that may be set by external + // tools to store and retrieve arbitrary metadata. + Annotations map[string]string `protobuf:"bytes,6,rep,name=annotations" json:"annotations,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` XXX_unrecognized []byte `json:"-"` } @@ -1026,6 +1029,13 @@ func (m *PodSandbox) GetLabels() map[string]string { return nil } +func (m *PodSandbox) GetAnnotations() map[string]string { + if m != nil { + return m.Annotations + } + return nil +} + type ListPodSandboxResponse struct { // List of PodSandbox Items []*PodSandbox `protobuf:"bytes,1,rep,name=items" json:"items,omitempty"` @@ -3117,183 +3127,184 @@ var _ImageService_serviceDesc = grpc.ServiceDesc{ } var fileDescriptorApi = []byte{ - // 2842 bytes of a gzipped FileDescriptorProto + // 2853 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xcc, 0x5a, 0xcd, 0x72, 0x1b, 0xc7, - 0x11, 0x16, 0x00, 0x82, 0x04, 0x1a, 0x04, 0x08, 0x8e, 0x28, 0x12, 0x82, 0x64, 0x89, 0x5a, 0xdb, - 0x89, 0x44, 0x5b, 0x2c, 0x85, 0x49, 0x49, 0x91, 0x6c, 0xcb, 0xa6, 0x49, 0x46, 0x45, 0x4b, 0xa2, - 0x98, 0x85, 0xa4, 0x58, 0x27, 0xd4, 0x0a, 0x3b, 0x24, 0x57, 0x02, 0x76, 0xd7, 0xbb, 0x0b, 0x46, - 0xcc, 0x35, 0x97, 0x1c, 0x72, 0xc9, 0x2d, 0x0f, 0xe0, 0xaa, 0x9c, 0x72, 0x49, 0x55, 0x2e, 0xb9, - 0xe5, 0x9c, 0xca, 0x83, 0xe4, 0x09, 0x92, 0x63, 0x7a, 0x7e, 0x76, 0x76, 0xf6, 0x07, 0x34, 0x28, - 0x57, 0xd9, 0xba, 0xed, 0x74, 0xf7, 0xcc, 0xf4, 0x74, 0xf7, 0xf4, 0xf4, 0x37, 0xb3, 0x50, 0xb7, - 0x7c, 0x67, 0xdd, 0x0f, 0xbc, 0xc8, 0x23, 0x73, 0xc1, 0xd8, 0x8d, 0x9c, 0x11, 0x35, 0xd6, 0xa0, - 0xf5, 0x9c, 0x06, 0xa1, 0xe3, 0xb9, 0x26, 0xfd, 0x66, 0x4c, 0xc3, 0x88, 0x74, 0x60, 0xee, 0x58, - 0x50, 0x3a, 0xa5, 0xd5, 0xd2, 0xf5, 0xba, 0x19, 0x37, 0x8d, 0xbf, 0x94, 0x60, 0x41, 0x09, 0x87, - 0xbe, 0xe7, 0x86, 0x74, 0xb2, 0x34, 0xb9, 0x06, 0xf3, 0x72, 0x92, 0xbe, 0x6b, 0x8d, 0x68, 0xa7, - 0xcc, 0xd9, 0x0d, 0x49, 0xdb, 0x43, 0x12, 0xf9, 0x29, 0x2c, 0xc4, 0x22, 0xf1, 0x20, 0x15, 0x2e, - 0xd5, 0x92, 0x64, 0x39, 0x1b, 0x59, 0x87, 0xf3, 0xb1, 0x20, 0xae, 0x41, 0x09, 0xcf, 0x70, 0xe1, - 0x45, 0xc9, 0xda, 0xf4, 0x1d, 0x29, 0x6f, 0x6c, 0x42, 0x7d, 0x7b, 0xaf, 0xf7, 0xc4, 0x8f, 0x58, - 0x67, 0x54, 0x31, 0xa4, 0x01, 0xeb, 0x83, 0x2a, 0x56, 0x98, 0x8a, 0xb2, 0x49, 0xba, 0x50, 0x0b, - 0xa9, 0x15, 0x0c, 0x8e, 0x68, 0x88, 0xea, 0x31, 0x96, 0x6a, 0x1b, 0x7f, 0x2d, 0x41, 0x63, 0xdf, - 0x0b, 0xa2, 0xc7, 0x96, 0xef, 0x3b, 0xee, 0x21, 0x21, 0x30, 0xc3, 0x97, 0x21, 0x56, 0xc9, 0xbf, - 0xc9, 0x4d, 0xa8, 0x71, 0x73, 0x0e, 0xbc, 0x21, 0x5f, 0x5e, 0x6b, 0x63, 0x71, 0x5d, 0x2a, 0xb3, - 0xbe, 0x2f, 0x19, 0xa6, 0x12, 0x21, 0x1f, 0x42, 0x6b, 0xe0, 0xb9, 0x91, 0xe5, 0xb8, 0x34, 0xe8, - 0xfb, 0x38, 0x36, 0x5f, 0x6d, 0xd5, 0x6c, 0x2a, 0x2a, 0x9b, 0x90, 0x5c, 0x82, 0xfa, 0x91, 0x17, - 0x46, 0x42, 0x62, 0x86, 0x4b, 0xd4, 0x18, 0x81, 0x33, 0x57, 0x60, 0x8e, 0x33, 0x1d, 0xbf, 0x53, - 0xe5, 0x9a, 0xcc, 0xb2, 0xe6, 0xae, 0x6f, 0x7c, 0x5b, 0x82, 0xea, 0x63, 0x0f, 0x27, 0x2f, 0xd4, - 0x34, 0x3d, 0xb5, 0x15, 0x1d, 0x49, 0x77, 0x68, 0x53, 0x23, 0x31, 0x99, 0x9a, 0x49, 0x08, 0x57, - 0x88, 0xa9, 0x19, 0x13, 0xad, 0x15, 0x50, 0xcb, 0xf6, 0xdc, 0xe1, 0x09, 0x57, 0xab, 0x66, 0xaa, - 0x36, 0xf3, 0x64, 0x48, 0x87, 0x8e, 0x3b, 0x7e, 0xd3, 0x0f, 0xe8, 0xd0, 0x7a, 0x49, 0x87, 0x5c, - 0xbd, 0x9a, 0xd9, 0x92, 0x64, 0x53, 0x50, 0x8d, 0x57, 0xb0, 0xc0, 0x5c, 0x1f, 0xfa, 0xd6, 0x80, - 0x4a, 0xff, 0x60, 0xa0, 0xf0, 0x49, 0x5d, 0x1a, 0xfd, 0xd6, 0x0b, 0x5e, 0x73, 0xbd, 0x6b, 0x66, - 0x83, 0xd1, 0xf6, 0x04, 0x89, 0x5c, 0x84, 0x9a, 0xd0, 0xcb, 0xb1, 0xb9, 0xe2, 0x35, 0x93, 0x5b, - 0x61, 0xdf, 0xb1, 0x15, 0xcb, 0xf1, 0x07, 0x5c, 0x63, 0xc9, 0xda, 0xf5, 0x07, 0xc6, 0xef, 0x4b, - 0x70, 0xe1, 0x11, 0x9b, 0x7c, 0xdf, 0xb3, 0x7b, 0x96, 0x6b, 0xbf, 0xf4, 0xde, 0x6c, 0x79, 0xee, - 0x81, 0x73, 0x48, 0xde, 0x87, 0xe6, 0xe0, 0x30, 0xf0, 0xc6, 0x3e, 0xae, 0x34, 0xa0, 0x6e, 0x24, - 0x6d, 0x35, 0x2f, 0x88, 0xfb, 0x9c, 0x46, 0x76, 0x60, 0xd1, 0x8d, 0x55, 0xed, 0x7b, 0x5c, 0xd7, - 0x90, 0xcf, 0xde, 0xd8, 0xe8, 0x28, 0x37, 0x67, 0x16, 0x63, 0xb6, 0xdd, 0x34, 0x21, 0x34, 0x02, - 0x20, 0xc9, 0xfc, 0x8f, 0x69, 0x64, 0xd9, 0x56, 0x64, 0x15, 0x3a, 0xa9, 0x0d, 0x95, 0xb1, 0x5c, - 0x60, 0xdd, 0x64, 0x9f, 0xe4, 0x32, 0xd4, 0xd5, 0x78, 0xd2, 0x1f, 0x09, 0x81, 0x05, 0xb6, 0x15, - 0x45, 0x74, 0xe4, 0x8b, 0x30, 0x69, 0x9a, 0x71, 0xd3, 0xf8, 0xc7, 0x0c, 0xb4, 0x73, 0x8b, 0xbe, - 0x03, 0xb5, 0x91, 0x9c, 0x9e, 0x4f, 0xdb, 0xd8, 0xb8, 0x94, 0x44, 0x6b, 0x4e, 0x43, 0x53, 0x09, - 0x33, 0xc7, 0x33, 0x93, 0x6a, 0xbb, 0x58, 0xb5, 0x99, 0x25, 0x87, 0xde, 0x61, 0xdf, 0x76, 0x02, - 0x3a, 0x88, 0xbc, 0xe0, 0x44, 0x6a, 0x39, 0x8f, 0xc4, 0xed, 0x98, 0x46, 0x7e, 0x0e, 0x0d, 0xdb, - 0x0d, 0x95, 0x0d, 0x67, 0xf8, 0xe4, 0x44, 0x4d, 0xae, 0xb6, 0xaa, 0x09, 0x28, 0x26, 0xed, 0x46, - 0xee, 0x42, 0x93, 0xed, 0x80, 0xfe, 0x48, 0x6c, 0xc0, 0x10, 0x03, 0xaa, 0x82, 0xdd, 0x96, 0x34, - 0x9d, 0xd5, 0xee, 0x34, 0xe7, 0xfd, 0xa4, 0x11, 0x92, 0xcf, 0x60, 0x96, 0x47, 0x5b, 0xd8, 0x99, - 0xe5, 0x7d, 0x3e, 0x2c, 0x58, 0xa7, 0x30, 0xca, 0xfa, 0x23, 0x2e, 0xb7, 0xe3, 0x46, 0xc1, 0x89, - 0x29, 0x3b, 0x91, 0x47, 0xd0, 0xb0, 0x5c, 0xd7, 0x8b, 0x2c, 0xa1, 0xee, 0x1c, 0x1f, 0x63, 0x6d, - 0xf2, 0x18, 0x9b, 0x89, 0xb0, 0x18, 0x48, 0xef, 0x4e, 0x7e, 0x01, 0x55, 0xbe, 0x03, 0x3a, 0x35, - 0xbe, 0xec, 0x2b, 0x6a, 0x9c, 0xc2, 0xd0, 0x34, 0x85, 0x70, 0xf7, 0x2e, 0x34, 0x34, 0xd5, 0x58, - 0x68, 0xbc, 0xa6, 0x27, 0x32, 0x5a, 0xd8, 0x27, 0x59, 0x82, 0xea, 0xb1, 0x35, 0x1c, 0xc7, 0x1e, - 0x11, 0x8d, 0x7b, 0xe5, 0x5f, 0x96, 0xba, 0xf7, 0xa1, 0x9d, 0xd5, 0xe8, 0x2c, 0xfd, 0x8d, 0x5d, - 0x58, 0x32, 0xc7, 0x6e, 0xa2, 0x58, 0x7c, 0x30, 0xfc, 0x0c, 0x66, 0x07, 0x5c, 0x47, 0x19, 0x3d, - 0x17, 0x27, 0x5a, 0xc4, 0x94, 0x82, 0xc6, 0x67, 0x70, 0x21, 0x33, 0x94, 0x3c, 0x36, 0x3e, 0x80, - 0x96, 0xef, 0xd9, 0xfd, 0x50, 0x90, 0xfb, 0x18, 0xf5, 0x72, 0x07, 0xfa, 0x4a, 0x76, 0xd7, 0x66, - 0xdd, 0x7b, 0x91, 0xe7, 0xe7, 0x55, 0x99, 0xae, 0x7b, 0x07, 0x96, 0xb3, 0xdd, 0xc5, 0xf4, 0xc6, - 0xe7, 0xb0, 0x62, 0xd2, 0x91, 0x77, 0x4c, 0xdf, 0x76, 0xe8, 0x2e, 0x74, 0xf2, 0x03, 0x24, 0x83, - 0x27, 0xd4, 0x1e, 0xba, 0x61, 0x1c, 0x9e, 0x6d, 0xf0, 0x1b, 0xfa, 0x00, 0x32, 0x05, 0x8a, 0x71, - 0x48, 0x0b, 0xca, 0x98, 0xf9, 0x45, 0x27, 0xfc, 0x32, 0x5e, 0x40, 0x7d, 0x4f, 0xcf, 0x07, 0x7a, - 0x0e, 0xc5, 0x83, 0x4e, 0x36, 0xc9, 0x06, 0xcc, 0x4d, 0x9b, 0xc0, 0x62, 0x41, 0xe3, 0x61, 0x2e, - 0x79, 0x4a, 0x1d, 0x36, 0x00, 0x54, 0x0e, 0x0a, 0x65, 0x2c, 0x90, 0xfc, 0x78, 0xa6, 0x26, 0x65, - 0x7c, 0x9b, 0x4a, 0x48, 0xda, 0x62, 0x6c, 0xb5, 0x18, 0x3b, 0x95, 0xa0, 0xca, 0x67, 0x49, 0x50, - 0xeb, 0x50, 0x0d, 0x71, 0x48, 0x91, 0x22, 0x5b, 0xda, 0xe2, 0x64, 0xaf, 0x2f, 0xc5, 0x94, 0xd4, - 0x14, 0x62, 0xe4, 0x3d, 0x80, 0x01, 0x1e, 0x5d, 0x11, 0xb5, 0xfb, 0x96, 0xc8, 0x9d, 0x15, 0xb3, - 0x2e, 0x29, 0x9b, 0x11, 0xb9, 0x97, 0xd8, 0xb1, 0xca, 0xd5, 0x58, 0x2d, 0x50, 0x23, 0xe5, 0x97, - 0xc4, 0xd2, 0x6a, 0xb7, 0xcf, 0x9e, 0xbe, 0xdb, 0x65, 0x3f, 0x21, 0xac, 0x25, 0xac, 0xb9, 0x89, - 0x09, 0x4b, 0xf4, 0x98, 0x26, 0x61, 0xd5, 0x26, 0x26, 0x2c, 0x39, 0xc6, 0xa9, 0x09, 0xeb, 0xc7, - 0x4c, 0x3d, 0x8f, 0xa1, 0x93, 0xdf, 0x3a, 0x32, 0x65, 0x60, 0xfa, 0x09, 0x39, 0xe5, 0x94, 0xf4, - 0x23, 0xbb, 0x48, 0x41, 0xe3, 0x3f, 0x25, 0x3d, 0xea, 0x7e, 0xe5, 0x0c, 0x23, 0x1a, 0xe4, 0xa2, - 0x4e, 0x05, 0x4f, 0x79, 0xba, 0xe0, 0xe9, 0x41, 0x8b, 0x9b, 0xbd, 0x8f, 0x95, 0x0d, 0x3f, 0xdf, - 0x30, 0xea, 0x98, 0xbd, 0x3f, 0x2e, 0xd0, 0x47, 0x4c, 0x29, 0x7c, 0xd6, 0x93, 0xe2, 0xc2, 0xe2, - 0xcd, 0xa1, 0x4e, 0xeb, 0x7e, 0x01, 0x24, 0x2f, 0x74, 0x26, 0xd3, 0x7d, 0xc5, 0xb6, 0x2b, 0x2b, - 0x12, 0x0b, 0xd2, 0xf6, 0x01, 0x57, 0xe3, 0x14, 0xbb, 0x09, 0x3d, 0x4d, 0x29, 0x68, 0xfc, 0xb9, - 0x0c, 0x90, 0x30, 0xdf, 0xd9, 0x7d, 0x7a, 0x47, 0xed, 0x1a, 0x51, 0x1a, 0x5c, 0x2d, 0xd0, 0xa2, - 0x68, 0xbf, 0x7c, 0x8f, 0x08, 0x37, 0xb6, 0x60, 0x39, 0x6b, 0x66, 0x19, 0x9f, 0x37, 0xa0, 0xea, - 0x60, 0xf5, 0x25, 0x40, 0x46, 0x63, 0xe3, 0x7c, 0x81, 0x32, 0xa6, 0x90, 0x30, 0xae, 0x41, 0x7d, - 0x77, 0x64, 0x1d, 0xd2, 0x9e, 0x4f, 0x07, 0x6c, 0x2e, 0x87, 0x35, 0xe4, 0xfc, 0xa2, 0x61, 0x6c, - 0x40, 0xed, 0x21, 0x3d, 0x79, 0xce, 0xe6, 0x9d, 0x56, 0x3f, 0xe3, 0x5f, 0x25, 0x58, 0xe1, 0x69, - 0x66, 0x2b, 0x2e, 0xea, 0x51, 0x39, 0x6f, 0x1c, 0x60, 0x02, 0xe6, 0xa6, 0xf4, 0xc7, 0x7d, 0x9f, - 0x06, 0x8e, 0x27, 0x7c, 0xc9, 0x4c, 0xe9, 0x8f, 0xf7, 0x39, 0x81, 0x15, 0xfe, 0x8c, 0xfd, 0xcd, - 0xd8, 0x93, 0x3e, 0xad, 0x98, 0x35, 0x24, 0xfc, 0x9a, 0xb5, 0xe3, 0xbe, 0xe1, 0x11, 0xd6, 0xc5, - 0x21, 0xf7, 0x9d, 0xe8, 0xdb, 0xe3, 0x04, 0x0c, 0xb0, 0x0b, 0x23, 0x3c, 0x0b, 0x83, 0x93, 0xfe, - 0xd0, 0x19, 0x39, 0x58, 0x89, 0xbb, 0xfd, 0x97, 0x27, 0x11, 0x0d, 0xa5, 0xc3, 0x88, 0x60, 0x3e, - 0x62, 0xbc, 0x5d, 0xf7, 0x4b, 0xc6, 0x21, 0x06, 0x34, 0x3d, 0x6f, 0xd4, 0x0f, 0x07, 0x5e, 0x80, - 0x88, 0xce, 0x7e, 0xc5, 0xf3, 0x6c, 0xc5, 0x6c, 0x20, 0xb1, 0xc7, 0x68, 0x9b, 0xf6, 0x2b, 0xc3, - 0x82, 0x66, 0x6f, 0x87, 0x2f, 0x47, 0xe2, 0x04, 0x2c, 0x99, 0xc7, 0xa1, 0x0c, 0x63, 0x2c, 0x99, - 0xd9, 0x37, 0xa3, 0x05, 0xde, 0x30, 0xb6, 0x03, 0xff, 0x66, 0xb4, 0xe8, 0xc4, 0x8f, 0xeb, 0x65, - 0xfe, 0xcd, 0x0c, 0x36, 0xa4, 0xc7, 0x88, 0x4a, 0x04, 0x64, 0x14, 0x0d, 0xc3, 0x06, 0xd8, 0xb2, - 0x7c, 0xeb, 0xa5, 0x33, 0x74, 0xa2, 0x13, 0x74, 0x60, 0xdb, 0xb2, 0xed, 0xfe, 0x20, 0xa6, 0x38, - 0x34, 0x06, 0x8c, 0x0b, 0x48, 0xdf, 0xd2, 0xc8, 0xe4, 0x23, 0x58, 0xb4, 0x03, 0xcf, 0x4f, 0xcb, - 0x0a, 0x04, 0xd9, 0x66, 0x0c, 0x5d, 0xd8, 0xf8, 0x5f, 0x09, 0x96, 0xd2, 0x6e, 0x91, 0x05, 0xf9, - 0x7d, 0xa8, 0x07, 0xb1, 0x83, 0xe4, 0xe6, 0x5c, 0x4d, 0x9f, 0x17, 0x79, 0x47, 0x9a, 0x49, 0x17, - 0x8c, 0xff, 0xf9, 0x8c, 0x02, 0xa5, 0x54, 0xe0, 0x25, 0x6b, 0x33, 0x53, 0x82, 0xe4, 0xf3, 0x04, - 0xad, 0xc5, 0x65, 0x41, 0x85, 0xf7, 0x5d, 0x56, 0x7d, 0x53, 0xa6, 0x57, 0x28, 0x2e, 0xae, 0xcd, - 0x7f, 0x22, 0x5d, 0x91, 0xad, 0xe4, 0x79, 0x9f, 0x67, 0xc8, 0x11, 0xee, 0x31, 0xbe, 0x86, 0xba, - 0x22, 0xc5, 0xf0, 0x46, 0xc4, 0x1e, 0x87, 0x37, 0x48, 0x39, 0x94, 0x80, 0x07, 0x29, 0xf8, 0xc9, - 0x70, 0x24, 0xda, 0xda, 0x61, 0xb3, 0x58, 0xc3, 0x3e, 0x52, 0x42, 0x9e, 0x5d, 0x2b, 0x66, 0x2b, - 0x21, 0x3f, 0x40, 0x2a, 0x22, 0xfc, 0x45, 0x65, 0x9c, 0x53, 0x41, 0x95, 0x06, 0x92, 0xca, 0x69, - 0x90, 0xf4, 0xdf, 0x2a, 0x2c, 0x64, 0x5d, 0x72, 0x3b, 0x87, 0x91, 0xba, 0x89, 0x39, 0xb3, 0xf3, - 0x69, 0x99, 0xed, 0x7a, 0xbc, 0x89, 0xcb, 0x19, 0x8b, 0xa8, 0x7d, 0x2e, 0x37, 0x36, 0xd3, 0x67, - 0xe0, 0x8d, 0x46, 0x98, 0x10, 0xf8, 0xca, 0xb0, 0x48, 0x93, 0x4d, 0xa6, 0xbd, 0x15, 0x1c, 0xb2, - 0x6d, 0xc3, 0xc8, 0xfc, 0x9b, 0x5c, 0x85, 0x06, 0x2b, 0x2b, 0x10, 0xd5, 0x30, 0x88, 0x25, 0x21, - 0x3f, 0x48, 0x12, 0x02, 0x2c, 0x04, 0xf6, 0x33, 0xd4, 0x3d, 0x8e, 0x81, 0x4e, 0x72, 0xfd, 0x10, - 0x27, 0x0f, 0x93, 0xb3, 0xd1, 0x61, 0xb3, 0x23, 0x76, 0x39, 0x10, 0x17, 0x18, 0x2d, 0x25, 0xc8, - 0xef, 0x0c, 0x4c, 0xc9, 0x25, 0x9f, 0xaa, 0x94, 0x2a, 0x8a, 0x88, 0x0f, 0xf2, 0xab, 0x3f, 0x05, - 0x38, 0x3d, 0x4c, 0xd7, 0x21, 0x75, 0x3e, 0xc4, 0x8d, 0x89, 0x43, 0x9c, 0x8e, 0x9b, 0xae, 0x00, - 0xf8, 0x81, 0x73, 0xec, 0x0c, 0xe9, 0x21, 0xb5, 0x3b, 0xc0, 0xa1, 0xbd, 0x46, 0xe1, 0x97, 0x47, - 0xf2, 0xfa, 0xa1, 0x1f, 0x78, 0x5e, 0x74, 0x10, 0x76, 0x1a, 0xe2, 0xca, 0x21, 0x26, 0x9b, 0x9c, - 0xca, 0x6e, 0x08, 0x18, 0x44, 0xe5, 0x77, 0x1a, 0xf3, 0xa2, 0x2e, 0xc6, 0x36, 0xbf, 0xd2, 0x58, - 0x62, 0x07, 0x92, 0xed, 0xb8, 0x9d, 0x26, 0xef, 0x29, 0x1a, 0x2c, 0xdf, 0xf1, 0x8f, 0xbe, 0xe7, - 0x22, 0xec, 0x6e, 0x71, 0x56, 0x9d, 0x53, 0x9e, 0x20, 0x81, 0x45, 0x6d, 0x14, 0x9d, 0x74, 0x16, - 0x38, 0x9d, 0x7d, 0x22, 0xbe, 0x95, 0x45, 0x5f, 0x9b, 0x7b, 0xff, 0xbd, 0x09, 0x9b, 0xf8, 0x9d, - 0x41, 0x78, 0x7f, 0x2b, 0xc1, 0xf2, 0x16, 0x3f, 0x46, 0xb5, 0x04, 0x73, 0x06, 0x84, 0x42, 0x6e, - 0x29, 0x28, 0x98, 0x85, 0x13, 0xd9, 0xc5, 0x4a, 0x39, 0xf2, 0x05, 0xb4, 0xe2, 0x31, 0x65, 0xcf, - 0xca, 0x77, 0x81, 0xc8, 0x66, 0xa8, 0x37, 0x8d, 0x4f, 0x61, 0x25, 0xa7, 0xb3, 0x3c, 0x7a, 0xaf, - 0x61, 0x22, 0x54, 0xb7, 0x5b, 0x4a, 0xe5, 0x86, 0xa2, 0x21, 0xa6, 0xba, 0xc7, 0xa0, 0xa4, 0x15, - 0x44, 0xb9, 0x05, 0x4f, 0xd1, 0x97, 0xe3, 0xc8, 0x74, 0x5f, 0x09, 0xf5, 0x7a, 0xb0, 0xc4, 0x10, - 0xe6, 0x5b, 0x0c, 0xca, 0xf2, 0x00, 0x5b, 0xb6, 0x37, 0x8e, 0x64, 0xfe, 0x8b, 0x9b, 0xc6, 0x8a, - 0x40, 0xbd, 0xf9, 0xd9, 0x3e, 0x81, 0x65, 0x01, 0x3a, 0xdf, 0x66, 0x11, 0x17, 0x63, 0xc8, 0x9b, - 0x1f, 0xf7, 0x8f, 0x65, 0x2d, 0x11, 0x4e, 0xa8, 0x92, 0x6f, 0xa6, 0xab, 0xe4, 0x95, 0xbc, 0xc3, - 0x53, 0x95, 0x5b, 0x3e, 0x8c, 0x2a, 0x05, 0x61, 0x64, 0xe6, 0x4a, 0xe9, 0x19, 0x9e, 0x32, 0x3e, - 0xca, 0x8f, 0xfe, 0x03, 0x56, 0xd2, 0xbb, 0xa2, 0x92, 0x56, 0x53, 0x2b, 0xf4, 0x7e, 0x2b, 0x53, - 0x49, 0x77, 0x26, 0xa9, 0xa9, 0x0a, 0xe9, 0x3f, 0xcc, 0x40, 0x5d, 0xf1, 0x72, 0x36, 0xcd, 0x1b, - 0xa9, 0x5c, 0x60, 0x24, 0xfd, 0x48, 0xaa, 0xbc, 0xcd, 0x91, 0x34, 0xf3, 0x5d, 0x47, 0x12, 0x16, - 0x7f, 0xfc, 0xa3, 0x1f, 0xd0, 0x03, 0x79, 0xc4, 0xd4, 0x38, 0xc1, 0xa4, 0x07, 0x89, 0xe3, 0x67, - 0xa7, 0x72, 0x7c, 0xba, 0x64, 0x9f, 0xcb, 0x96, 0xec, 0xb7, 0x33, 0xe7, 0xcb, 0x95, 0xfc, 0x70, - 0x85, 0x27, 0xcb, 0x4e, 0xd1, 0xc9, 0xf2, 0x7e, 0x41, 0xe7, 0x77, 0x16, 0xda, 0x3e, 0x12, 0xc0, - 0x41, 0x8f, 0x2a, 0x99, 0xbd, 0x36, 0xd0, 0x64, 0x8a, 0x2a, 0xd1, 0x03, 0xc9, 0x2f, 0xcd, 0xd4, - 0xa4, 0x58, 0x2a, 0x48, 0xd9, 0x3f, 0xb9, 0x62, 0x9a, 0x22, 0x15, 0xfc, 0x49, 0x2f, 0x7c, 0x26, - 0xdc, 0xc5, 0xdc, 0xce, 0x61, 0xbc, 0xe9, 0xa2, 0xee, 0x66, 0x1a, 0xe2, 0x9d, 0x2d, 0x5c, 0x72, - 0x08, 0x8f, 0x9f, 0xc4, 0x98, 0x79, 0x05, 0x5b, 0x80, 0x84, 0xba, 0xa4, 0x20, 0x1b, 0xab, 0xa3, - 0x03, 0xc7, 0x75, 0xc2, 0x23, 0xc1, 0x9f, 0xe5, 0x7c, 0x88, 0x49, 0x9b, 0xfc, 0x29, 0x85, 0xbe, - 0x41, 0x48, 0x32, 0xf0, 0x6c, 0xca, 0x83, 0xb1, 0x6a, 0xd6, 0x18, 0x61, 0x0b, 0xdb, 0xc9, 0x06, - 0xa9, 0x9d, 0x69, 0x83, 0xd4, 0x33, 0x1b, 0x64, 0x19, 0x66, 0x51, 0xdf, 0xd0, 0x73, 0x79, 0x8d, - 0x52, 0x37, 0x65, 0x4b, 0x2b, 0xa5, 0x1a, 0x93, 0x4a, 0xa9, 0x53, 0xae, 0x74, 0x32, 0xa5, 0xd4, - 0xfc, 0xa4, 0x52, 0x6a, 0x9a, 0x1b, 0x1d, 0xad, 0xfa, 0x6b, 0x9e, 0x56, 0xfd, 0xfd, 0x98, 0xdb, - 0xe3, 0x21, 0x9e, 0xee, 0xd9, 0x80, 0x96, 0xfb, 0xe3, 0x56, 0xe6, 0xe2, 0xa7, 0x33, 0xc9, 0x0a, - 0xea, 0xde, 0xe7, 0x15, 0x34, 0x76, 0xde, 0xa0, 0xfb, 0xa6, 0x3f, 0x8d, 0x51, 0xd5, 0xc1, 0xc8, - 0x96, 0x10, 0x8e, 0x7d, 0xc6, 0x55, 0x5e, 0x25, 0xa9, 0xf2, 0x54, 0xb1, 0xc8, 0xc2, 0x74, 0x5e, - 0x16, 0x8b, 0xc6, 0x7d, 0x98, 0x17, 0x73, 0x49, 0x6d, 0x97, 0x99, 0xb6, 0x36, 0x3b, 0xd6, 0x4b, - 0x5c, 0x4c, 0xb6, 0x24, 0x9d, 0x06, 0x01, 0x5f, 0xbb, 0xa0, 0x63, 0xcb, 0xb8, 0x03, 0x0d, 0x1e, - 0x6f, 0xf2, 0xdc, 0xbd, 0xae, 0xdf, 0x06, 0x9c, 0x16, 0x94, 0x0c, 0x01, 0xb1, 0x84, 0xc2, 0xe9, - 0x6a, 0xf7, 0x7f, 0x9c, 0x39, 0xa2, 0x96, 0xd2, 0xfd, 0x33, 0xc7, 0xd3, 0x6b, 0xa8, 0x72, 0x72, - 0x6e, 0xf7, 0x5f, 0x62, 0xc8, 0xd4, 0xf7, 0xfa, 0x91, 0x75, 0xa8, 0x5e, 0x46, 0x19, 0xe1, 0x29, - 0xb6, 0xf9, 0xc3, 0x2e, 0x63, 0xda, 0x0e, 0x4e, 0x1c, 0x85, 0x12, 0xc6, 0x34, 0x18, 0x6d, 0x5b, - 0x90, 0x18, 0x94, 0x09, 0x9d, 0xdf, 0x89, 0xa3, 0x67, 0xc6, 0xe4, 0xdf, 0x58, 0xbf, 0x11, 0x5d, - 0x5f, 0x69, 0x2e, 0x0c, 0x4d, 0xbe, 0x9c, 0x38, 0xf1, 0xb5, 0xd2, 0x0a, 0x9b, 0x92, 0x8b, 0x66, - 0x26, 0xc2, 0x02, 0xa9, 0x64, 0x37, 0xbd, 0xb5, 0x3e, 0x81, 0xf3, 0xa9, 0xfe, 0xea, 0x1d, 0x22, - 0x35, 0x40, 0x76, 0x76, 0xd9, 0xf9, 0xdf, 0x25, 0x80, 0xcd, 0x71, 0x74, 0x24, 0x41, 0x62, 0x17, - 0x6a, 0x0c, 0xdd, 0x6a, 0x50, 0x53, 0xb5, 0x19, 0xcf, 0xb7, 0xc2, 0x10, 0x11, 0x5a, 0x7c, 0x9a, - 0xab, 0x36, 0x07, 0x78, 0x63, 0xf5, 0xb0, 0xca, 0xbf, 0xd9, 0xc3, 0xac, 0x78, 0x8d, 0xee, 0x23, - 0xc0, 0x45, 0x68, 0x1f, 0xca, 0x1b, 0x8a, 0xa6, 0xa0, 0x6e, 0x0a, 0x22, 0x13, 0x73, 0x6c, 0x8a, - 0xaa, 0x45, 0x27, 0xfd, 0xc8, 0x7b, 0x4d, 0x5d, 0x79, 0x4e, 0x37, 0x63, 0xea, 0x53, 0x46, 0x64, - 0x62, 0x01, 0x3d, 0x44, 0x2b, 0x07, 0xb1, 0xd8, 0xac, 0x10, 0x8b, 0xa9, 0x5c, 0x8c, 0x3d, 0xe4, - 0xb7, 0xf7, 0xc7, 0xc3, 0xa1, 0x58, 0xe4, 0x59, 0x6d, 0x89, 0xc8, 0x4b, 0xac, 0x23, 0x7b, 0xdf, - 0x90, 0x98, 0x48, 0x2e, 0xee, 0xfb, 0x17, 0xfd, 0xe7, 0x61, 0x51, 0x53, 0x54, 0xd6, 0xab, 0x18, - 0x0b, 0xa2, 0x94, 0x7d, 0x3b, 0xfd, 0x8d, 0x0b, 0x70, 0x3e, 0xd5, 0x5f, 0x0c, 0xbb, 0x76, 0x19, - 0x6a, 0xf1, 0xa3, 0x3d, 0x99, 0x83, 0xca, 0xd3, 0xad, 0xfd, 0xf6, 0x39, 0xf6, 0xf1, 0x6c, 0x7b, - 0xbf, 0x5d, 0x5a, 0x5b, 0x83, 0x85, 0xcc, 0x2d, 0x25, 0xa9, 0x43, 0xd5, 0xdc, 0xd9, 0xdc, 0x7e, - 0x81, 0x62, 0xf3, 0x50, 0xdb, 0x7b, 0xf2, 0x54, 0xb4, 0x4a, 0x6b, 0x5b, 0xd0, 0x4a, 0x1f, 0x77, - 0xa4, 0x01, 0x73, 0x5b, 0xc8, 0x7d, 0xba, 0xb3, 0x8d, 0xc2, 0xd8, 0x30, 0x9f, 0xed, 0xed, 0xed, - 0xee, 0x3d, 0x68, 0x97, 0x08, 0xc0, 0xec, 0xce, 0xd7, 0xbb, 0x8c, 0x51, 0x66, 0x8c, 0x67, 0x7b, - 0x0f, 0xf7, 0x9e, 0xfc, 0x66, 0xaf, 0x5d, 0xd9, 0xf8, 0x67, 0x0d, 0x5a, 0xa6, 0x58, 0x42, 0x0f, - 0x63, 0xc1, 0x41, 0xe4, 0x79, 0x1f, 0xe6, 0xe2, 0x3f, 0x22, 0x92, 0x83, 0x35, 0xfd, 0xfb, 0x46, - 0xb7, 0x93, 0x67, 0x48, 0xb3, 0x9d, 0x23, 0xfb, 0xd0, 0x4c, 0x3d, 0xc7, 0x91, 0x04, 0xa9, 0x16, - 0xbd, 0xf8, 0x75, 0xaf, 0x4c, 0x62, 0xab, 0x11, 0x7b, 0xd0, 0x4a, 0x3f, 0xb1, 0x91, 0xa4, 0x4f, - 0xe1, 0xd3, 0x5d, 0xf7, 0xea, 0x44, 0xbe, 0x1a, 0xf4, 0x05, 0xb4, 0xb3, 0x8f, 0x6b, 0x24, 0xb9, - 0x18, 0x9b, 0xf0, 0x70, 0xd7, 0xbd, 0x76, 0x8a, 0x84, 0x3e, 0x74, 0xee, 0x19, 0x6a, 0x75, 0xf2, - 0x43, 0x42, 0x6e, 0xe8, 0x49, 0xaf, 0x13, 0xc2, 0x14, 0xe9, 0x9b, 0x61, 0xa2, 0x3f, 0xfe, 0x14, - 0xdc, 0xcc, 0x6b, 0xa6, 0x28, 0xbe, 0x52, 0xc6, 0x41, 0x9f, 0x63, 0xa5, 0x96, 0x06, 0xbd, 0x24, - 0xe9, 0x55, 0x0c, 0xe1, 0xbb, 0xab, 0x93, 0x05, 0xd2, 0x7e, 0xd3, 0x21, 0x6d, 0xca, 0x6f, 0x05, - 0x38, 0x39, 0xe5, 0xb7, 0x42, 0x2c, 0xcc, 0xc3, 0x2b, 0x05, 0x5c, 0xb5, 0xf0, 0x2a, 0x42, 0xc9, - 0xdd, 0x2b, 0x93, 0xd8, 0xfa, 0xf2, 0x33, 0xa0, 0x55, 0x5b, 0x7e, 0x31, 0x16, 0xee, 0xae, 0x4e, - 0x16, 0xc8, 0xfa, 0x2a, 0x29, 0xc6, 0x33, 0xbe, 0xca, 0x61, 0xbf, 0x8c, 0xaf, 0xf2, 0x55, 0xbc, - 0xf4, 0x55, 0xa6, 0xaa, 0xbe, 0x3a, 0xb1, 0x54, 0xc9, 0xfb, 0xaa, 0xb8, 0xfa, 0xc1, 0x71, 0xef, - 0xc2, 0x0c, 0xab, 0x30, 0x48, 0x72, 0x96, 0x6b, 0xc5, 0x4d, 0xf7, 0x42, 0x86, 0x1a, 0x77, 0xbb, - 0x5e, 0xba, 0x55, 0xda, 0xf8, 0x7b, 0x19, 0xe6, 0x45, 0xfa, 0x93, 0x19, 0xe4, 0x01, 0x40, 0x72, - 0x08, 0x93, 0x6e, 0x6a, 0x51, 0xa9, 0x4a, 0xa2, 0x7b, 0xa9, 0x90, 0xa7, 0x94, 0xfa, 0x4a, 0x96, - 0x2d, 0x72, 0xa1, 0x97, 0x32, 0xd9, 0x36, 0xb5, 0xc8, 0xcb, 0xc5, 0x4c, 0x35, 0xd6, 0x36, 0xd4, - 0x55, 0x92, 0x27, 0xda, 0xd9, 0x90, 0x39, 0xa1, 0xba, 0xdd, 0x22, 0x96, 0xae, 0x91, 0x96, 0xd5, - 0x35, 0x8d, 0xf2, 0x67, 0x85, 0xa6, 0x51, 0xc1, 0x41, 0x60, 0x9c, 0xfb, 0x7f, 0x00, 0x00, 0x00, - 0xff, 0xff, 0x22, 0x65, 0x58, 0x85, 0x2a, 0x27, 0x00, 0x00, + 0xf1, 0x17, 0x08, 0x82, 0x04, 0x1a, 0x04, 0x08, 0x8e, 0x28, 0x12, 0x82, 0x64, 0x89, 0x5a, 0x5b, + 0xff, 0xbf, 0x44, 0x5b, 0x2c, 0x85, 0x49, 0x49, 0x91, 0x6c, 0xcb, 0xa6, 0x49, 0x5a, 0x45, 0x4b, + 0xa2, 0x98, 0x85, 0xa4, 0x58, 0x27, 0xd4, 0x0a, 0x3b, 0x24, 0x57, 0x02, 0x76, 0xd7, 0xbb, 0x0b, + 0x46, 0xc8, 0x35, 0x97, 0x1c, 0x72, 0xc9, 0x1b, 0xe4, 0xe0, 0xaa, 0x9c, 0x72, 0x49, 0x55, 0x2e, + 0xb9, 0xe5, 0x9c, 0xca, 0x83, 0xe4, 0x09, 0x92, 0x63, 0x7a, 0x3e, 0x76, 0x76, 0xf6, 0x03, 0x34, + 0xa8, 0x54, 0xc5, 0xba, 0xed, 0x74, 0xf7, 0xcc, 0xf4, 0x74, 0xf7, 0xf4, 0xf4, 0x6f, 0x66, 0xa1, + 0x66, 0xf9, 0xce, 0x86, 0x1f, 0x78, 0x91, 0x47, 0xe6, 0x83, 0x91, 0x1b, 0x39, 0x43, 0x6a, 0xac, + 0x43, 0xf3, 0x05, 0x0d, 0x42, 0xc7, 0x73, 0x4d, 0xfa, 0xdd, 0x88, 0x86, 0x11, 0x69, 0xc3, 0xfc, + 0x89, 0xa0, 0xb4, 0x4b, 0x6b, 0xa5, 0x1b, 0x35, 0x33, 0x6e, 0x1a, 0x7f, 0x2c, 0xc1, 0xa2, 0x12, + 0x0e, 0x7d, 0xcf, 0x0d, 0xe9, 0x64, 0x69, 0x72, 0x0d, 0x16, 0xe4, 0x24, 0x3d, 0xd7, 0x1a, 0xd2, + 0xf6, 0x0c, 0x67, 0xd7, 0x25, 0x6d, 0x1f, 0x49, 0xe4, 0xff, 0x61, 0x31, 0x16, 0x89, 0x07, 0x29, + 0x73, 0xa9, 0xa6, 0x24, 0xcb, 0xd9, 0xc8, 0x06, 0x9c, 0x8f, 0x05, 0x71, 0x0d, 0x4a, 0x78, 0x96, + 0x0b, 0x2f, 0x49, 0xd6, 0x96, 0xef, 0x48, 0x79, 0x63, 0x0b, 0x6a, 0x3b, 0xfb, 0xdd, 0xa7, 0x7e, + 0xc4, 0x3a, 0xa3, 0x8a, 0x21, 0x0d, 0x58, 0x1f, 0x54, 0xb1, 0xcc, 0x54, 0x94, 0x4d, 0xd2, 0x81, + 0x6a, 0x48, 0xad, 0xa0, 0x7f, 0x4c, 0x43, 0x54, 0x8f, 0xb1, 0x54, 0xdb, 0xf8, 0x53, 0x09, 0xea, + 0x07, 0x5e, 0x10, 0x3d, 0xb1, 0x7c, 0xdf, 0x71, 0x8f, 0x08, 0x81, 0x59, 0xbe, 0x0c, 0xb1, 0x4a, + 0xfe, 0x4d, 0x6e, 0x41, 0x95, 0x9b, 0xb3, 0xef, 0x0d, 0xf8, 0xf2, 0x9a, 0x9b, 0x4b, 0x1b, 0x52, + 0x99, 0x8d, 0x03, 0xc9, 0x30, 0x95, 0x08, 0xb9, 0x0e, 0xcd, 0xbe, 0xe7, 0x46, 0x96, 0xe3, 0xd2, + 0xa0, 0xe7, 0xe3, 0xd8, 0x7c, 0xb5, 0x15, 0xb3, 0xa1, 0xa8, 0x6c, 0x42, 0x72, 0x09, 0x6a, 0xc7, + 0x5e, 0x18, 0x09, 0x89, 0x59, 0x2e, 0x51, 0x65, 0x04, 0xce, 0x5c, 0x85, 0x79, 0xce, 0x74, 0xfc, + 0x76, 0x85, 0x6b, 0x32, 0xc7, 0x9a, 0x7b, 0xbe, 0xf1, 0x7d, 0x09, 0x2a, 0x4f, 0x3c, 0x9c, 0xbc, + 0x50, 0xd3, 0xf4, 0xd4, 0x56, 0x74, 0x2c, 0xdd, 0xa1, 0x4d, 0x8d, 0xc4, 0x64, 0x6a, 0x26, 0x21, + 0x5c, 0x21, 0xa6, 0x66, 0x4c, 0xb4, 0x56, 0x40, 0x2d, 0xdb, 0x73, 0x07, 0x63, 0xae, 0x56, 0xd5, + 0x54, 0x6d, 0xe6, 0xc9, 0x90, 0x0e, 0x1c, 0x77, 0xf4, 0xb6, 0x17, 0xd0, 0x81, 0xf5, 0x8a, 0x0e, + 0xb8, 0x7a, 0x55, 0xb3, 0x29, 0xc9, 0xa6, 0xa0, 0x1a, 0xaf, 0x61, 0x91, 0xb9, 0x3e, 0xf4, 0xad, + 0x3e, 0x95, 0xfe, 0xc1, 0x40, 0xe1, 0x93, 0xba, 0x34, 0xfa, 0x95, 0x17, 0xbc, 0xe1, 0x7a, 0x57, + 0xcd, 0x3a, 0xa3, 0xed, 0x0b, 0x12, 0xb9, 0x08, 0x55, 0xa1, 0x97, 0x63, 0x73, 0xc5, 0xab, 0x26, + 0xb7, 0xc2, 0x81, 0x63, 0x2b, 0x96, 0xe3, 0xf7, 0xb9, 0xc6, 0x92, 0xb5, 0xe7, 0xf7, 0x8d, 0xdf, + 0x94, 0xe0, 0xc2, 0x63, 0x36, 0xf9, 0x81, 0x67, 0x77, 0x2d, 0xd7, 0x7e, 0xe5, 0xbd, 0xdd, 0xf6, + 0xdc, 0x43, 0xe7, 0x88, 0x7c, 0x08, 0x8d, 0xfe, 0x51, 0xe0, 0x8d, 0x7c, 0x5c, 0x69, 0x40, 0xdd, + 0x48, 0xda, 0x6a, 0x41, 0x10, 0x0f, 0x38, 0x8d, 0xec, 0xc2, 0x92, 0x1b, 0xab, 0xda, 0xf3, 0xb8, + 0xae, 0x21, 0x9f, 0xbd, 0xbe, 0xd9, 0x56, 0x6e, 0xce, 0x2c, 0xc6, 0x6c, 0xb9, 0x69, 0x42, 0x68, + 0x04, 0x40, 0x92, 0xf9, 0x9f, 0xd0, 0xc8, 0xb2, 0xad, 0xc8, 0x2a, 0x74, 0x52, 0x0b, 0xca, 0x23, + 0xb9, 0xc0, 0x9a, 0xc9, 0x3e, 0xc9, 0x65, 0xa8, 0xa9, 0xf1, 0xa4, 0x3f, 0x12, 0x02, 0x0b, 0x6c, + 0x2b, 0x8a, 0xe8, 0xd0, 0x17, 0x61, 0xd2, 0x30, 0xe3, 0xa6, 0xf1, 0xd7, 0x59, 0x68, 0xe5, 0x16, + 0x7d, 0x17, 0xaa, 0x43, 0x39, 0x3d, 0x9f, 0xb6, 0xbe, 0x79, 0x29, 0x89, 0xd6, 0x9c, 0x86, 0xa6, + 0x12, 0x66, 0x8e, 0x67, 0x26, 0xd5, 0x76, 0xb1, 0x6a, 0x33, 0x4b, 0x0e, 0xbc, 0xa3, 0x9e, 0xed, + 0x04, 0xb4, 0x1f, 0x79, 0xc1, 0x58, 0x6a, 0xb9, 0x80, 0xc4, 0x9d, 0x98, 0x46, 0x7e, 0x0a, 0x75, + 0xdb, 0x0d, 0x95, 0x0d, 0x67, 0xf9, 0xe4, 0x44, 0x4d, 0xae, 0xb6, 0xaa, 0x09, 0x28, 0x26, 0xed, + 0x46, 0xee, 0x41, 0x83, 0xed, 0x80, 0xde, 0x50, 0x6c, 0xc0, 0x10, 0x03, 0xaa, 0x8c, 0xdd, 0x96, + 0x35, 0x9d, 0xd5, 0xee, 0x34, 0x17, 0xfc, 0xa4, 0x11, 0x92, 0xcf, 0x61, 0x8e, 0x47, 0x5b, 0xd8, + 0x9e, 0xe3, 0x7d, 0xae, 0x17, 0xac, 0x53, 0x18, 0x65, 0xe3, 0x31, 0x97, 0xdb, 0x75, 0xa3, 0x60, + 0x6c, 0xca, 0x4e, 0xe4, 0x31, 0xd4, 0x2d, 0xd7, 0xf5, 0x22, 0x4b, 0xa8, 0x3b, 0xcf, 0xc7, 0x58, + 0x9f, 0x3c, 0xc6, 0x56, 0x22, 0x2c, 0x06, 0xd2, 0xbb, 0x93, 0x9f, 0x41, 0x85, 0xef, 0x80, 0x76, + 0x95, 0x2f, 0xfb, 0x8a, 0x1a, 0xa7, 0x30, 0x34, 0x4d, 0x21, 0xdc, 0xb9, 0x07, 0x75, 0x4d, 0x35, + 0x16, 0x1a, 0x6f, 0xe8, 0x58, 0x46, 0x0b, 0xfb, 0x24, 0xcb, 0x50, 0x39, 0xb1, 0x06, 0xa3, 0xd8, + 0x23, 0xa2, 0x71, 0x7f, 0xe6, 0xe7, 0xa5, 0xce, 0x03, 0x68, 0x65, 0x35, 0x3a, 0x4b, 0x7f, 0x63, + 0x0f, 0x96, 0xcd, 0x91, 0x9b, 0x28, 0x16, 0x1f, 0x0c, 0x3f, 0x81, 0xb9, 0x3e, 0xd7, 0x51, 0x46, + 0xcf, 0xc5, 0x89, 0x16, 0x31, 0xa5, 0xa0, 0xf1, 0x39, 0x5c, 0xc8, 0x0c, 0x25, 0x8f, 0x8d, 0x8f, + 0xa0, 0xe9, 0x7b, 0x76, 0x2f, 0x14, 0xe4, 0x1e, 0x46, 0xbd, 0xdc, 0x81, 0xbe, 0x92, 0xdd, 0xb3, + 0x59, 0xf7, 0x6e, 0xe4, 0xf9, 0x79, 0x55, 0xa6, 0xeb, 0xde, 0x86, 0x95, 0x6c, 0x77, 0x31, 0xbd, + 0xf1, 0x05, 0xac, 0x9a, 0x74, 0xe8, 0x9d, 0xd0, 0x77, 0x1d, 0xba, 0x03, 0xed, 0xfc, 0x00, 0xc9, + 0xe0, 0x09, 0xb5, 0x8b, 0x6e, 0x18, 0x85, 0x67, 0x1b, 0xfc, 0xa6, 0x3e, 0x80, 0x4c, 0x81, 0x62, + 0x1c, 0xd2, 0x84, 0x19, 0xcc, 0xfc, 0xa2, 0x13, 0x7e, 0x19, 0x2f, 0xa1, 0xb6, 0xaf, 0xe7, 0x03, + 0x3d, 0x87, 0xe2, 0x41, 0x27, 0x9b, 0x64, 0x13, 0xe6, 0xa7, 0x4d, 0x60, 0xb1, 0xa0, 0xf1, 0x28, + 0x97, 0x3c, 0xa5, 0x0e, 0x9b, 0x00, 0x2a, 0x07, 0x85, 0x32, 0x16, 0x48, 0x7e, 0x3c, 0x53, 0x93, + 0x32, 0xbe, 0x4f, 0x25, 0x24, 0x6d, 0x31, 0xb6, 0x5a, 0x8c, 0x9d, 0x4a, 0x50, 0x33, 0x67, 0x49, + 0x50, 0x1b, 0x50, 0x09, 0x71, 0x48, 0x91, 0x22, 0x9b, 0xda, 0xe2, 0x64, 0xaf, 0xaf, 0xc4, 0x94, + 0xd4, 0x14, 0x62, 0xe4, 0x03, 0x80, 0x3e, 0x1e, 0x5d, 0x11, 0xb5, 0x7b, 0x96, 0xc8, 0x9d, 0x65, + 0xb3, 0x26, 0x29, 0x5b, 0x11, 0xb9, 0x9f, 0xd8, 0xb1, 0xc2, 0xd5, 0x58, 0x2b, 0x50, 0x23, 0xe5, + 0x97, 0xc4, 0xd2, 0x6a, 0xb7, 0xcf, 0x9d, 0xbe, 0xdb, 0x65, 0x3f, 0x21, 0xac, 0x25, 0xac, 0xf9, + 0x89, 0x09, 0x4b, 0xf4, 0x98, 0x26, 0x61, 0x55, 0x27, 0x26, 0x2c, 0x39, 0xc6, 0xa9, 0x09, 0xeb, + 0xc7, 0x4c, 0x3d, 0x4f, 0xa0, 0x9d, 0xdf, 0x3a, 0x32, 0x65, 0x60, 0xfa, 0x09, 0x39, 0xe5, 0x94, + 0xf4, 0x23, 0xbb, 0x48, 0x41, 0xe3, 0x9f, 0x25, 0x3d, 0xea, 0xbe, 0x76, 0x06, 0x11, 0x0d, 0x72, + 0x51, 0xa7, 0x82, 0x67, 0x66, 0xba, 0xe0, 0xe9, 0x42, 0x93, 0x9b, 0xbd, 0x87, 0x95, 0x0d, 0x3f, + 0xdf, 0x30, 0xea, 0x98, 0xbd, 0x3f, 0x29, 0xd0, 0x47, 0x4c, 0x29, 0x7c, 0xd6, 0x95, 0xe2, 0xc2, + 0xe2, 0x8d, 0x81, 0x4e, 0xeb, 0x7c, 0x09, 0x24, 0x2f, 0x74, 0x26, 0xd3, 0x7d, 0xc3, 0xb6, 0x2b, + 0x2b, 0x12, 0x0b, 0xd2, 0xf6, 0x21, 0x57, 0xe3, 0x14, 0xbb, 0x09, 0x3d, 0x4d, 0x29, 0x68, 0xfc, + 0xa1, 0x0c, 0x90, 0x30, 0xdf, 0xdb, 0x7d, 0x7a, 0x57, 0xed, 0x1a, 0x51, 0x1a, 0x5c, 0x2d, 0xd0, + 0xa2, 0x70, 0xbf, 0x7c, 0x9d, 0xde, 0x2f, 0xa2, 0x48, 0xf8, 0xa8, 0xa8, 0xf7, 0x7b, 0xbb, 0x53, + 0xb6, 0x61, 0x25, 0xeb, 0x6e, 0xb9, 0x4f, 0x6e, 0x42, 0xc5, 0xc1, 0x2a, 0x50, 0x80, 0x9d, 0xfa, + 0xe6, 0xf9, 0x82, 0x65, 0x99, 0x42, 0xc2, 0xb8, 0x06, 0xb5, 0xbd, 0xa1, 0x75, 0x44, 0xbb, 0x3e, + 0xed, 0xb3, 0xb9, 0x1c, 0xd6, 0x90, 0xf3, 0x8b, 0x86, 0xb1, 0x09, 0xd5, 0x47, 0x74, 0xfc, 0x82, + 0xcd, 0x3b, 0xad, 0x7e, 0xc6, 0xdf, 0x4b, 0xb0, 0xca, 0xd3, 0xdd, 0x76, 0x0c, 0x2e, 0x50, 0x39, + 0x6f, 0x14, 0xe0, 0x41, 0xc0, 0x5d, 0xea, 0x8f, 0x7a, 0x3e, 0x0d, 0x1c, 0x4f, 0xc4, 0x14, 0x73, + 0xa9, 0x3f, 0x3a, 0xe0, 0x04, 0x06, 0x40, 0x18, 0xfb, 0xbb, 0x91, 0x27, 0x63, 0xab, 0x6c, 0x56, + 0x91, 0xf0, 0x0b, 0xd6, 0x8e, 0xfb, 0x86, 0xc7, 0x58, 0x9f, 0x87, 0x3c, 0x86, 0x44, 0xdf, 0x2e, + 0x27, 0x60, 0xa0, 0x5f, 0x18, 0xe2, 0x99, 0x1c, 0x8c, 0x7b, 0x03, 0x67, 0xe8, 0x20, 0x22, 0x70, + 0x7b, 0xaf, 0xc6, 0x11, 0x0d, 0x65, 0xe0, 0x10, 0xc1, 0x7c, 0xcc, 0x78, 0x7b, 0xee, 0x57, 0x8c, + 0x43, 0x0c, 0x68, 0x78, 0xde, 0xb0, 0x17, 0xf6, 0xbd, 0x00, 0x91, 0xa5, 0xfd, 0x9a, 0xe7, 0xfb, + 0xb2, 0x59, 0x47, 0x62, 0x97, 0xd1, 0xb6, 0xec, 0xd7, 0x86, 0x05, 0x8d, 0xee, 0x2e, 0x5f, 0x8e, + 0xc4, 0x2b, 0x58, 0xba, 0x8f, 0x42, 0xb9, 0x9d, 0xb0, 0x74, 0x67, 0xdf, 0x8c, 0x16, 0x78, 0x83, + 0xd8, 0x0e, 0xfc, 0x9b, 0xd1, 0xa2, 0xb1, 0x1f, 0xd7, 0xed, 0xfc, 0x9b, 0x19, 0x6c, 0x40, 0x4f, + 0x10, 0x1d, 0x09, 0xe8, 0x2a, 0x1a, 0x86, 0x0d, 0xb0, 0x6d, 0xf9, 0xd6, 0x2b, 0x67, 0xe0, 0x44, + 0x63, 0x74, 0x60, 0xcb, 0xb2, 0xed, 0x5e, 0x3f, 0xa6, 0x38, 0x34, 0x06, 0xae, 0x8b, 0x48, 0xdf, + 0xd6, 0xc8, 0xe4, 0x63, 0x58, 0xb2, 0x03, 0xcf, 0x4f, 0xcb, 0x0a, 0x24, 0xdb, 0x62, 0x0c, 0x5d, + 0xd8, 0xf8, 0x77, 0x09, 0x96, 0xd3, 0x6e, 0x91, 0xc0, 0xe0, 0x01, 0xd4, 0x82, 0xd8, 0x41, 0x32, + 0x49, 0xac, 0xa5, 0xcf, 0xad, 0xbc, 0x23, 0xcd, 0xa4, 0x0b, 0xee, 0xc3, 0x85, 0x8c, 0x02, 0xa5, + 0x54, 0xe0, 0x25, 0x6b, 0x33, 0x53, 0x82, 0xe4, 0x8b, 0x04, 0x35, 0xc6, 0xe5, 0x49, 0x99, 0xf7, + 0x5d, 0x51, 0x7d, 0x53, 0xa6, 0x57, 0x68, 0x32, 0xc6, 0x08, 0xff, 0x27, 0x5d, 0x91, 0x45, 0x14, + 0xbc, 0xcf, 0x73, 0xe4, 0x08, 0xf7, 0x18, 0xdf, 0x42, 0x4d, 0x91, 0x62, 0x98, 0x25, 0x62, 0x8f, + 0xc3, 0x2c, 0xa4, 0x1c, 0x49, 0xe0, 0x85, 0x14, 0xfc, 0x64, 0x78, 0x16, 0x6d, 0xed, 0xb0, 0x59, + 0xac, 0x41, 0x0f, 0x29, 0x21, 0xcf, 0xf2, 0x65, 0xb3, 0x99, 0x90, 0x1f, 0x22, 0xd5, 0xd8, 0x82, + 0x25, 0x65, 0x9c, 0x53, 0xc1, 0x9d, 0x06, 0xd6, 0x66, 0xd2, 0x60, 0xed, 0x5f, 0x15, 0x58, 0xcc, + 0xba, 0xe4, 0x4e, 0x0e, 0xab, 0x75, 0x12, 0x73, 0x66, 0xe7, 0xd3, 0x32, 0xec, 0x8d, 0x78, 0x13, + 0xcf, 0x64, 0x2c, 0xa2, 0xf6, 0xb9, 0xdc, 0xd8, 0x4c, 0x9f, 0xbe, 0x37, 0x1c, 0x62, 0x42, 0xe0, + 0x2b, 0xc3, 0x62, 0x51, 0x36, 0x99, 0xf6, 0x56, 0x70, 0xc4, 0xb6, 0x0d, 0x23, 0xf3, 0x6f, 0x72, + 0x15, 0xea, 0xac, 0xbc, 0x41, 0x74, 0xc5, 0xa0, 0x9e, 0xbc, 0x7a, 0x00, 0x49, 0x42, 0xa0, 0x47, + 0xae, 0xc3, 0x2c, 0x75, 0x4f, 0xe2, 0x5c, 0x9a, 0x5c, 0x83, 0xc4, 0xc9, 0xc3, 0xe4, 0x6c, 0x74, + 0xd8, 0xdc, 0x90, 0x5d, 0x52, 0xc4, 0x85, 0x4e, 0x53, 0x09, 0xf2, 0xbb, 0x0b, 0x53, 0x72, 0xc9, + 0x67, 0x2a, 0xb5, 0x57, 0x33, 0xc9, 0x39, 0x63, 0xa9, 0xc2, 0xfc, 0xfe, 0x28, 0x9d, 0xdf, 0x6b, + 0x7c, 0x88, 0x9b, 0x13, 0x87, 0x38, 0x1d, 0xbf, 0x5d, 0x01, 0xf0, 0x03, 0xe7, 0xc4, 0x19, 0xd0, + 0x23, 0x6a, 0xb7, 0x81, 0x5f, 0x31, 0x68, 0x14, 0x7e, 0x89, 0x25, 0xaf, 0x41, 0x7a, 0x81, 0xe7, + 0x45, 0x87, 0x61, 0xbb, 0x2e, 0xae, 0x3e, 0x62, 0xb2, 0xc9, 0xa9, 0xec, 0xa6, 0x82, 0x41, 0x65, + 0x7e, 0xb7, 0xb2, 0x20, 0xea, 0x73, 0x6c, 0xf3, 0xab, 0x95, 0x65, 0x76, 0x30, 0xda, 0x8e, 0xdb, + 0x6e, 0xf0, 0x9e, 0xa2, 0xc1, 0xf2, 0x1d, 0xff, 0xe8, 0x79, 0x2e, 0xc2, 0xff, 0x26, 0x67, 0xd5, + 0x38, 0xe5, 0x29, 0x12, 0x58, 0xd4, 0x46, 0xd1, 0xb8, 0xbd, 0xc8, 0xe9, 0xec, 0x13, 0x71, 0xb6, + 0x2c, 0x3e, 0x5b, 0xdc, 0xfb, 0x1f, 0x4c, 0xd8, 0xc4, 0xef, 0x0d, 0xd2, 0xfc, 0x73, 0x09, 0x56, + 0xb6, 0xf9, 0x71, 0xae, 0x25, 0x98, 0x33, 0x20, 0x25, 0x72, 0x5b, 0x41, 0xd2, 0x2c, 0xac, 0xc9, + 0x2e, 0x56, 0xca, 0x91, 0x2f, 0xa1, 0x19, 0x8f, 0x29, 0x7b, 0x96, 0x7f, 0x08, 0xcc, 0x36, 0x42, + 0xbd, 0x69, 0x7c, 0x06, 0xab, 0x39, 0x9d, 0xe5, 0xd1, 0x7b, 0x0d, 0x13, 0xa1, 0xba, 0x65, 0x53, + 0x2a, 0xd7, 0x15, 0x0d, 0xb1, 0xdd, 0x7d, 0x06, 0x69, 0xad, 0x20, 0xca, 0x2d, 0x78, 0x8a, 0xbe, + 0x1c, 0xcf, 0xa6, 0xfb, 0x4a, 0xc8, 0xd9, 0x85, 0x65, 0x86, 0x74, 0xdf, 0x61, 0x50, 0x96, 0x07, + 0xd8, 0xb2, 0xbd, 0x51, 0x24, 0xf3, 0x5f, 0xdc, 0x34, 0x56, 0x05, 0xfa, 0xce, 0xcf, 0xf6, 0x29, + 0xac, 0x08, 0xf0, 0xfb, 0x2e, 0x8b, 0xb8, 0x18, 0x43, 0xef, 0xfc, 0xb8, 0xbf, 0x9b, 0xd1, 0x12, + 0xe1, 0x84, 0x6a, 0xfd, 0x56, 0xba, 0x5a, 0x5f, 0xcd, 0x3b, 0x3c, 0x55, 0x41, 0xe6, 0xc3, 0xa8, + 0x5c, 0x10, 0x46, 0x66, 0xae, 0xa4, 0x9f, 0xe5, 0x29, 0xe3, 0xe3, 0xfc, 0xe8, 0xff, 0xc3, 0x8a, + 0x7e, 0x4f, 0x54, 0xf4, 0x6a, 0x6a, 0x75, 0x8b, 0x70, 0x3b, 0x53, 0xd1, 0xb7, 0x27, 0xa9, 0xa9, + 0x0a, 0xfa, 0xdf, 0xce, 0x42, 0x4d, 0xf1, 0x72, 0x36, 0xcd, 0x1b, 0x69, 0xa6, 0xc0, 0x48, 0xfa, + 0x91, 0x54, 0x7e, 0x97, 0x23, 0x69, 0xf6, 0x87, 0x8e, 0x24, 0x2c, 0xfe, 0xf8, 0x47, 0x2f, 0xa0, + 0x87, 0xf2, 0x88, 0xa9, 0x72, 0x82, 0x49, 0x0f, 0x13, 0xc7, 0xcf, 0x4d, 0xe5, 0xf8, 0x34, 0x74, + 0x98, 0xcf, 0x42, 0x87, 0x3b, 0x99, 0xf3, 0xe5, 0x4a, 0x7e, 0xb8, 0xc2, 0x93, 0x65, 0xb7, 0xe8, + 0x64, 0xf9, 0xb0, 0xa0, 0xf3, 0x7b, 0x0b, 0x1c, 0x1e, 0x0b, 0xe0, 0xa0, 0x47, 0x95, 0xcc, 0x5e, + 0x9b, 0x68, 0x32, 0x45, 0x95, 0xe8, 0x81, 0xe4, 0x97, 0x66, 0x6a, 0x52, 0x2c, 0x15, 0xa4, 0xec, + 0x9f, 0x5c, 0x75, 0x4d, 0x91, 0x0a, 0x7e, 0xaf, 0x17, 0x3e, 0x13, 0xee, 0x84, 0xee, 0xe4, 0xb0, + 0xe6, 0x74, 0x51, 0x77, 0x2b, 0x0d, 0x35, 0xcf, 0x16, 0x2e, 0x39, 0xa4, 0xc9, 0x4f, 0x62, 0xcc, + 0xbc, 0x82, 0x2d, 0x40, 0x42, 0x4d, 0x52, 0x90, 0x8d, 0xd5, 0xd1, 0xa1, 0xe3, 0x3a, 0xe1, 0xb1, + 0xe0, 0xcf, 0x71, 0x3e, 0xc4, 0xa4, 0x2d, 0xfe, 0xa4, 0x43, 0xdf, 0x22, 0x24, 0xe9, 0x7b, 0x36, + 0xe5, 0xc1, 0x58, 0x31, 0xab, 0x8c, 0xb0, 0x8d, 0xed, 0x64, 0x83, 0x54, 0xcf, 0xb4, 0x41, 0x6a, + 0x99, 0x0d, 0xb2, 0x02, 0x73, 0xa8, 0x6f, 0xe8, 0xb9, 0xbc, 0x46, 0xa9, 0x99, 0xb2, 0xa5, 0x95, + 0x52, 0xf5, 0x49, 0xa5, 0xd4, 0x29, 0x57, 0x4b, 0x99, 0x52, 0x6a, 0x61, 0x52, 0x29, 0x35, 0xcd, + 0xcd, 0x92, 0x56, 0xfd, 0x35, 0x4e, 0xab, 0xfe, 0x7e, 0xcc, 0xed, 0xf1, 0x08, 0x4f, 0xf7, 0x6c, + 0x40, 0xcb, 0xfd, 0x71, 0x3b, 0x73, 0x01, 0xd5, 0x9e, 0x64, 0x05, 0x75, 0xff, 0xf4, 0x1a, 0xea, + 0xbb, 0x6f, 0xd1, 0x7d, 0xd3, 0x9f, 0xc6, 0xa8, 0x6a, 0x7f, 0x68, 0x4b, 0x08, 0xc7, 0x3e, 0xe3, + 0x2a, 0xaf, 0x9c, 0x54, 0x79, 0xaa, 0x58, 0x64, 0x61, 0xba, 0x20, 0x8b, 0x45, 0xe3, 0x01, 0x2c, + 0x88, 0xb9, 0xa4, 0xb6, 0x2b, 0x4c, 0x5b, 0x9b, 0x1d, 0xeb, 0x25, 0x2e, 0x26, 0x5b, 0x92, 0x4e, + 0x83, 0x80, 0xaf, 0x5d, 0xd0, 0xb1, 0x65, 0xdc, 0x85, 0x3a, 0x8f, 0x37, 0x79, 0xee, 0xde, 0xd0, + 0x6f, 0x03, 0x4e, 0x0b, 0x4a, 0x86, 0x80, 0x58, 0x42, 0xe1, 0x74, 0xb5, 0xfb, 0x3f, 0xc9, 0x1c, + 0x51, 0xcb, 0xe9, 0xfe, 0x99, 0xe3, 0xe9, 0x0d, 0x54, 0x38, 0x39, 0xb7, 0xfb, 0x2f, 0x31, 0x64, + 0xea, 0x7b, 0xbd, 0xc8, 0x3a, 0x52, 0x2f, 0xb4, 0x8c, 0xf0, 0x0c, 0xdb, 0xfc, 0x81, 0x99, 0x31, + 0x6d, 0x07, 0x27, 0x8e, 0x42, 0x09, 0x63, 0xea, 0x8c, 0xb6, 0x23, 0x48, 0x0c, 0xca, 0x84, 0xce, + 0xaf, 0xc5, 0xd1, 0x33, 0x6b, 0xf2, 0x6f, 0xac, 0xdf, 0x88, 0xae, 0xaf, 0x34, 0x17, 0x86, 0x26, + 0x5f, 0x4e, 0x9c, 0xf8, 0x9a, 0x69, 0x85, 0x4d, 0xc9, 0x45, 0x33, 0x13, 0x61, 0x81, 0x54, 0xb2, + 0x9b, 0xde, 0x5a, 0x9f, 0xc2, 0xf9, 0x54, 0x7f, 0xf5, 0x1e, 0x92, 0x1a, 0x20, 0x3b, 0xbb, 0xec, + 0xfc, 0x8f, 0x12, 0xc0, 0xd6, 0x28, 0x3a, 0x96, 0x20, 0xb1, 0x03, 0x55, 0x86, 0x6e, 0x35, 0xa8, + 0xa9, 0xda, 0x8c, 0xe7, 0x5b, 0x61, 0x88, 0x08, 0x2d, 0x3e, 0xcd, 0x55, 0x9b, 0x03, 0xbc, 0x91, + 0x7a, 0xe0, 0xe5, 0xdf, 0xec, 0x81, 0x58, 0xbc, 0x8a, 0xf7, 0x10, 0xe0, 0x22, 0xb4, 0x0f, 0xe5, + 0x0d, 0x45, 0x43, 0x50, 0xb7, 0x04, 0x91, 0x89, 0x39, 0x36, 0x45, 0xd5, 0xa2, 0x71, 0x2f, 0xf2, + 0xde, 0x50, 0x57, 0x9e, 0xd3, 0x8d, 0x98, 0xfa, 0x8c, 0x11, 0x99, 0x58, 0x40, 0x8f, 0xd0, 0xca, + 0x41, 0x2c, 0x36, 0x27, 0xc4, 0x62, 0x2a, 0x17, 0x63, 0x3f, 0x14, 0xb4, 0x0e, 0x46, 0x83, 0x81, + 0x58, 0xe4, 0x59, 0x6d, 0x89, 0xc8, 0x4b, 0xac, 0x23, 0x7b, 0xdf, 0x90, 0x98, 0x48, 0x2e, 0xee, + 0xbf, 0x2f, 0xfa, 0xcf, 0xc3, 0x92, 0xa6, 0xa8, 0xac, 0x57, 0x31, 0x16, 0x44, 0x29, 0xfb, 0x6e, + 0xfa, 0x1b, 0x17, 0xe0, 0x7c, 0xaa, 0xbf, 0x18, 0x76, 0xfd, 0x32, 0x54, 0xe3, 0x9f, 0x07, 0xc8, + 0x3c, 0x94, 0x9f, 0x6d, 0x1f, 0xb4, 0xce, 0xb1, 0x8f, 0xe7, 0x3b, 0x07, 0xad, 0xd2, 0xfa, 0x3a, + 0x2c, 0x66, 0x6e, 0x4b, 0x49, 0x0d, 0x2a, 0xe6, 0xee, 0xd6, 0xce, 0x4b, 0x14, 0x5b, 0x80, 0xea, + 0xfe, 0xd3, 0x67, 0xa2, 0x55, 0x5a, 0xdf, 0x86, 0x66, 0xfa, 0xb8, 0x23, 0x75, 0x98, 0xdf, 0x46, + 0xee, 0xb3, 0xdd, 0x1d, 0x14, 0xc6, 0x86, 0xf9, 0x7c, 0x7f, 0x7f, 0x6f, 0xff, 0x61, 0xab, 0x44, + 0x00, 0xe6, 0x76, 0xbf, 0xdd, 0x63, 0x8c, 0x19, 0xc6, 0x78, 0xbe, 0xff, 0x68, 0xff, 0xe9, 0x2f, + 0xf7, 0x5b, 0xe5, 0xcd, 0xbf, 0x55, 0xa1, 0x69, 0x8a, 0x25, 0x74, 0x31, 0x16, 0x1c, 0x44, 0x9e, + 0x0f, 0x60, 0x3e, 0xfe, 0x33, 0x23, 0x39, 0x58, 0xd3, 0xbf, 0x91, 0x74, 0xda, 0x79, 0x86, 0x34, + 0xdb, 0x39, 0x72, 0x00, 0x8d, 0xd4, 0xb3, 0x20, 0x49, 0x90, 0x6a, 0xd1, 0xcb, 0x63, 0xe7, 0xca, + 0x24, 0xb6, 0x1a, 0xb1, 0x0b, 0xcd, 0xf4, 0x53, 0x1f, 0x49, 0xfa, 0x14, 0x3e, 0x21, 0x76, 0xae, + 0x4e, 0xe4, 0xab, 0x41, 0x5f, 0x42, 0x2b, 0xfb, 0xc8, 0x47, 0x92, 0x8b, 0xb1, 0x09, 0x0f, 0x88, + 0x9d, 0x6b, 0xa7, 0x48, 0xe8, 0x43, 0xe7, 0x9e, 0xc3, 0xd6, 0x26, 0x3f, 0x68, 0xe4, 0x86, 0x9e, + 0xf4, 0x4a, 0x22, 0x4c, 0x91, 0xbe, 0x19, 0x26, 0xfa, 0x23, 0x54, 0xc1, 0x0b, 0x81, 0x66, 0x8a, + 0xe2, 0x2b, 0x65, 0x1c, 0xf4, 0x05, 0x56, 0x6a, 0x69, 0xd0, 0x4b, 0x92, 0x5e, 0xc5, 0x10, 0xbe, + 0xb3, 0x36, 0x59, 0x20, 0xed, 0x37, 0x1d, 0xd2, 0xa6, 0xfc, 0x56, 0x80, 0x93, 0x53, 0x7e, 0x2b, + 0xc4, 0xc2, 0x3c, 0xbc, 0x52, 0xc0, 0x55, 0x0b, 0xaf, 0x22, 0x94, 0xdc, 0xb9, 0x32, 0x89, 0xad, + 0x2f, 0x3f, 0x03, 0x5a, 0xb5, 0xe5, 0x17, 0x63, 0xe1, 0xce, 0xda, 0x64, 0x81, 0xac, 0xaf, 0x92, + 0x62, 0x3c, 0xe3, 0xab, 0x1c, 0xf6, 0xcb, 0xf8, 0x2a, 0x5f, 0xc5, 0x4b, 0x5f, 0x65, 0xaa, 0xea, + 0xab, 0x13, 0x4b, 0x95, 0xbc, 0xaf, 0x8a, 0xab, 0x1f, 0x1c, 0xf7, 0x1e, 0xcc, 0xb2, 0x0a, 0x83, + 0x24, 0x67, 0xb9, 0x56, 0xdc, 0x74, 0x2e, 0x64, 0xa8, 0x71, 0xb7, 0x1b, 0xa5, 0xdb, 0xa5, 0xcd, + 0xbf, 0xcc, 0xc0, 0x82, 0x48, 0x7f, 0x32, 0x83, 0x3c, 0x04, 0x48, 0x0e, 0x61, 0xd2, 0x49, 0x2d, + 0x2a, 0x55, 0x49, 0x74, 0x2e, 0x15, 0xf2, 0x94, 0x52, 0xdf, 0xc8, 0xb2, 0x45, 0x2e, 0xf4, 0x52, + 0x26, 0xdb, 0xa6, 0x16, 0x79, 0xb9, 0x98, 0xa9, 0xc6, 0xda, 0x81, 0x9a, 0x4a, 0xf2, 0x44, 0x3b, + 0x1b, 0x32, 0x27, 0x54, 0xa7, 0x53, 0xc4, 0xd2, 0x35, 0xd2, 0xb2, 0xba, 0xa6, 0x51, 0xfe, 0xac, + 0xd0, 0x34, 0x2a, 0x38, 0x08, 0x8c, 0x73, 0xff, 0x09, 0x00, 0x00, 0xff, 0xff, 0xca, 0x77, 0xdb, + 0x74, 0xb2, 0x27, 0x00, 0x00, } diff --git a/pkg/kubelet/api/v1alpha1/runtime/api.proto b/pkg/kubelet/api/v1alpha1/runtime/api.proto index b161834bef0..4a23f7fa31a 100644 --- a/pkg/kubelet/api/v1alpha1/runtime/api.proto +++ b/pkg/kubelet/api/v1alpha1/runtime/api.proto @@ -301,6 +301,9 @@ message PodSandbox { optional int64 created_at = 4; // The labels of the PodSandbox map labels = 5; + // Annotations is an unstructured key value map that may be set by external + // tools to store and retrieve arbitrary metadata. + map annotations = 6; } message ListPodSandboxResponse { diff --git a/pkg/kubelet/dockershim/convert.go b/pkg/kubelet/dockershim/convert.go index 4dafd7a87b3..32297564270 100644 --- a/pkg/kubelet/dockershim/convert.go +++ b/pkg/kubelet/dockershim/convert.go @@ -55,14 +55,15 @@ func toRuntimeAPIContainer(c *dockertypes.Container) (*runtimeApi.Container, err if err != nil { return nil, err } + labels, annotations := extractLabels(c.Labels) return &runtimeApi.Container{ - Id: &c.ID, - Metadata: metadata, - Image: &runtimeApi.ImageSpec{Image: &c.Image}, - ImageRef: &c.ImageID, - State: &state, - // TODO: Extract annotations from labels. - Labels: c.Labels, + Id: &c.ID, + Metadata: metadata, + Image: &runtimeApi.ImageSpec{Image: &c.Image}, + ImageRef: &c.ImageID, + State: &state, + Labels: labels, + Annotations: annotations, }, nil } @@ -113,11 +114,13 @@ func toRuntimeAPISandbox(c *dockertypes.Container) (*runtimeApi.PodSandbox, erro if err != nil { return nil, err } + labels, annotations := extractLabels(c.Labels) return &runtimeApi.PodSandbox{ - Id: &c.ID, - Metadata: metadata, - State: &state, - CreatedAt: &c.Created, - Labels: c.Labels, // TODO: Need to disthinguish annotaions and labels. + Id: &c.ID, + Metadata: metadata, + State: &state, + CreatedAt: &c.Created, + Labels: labels, + Annotations: annotations, }, nil } diff --git a/pkg/kubelet/dockershim/docker_container.go b/pkg/kubelet/dockershim/docker_container.go index 86236cac592..b05c390b238 100644 --- a/pkg/kubelet/dockershim/docker_container.go +++ b/pkg/kubelet/dockershim/docker_container.go @@ -37,6 +37,8 @@ func (ds *dockerService) ListContainers(filter *runtimeApi.ContainerFilter) ([]* opts.Filter = dockerfilters.NewArgs() f := newDockerFilter(&opts.Filter) + // Add filter to get *only* (non-sandbox) containers. + f.AddLabel(containerTypeLabelKey, containerTypeLabelContainer) if filter != nil { if filter.Id != nil { @@ -46,7 +48,7 @@ func (ds *dockerService) ListContainers(filter *runtimeApi.ContainerFilter) ([]* f.Add("status", toDockerContainerStatus(filter.GetState())) } if filter.PodSandboxId != nil { - // TODO: implement this after sandbox functions are implemented. + f.AddLabel(sandboxIDLabelKey, *filter.PodSandboxId) } if filter.LabelSelector != nil { @@ -54,8 +56,6 @@ func (ds *dockerService) ListContainers(filter *runtimeApi.ContainerFilter) ([]* f.AddLabel(k, v) } } - // Filter out sandbox containers. - f.AddLabel(containerTypeLabelKey, containerTypeLabelContainer) } containers, err := ds.client.ListContainers(opts) if err != nil { @@ -88,12 +88,11 @@ func (ds *dockerService) CreateContainer(podSandboxID string, config *runtimeApi return "", fmt.Errorf("sandbox config is nil for container %q", config.Metadata.GetName()) } - // Merge annotations and labels because docker supports only labels. - // TODO: add a prefix to annotations so that we can distinguish labels and - // annotations when reading back them from the docker container. labels := makeLabels(config.GetLabels(), config.GetAnnotations()) // Apply a the container type label. labels[containerTypeLabelKey] = containerTypeLabelContainer + // Write the sandbox ID in the labels. + labels[sandboxIDLabelKey] = podSandboxID image := "" if iSpec := config.GetImage(); iSpec != nil { @@ -284,21 +283,21 @@ func (ds *dockerService) ContainerStatus(containerID string) (*runtimeApi.Contai return nil, err } + labels, annotations := extractLabels(r.Config.Labels) return &runtimeApi.ContainerStatus{ - Id: &r.ID, - Metadata: metadata, - Image: &runtimeApi.ImageSpec{Image: &r.Config.Image}, - ImageRef: &r.Image, - Mounts: mounts, - ExitCode: &exitCode, - State: &state, - CreatedAt: &ct, - StartedAt: &st, - FinishedAt: &ft, - Reason: &reason, - // TODO: We write annotations as labels on the docker containers. All - // these annotations will be read back as labels. Need to fix this. - Labels: r.Config.Labels, + Id: &r.ID, + Metadata: metadata, + Image: &runtimeApi.ImageSpec{Image: &r.Config.Image}, + ImageRef: &r.Image, + Mounts: mounts, + ExitCode: &exitCode, + State: &state, + CreatedAt: &ct, + StartedAt: &st, + FinishedAt: &ft, + Reason: &reason, + Labels: labels, + Annotations: annotations, }, nil } diff --git a/pkg/kubelet/dockershim/docker_container_test.go b/pkg/kubelet/dockershim/docker_container_test.go index 2d9e17d2313..f545cf57607 100644 --- a/pkg/kubelet/dockershim/docker_container_test.go +++ b/pkg/kubelet/dockershim/docker_container_test.go @@ -27,13 +27,15 @@ import ( ) // A helper to create a basic config. -func makeContainerConfig(sConfig *runtimeApi.PodSandboxConfig, name, image string, attempt uint32) *runtimeApi.ContainerConfig { +func makeContainerConfig(sConfig *runtimeApi.PodSandboxConfig, name, image string, attempt uint32, labels, annotations map[string]string) *runtimeApi.ContainerConfig { return &runtimeApi.ContainerConfig{ Metadata: &runtimeApi.ContainerMetadata{ Name: &name, Attempt: &attempt, }, - Image: &runtimeApi.ImageSpec{Image: &image}, + Image: &runtimeApi.ImageSpec{Image: &image}, + Labels: labels, + Annotations: annotations, } } @@ -49,8 +51,10 @@ func TestListContainers(t *testing.T) { for i := 0; i < 3; i++ { s := makeSandboxConfig(fmt.Sprintf("%s%d", podName, i), fmt.Sprintf("%s%d", namespace, i), fmt.Sprintf("%d", i), 0) + labels := map[string]string{"abc.xyz": fmt.Sprintf("label%d", i)} + annotations := map[string]string{"foo.bar.baz": fmt.Sprintf("annotaion%d", i)} c := makeContainerConfig(s, fmt.Sprintf("%s%d", containerName, i), - fmt.Sprintf("%s:v%d", image, i), uint32(i)) + fmt.Sprintf("%s:v%d", image, i), uint32(i), labels, annotations) sConfigs = append(sConfigs, s) configs = append(configs, c) } @@ -69,12 +73,13 @@ func TestListContainers(t *testing.T) { // Prepend to the expected list because ListContainers returns // the most recent containers first. expected = append([]*runtimeApi.Container{{ - Metadata: configs[i].Metadata, - Id: &id, - State: &state, - Image: configs[i].Image, - ImageRef: &imageRef, - Labels: map[string]string{containerTypeLabelKey: containerTypeLabelContainer}, + Metadata: configs[i].Metadata, + Id: &id, + State: &state, + Image: configs[i].Image, + ImageRef: &imageRef, + Labels: configs[i].Labels, + Annotations: configs[i].Annotations, }}, expected...) } containers, err := ds.ListContainers(nil) @@ -88,7 +93,9 @@ func TestListContainers(t *testing.T) { func TestContainerStatus(t *testing.T) { ds, _, fClock := newTestDockerSevice() sConfig := makeSandboxConfig("foo", "bar", "1", 0) - config := makeContainerConfig(sConfig, "pause", "iamimage", 0) + labels := map[string]string{"abc.xyz": "foo"} + annotations := map[string]string{"foo.bar.baz": "abc"} + config := makeContainerConfig(sConfig, "pause", "iamimage", 0, labels, annotations) var defaultTime time.Time dt := defaultTime.Unix() @@ -100,17 +107,18 @@ func TestContainerStatus(t *testing.T) { reason := "" expected := &runtimeApi.ContainerStatus{ - State: &state, - CreatedAt: &ct, - StartedAt: &st, - FinishedAt: &ft, - Metadata: config.Metadata, - Image: config.Image, - ImageRef: &imageRef, - ExitCode: &exitCode, - Reason: &reason, - Mounts: []*runtimeApi.Mount{}, - Labels: map[string]string{containerTypeLabelKey: containerTypeLabelContainer}, + State: &state, + CreatedAt: &ct, + StartedAt: &st, + FinishedAt: &ft, + Metadata: config.Metadata, + Image: config.Image, + ImageRef: &imageRef, + ExitCode: &exitCode, + Reason: &reason, + Mounts: []*runtimeApi.Mount{}, + Labels: config.Labels, + Annotations: config.Annotations, } // Create the container. diff --git a/pkg/kubelet/dockershim/docker_sandbox.go b/pkg/kubelet/dockershim/docker_sandbox.go index c070f0c5713..aabcec52bca 100644 --- a/pkg/kubelet/dockershim/docker_sandbox.go +++ b/pkg/kubelet/dockershim/docker_sandbox.go @@ -123,17 +123,16 @@ func (ds *dockerService) PodSandboxStatus(podSandboxID string) (*runtimeApi.PodS return nil, err } + labels, annotations := extractLabels(r.Config.Labels) return &runtimeApi.PodSandboxStatus{ - Id: &r.ID, - State: &state, - CreatedAt: &ct, - Metadata: metadata, - // TODO: We write annotations as labels on the docker containers. All - // these annotations will be read back as labels. Need to fix this. - // Also filter out labels only relevant to this shim. - Labels: r.Config.Labels, - Network: network, - Linux: &runtimeApi.LinuxPodSandboxStatus{Namespaces: &runtimeApi.Namespace{Network: &netNS}}, + Id: &r.ID, + State: &state, + CreatedAt: &ct, + Metadata: metadata, + Labels: labels, + Annotations: annotations, + Network: network, + Linux: &runtimeApi.LinuxPodSandboxStatus{Namespaces: &runtimeApi.Namespace{Network: &netNS}}, }, nil } @@ -145,6 +144,9 @@ func (ds *dockerService) ListPodSandbox(filter *runtimeApi.PodSandboxFilter) ([] opts.Filter = dockerfilters.NewArgs() f := newDockerFilter(&opts.Filter) + // Add filter to select only sandbox containers. + f.AddLabel(containerTypeLabelKey, containerTypeLabelSandbox) + if filter != nil { if filter.Id != nil { f.Add("id", filter.GetId()) @@ -168,8 +170,6 @@ func (ds *dockerService) ListPodSandbox(filter *runtimeApi.PodSandboxFilter) ([] f.AddLabel(k, v) } } - // Filter out sandbox containers. - f.AddLabel(containerTypeLabelKey, containerTypeLabelSandbox) } containers, err := ds.client.ListContainers(opts) if err != nil { diff --git a/pkg/kubelet/dockershim/docker_sandbox_test.go b/pkg/kubelet/dockershim/docker_sandbox_test.go index 15f488e4ea5..0e91c1b69cc 100644 --- a/pkg/kubelet/dockershim/docker_sandbox_test.go +++ b/pkg/kubelet/dockershim/docker_sandbox_test.go @@ -29,6 +29,10 @@ import ( // A helper to create a basic config. func makeSandboxConfig(name, namespace, uid string, attempt uint32) *runtimeApi.PodSandboxConfig { + return makeSandboxConfigWithLabelsAndAnnotations(name, namespace, uid, attempt, map[string]string{}, map[string]string{}) +} + +func makeSandboxConfigWithLabelsAndAnnotations(name, namespace, uid string, attempt uint32, labels, annotations map[string]string) *runtimeApi.PodSandboxConfig { return &runtimeApi.PodSandboxConfig{ Metadata: &runtimeApi.PodSandboxMetadata{ Name: &name, @@ -36,6 +40,8 @@ func makeSandboxConfig(name, namespace, uid string, attempt uint32) *runtimeApi. Uid: &uid, Attempt: &attempt, }, + Labels: labels, + Annotations: annotations, } } @@ -46,8 +52,11 @@ func TestListSandboxes(t *testing.T) { name, namespace := "foo", "bar" configs := []*runtimeApi.PodSandboxConfig{} for i := 0; i < 3; i++ { - c := makeSandboxConfig(fmt.Sprintf("%s%d", name, i), - fmt.Sprintf("%s%d", namespace, i), fmt.Sprintf("%d", i), 0) + c := makeSandboxConfigWithLabelsAndAnnotations(fmt.Sprintf("%s%d", name, i), + fmt.Sprintf("%s%d", namespace, i), fmt.Sprintf("%d", i), 0, + map[string]string{"label": fmt.Sprintf("foo%d", i)}, + map[string]string{"annotation": fmt.Sprintf("bar%d", i)}, + ) configs = append(configs, c) } @@ -60,11 +69,12 @@ func TestListSandboxes(t *testing.T) { // Prepend to the expected list because ListPodSandbox returns // the most recent sandbox first. expected = append([]*runtimeApi.PodSandbox{{ - Metadata: configs[i].Metadata, - Id: &id, - State: &state, - Labels: map[string]string{containerTypeLabelKey: containerTypeLabelSandbox}, - CreatedAt: &createdAt, + Metadata: configs[i].Metadata, + Id: &id, + State: &state, + CreatedAt: &createdAt, + Labels: configs[i].Labels, + Annotations: configs[i].Annotations, }}, expected...) } sandboxes, err := ds.ListPodSandbox(nil) @@ -77,7 +87,9 @@ func TestListSandboxes(t *testing.T) { // the status returned reflects the operations performed. func TestSandboxStatus(t *testing.T) { ds, _, fClock := newTestDockerSevice() - config := makeSandboxConfig("foo", "bar", "1", 0) + labels := map[string]string{"label": "foobar1"} + annotations := map[string]string{"annotation": "abc"} + config := makeSandboxConfigWithLabelsAndAnnotations("foo", "bar", "1", 0, labels, annotations) // TODO: The following variables depend on the internal // implementation of FakeDockerClient, and should be fixed. @@ -87,12 +99,13 @@ func TestSandboxStatus(t *testing.T) { state := runtimeApi.PodSandBoxState_READY ct := int64(0) expected := &runtimeApi.PodSandboxStatus{ - State: &state, - CreatedAt: &ct, - Metadata: config.Metadata, - Labels: map[string]string{containerTypeLabelKey: containerTypeLabelSandbox}, - Network: &runtimeApi.PodSandboxNetworkStatus{Ip: &fakeIP}, - Linux: &runtimeApi.LinuxPodSandboxStatus{Namespaces: &runtimeApi.Namespace{Network: &fakeNS}}, + State: &state, + CreatedAt: &ct, + Metadata: config.Metadata, + Network: &runtimeApi.PodSandboxNetworkStatus{Ip: &fakeIP}, + Linux: &runtimeApi.LinuxPodSandboxStatus{Namespaces: &runtimeApi.Namespace{Network: &fakeNS}}, + Labels: labels, + Annotations: annotations, } // Create the sandbox. diff --git a/pkg/kubelet/dockershim/docker_service.go b/pkg/kubelet/dockershim/docker_service.go index 168f5e14c0b..9923a94b3e4 100644 --- a/pkg/kubelet/dockershim/docker_service.go +++ b/pkg/kubelet/dockershim/docker_service.go @@ -47,8 +47,11 @@ const ( containerTypeLabelKey = "io.kubernetes.docker.type" containerTypeLabelSandbox = "podsandbox" containerTypeLabelContainer = "container" + sandboxIDLabelKey = "io.kubernetes.sandbox.id" ) +var internalLabelKeys []string = []string{containerTypeLabelKey, sandboxIDLabelKey} + func NewDockerService(client dockertools.DockerInterface) DockerLegacyService { return &dockerService{ client: dockertools.NewInstrumentedDockerInterface(client), diff --git a/pkg/kubelet/dockershim/helpers.go b/pkg/kubelet/dockershim/helpers.go index 121c8fd8f96..61a5cd3f2aa 100644 --- a/pkg/kubelet/dockershim/helpers.go +++ b/pkg/kubelet/dockershim/helpers.go @@ -30,6 +30,10 @@ import ( runtimeApi "k8s.io/kubernetes/pkg/kubelet/api/v1alpha1/runtime" ) +const ( + annotationPrefix = "annotation." +) + // apiVersion implements kubecontainer.Version interface by implementing // Compare() and String(). It uses the compare function of engine-api to // compare docker apiversions. @@ -57,23 +61,52 @@ func generateEnvList(envs []*runtimeApi.KeyValue) (result []string) { return } -// Merge annotations and labels because docker supports only labels. -// TODO: Need to be able to distinguish annotations from labels; otherwise, we -// couldn't restore the information when reading the labels back from docker. +// makeLabels converts annotations to labels and merge them with the given +// labels. This is necessary because docker does not support annotations; +// we *fake* annotations using labels. Note that docker labels are not +// updatable. func makeLabels(labels, annotations map[string]string) map[string]string { merged := make(map[string]string) for k, v := range labels { merged[k] = v } for k, v := range annotations { - if _, ok := merged[k]; !ok { - // Don't overwrite the key if it already exists. - merged[k] = v - } + // Assume there won't be conflict. + merged[fmt.Sprintf("%s%s", annotationPrefix, k)] = v } return merged } +// extractLabels converts raw docker labels to the CRI labels and annotations. +// It also filters out internal labels used by this shim. +func extractLabels(input map[string]string) (map[string]string, map[string]string) { + labels := make(map[string]string) + annotations := make(map[string]string) + for k, v := range input { + // Check if the key is used internally by the shim. + internal := false + for _, internalKey := range internalLabelKeys { + // TODO: containerTypeLabelKey is the only internal label the shim uses + // right now. Expand this to a list later. + if k == internalKey { + internal = true + break + } + } + if internal { + continue + } + + // Check if the label should be treated as an annotation. + if strings.HasPrefix(k, annotationPrefix) { + annotations[strings.TrimPrefix(k, annotationPrefix)] = v + continue + } + labels[k] = v + } + return labels, annotations +} + // generateMountBindings converts the mount list to a list of strings that // can be understood by docker. // Each element in the string is in the form of: diff --git a/pkg/kubelet/dockershim/helpers_test.go b/pkg/kubelet/dockershim/helpers_test.go new file mode 100644 index 00000000000..742ab80a572 --- /dev/null +++ b/pkg/kubelet/dockershim/helpers_test.go @@ -0,0 +1,34 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package dockershim + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestLabelsAndAnnotationsRoundTrip(t *testing.T) { + expectedLabels := map[string]string{"foo.123.abc": "baz", "bar.456.xyz": "qwe"} + expectedAnnotations := map[string]string{"uio.ert": "dfs", "jkl": "asd"} + // Merge labels and annotations into docker labels. + dockerLabels := makeLabels(expectedLabels, expectedAnnotations) + // Extract labels and annotations from docker labels. + actualLabels, actualAnnotations := extractLabels(dockerLabels) + assert.Equal(t, expectedLabels, actualLabels) + assert.Equal(t, expectedAnnotations, actualAnnotations) +}