diff --git a/Gopkg.lock b/Gopkg.lock index 675ff7dda6..b0c8b02d33 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -94,7 +94,7 @@ "protocols/client", "protocols/grpc" ] - revision = "33eecb2a445f906811a5bc9713d2dafd10768d18" + revision = "a93071539feee29bfa22b6184380d3fd7c156ef7" [[projects]] name = "github.com/kubernetes-incubator/cri-o" @@ -245,6 +245,6 @@ [solve-meta] analyzer-name = "dep" analyzer-version = 1 - inputs-digest = "8331e15417ca6d2fead042dca2d5d9e2d24c53d5f3e2f1896be962e19b0c6981" + inputs-digest = "8dba9fde76331ee3c2baa2a34230f174e3ab122a6b17975c533cdfbf42b49617" solver-name = "gps-cdcl" solver-version = 1 diff --git a/Gopkg.toml b/Gopkg.toml index 423ebf251d..89c4730fdf 100644 --- a/Gopkg.toml +++ b/Gopkg.toml @@ -60,7 +60,7 @@ [[constraint]] name = "github.com/kata-containers/agent" - revision = "33eecb2a445f906811a5bc9713d2dafd10768d18" + revision = "a93071539feee29bfa22b6184380d3fd7c156ef7" [[constraint]] name = "github.com/containerd/cri-containerd" diff --git a/vendor/github.com/kata-containers/agent/protocols/grpc/agent.pb.go b/vendor/github.com/kata-containers/agent/protocols/grpc/agent.pb.go index daeb5797c5..a109f6e521 100644 --- a/vendor/github.com/kata-containers/agent/protocols/grpc/agent.pb.go +++ b/vendor/github.com/kata-containers/agent/protocols/grpc/agent.pb.go @@ -756,12 +756,34 @@ func (m *OnlineCPUMemRequest) String() string { return proto.CompactT func (*OnlineCPUMemRequest) ProtoMessage() {} func (*OnlineCPUMemRequest) Descriptor() ([]byte, []int) { return fileDescriptorAgent, []int{23} } +// Storage represents both the rootfs of the container, and any volume that +// could have been defined through the Mount list of the OCI specification. type Storage struct { - Driver string `protobuf:"bytes,1,opt,name=driver,proto3" json:"driver,omitempty"` - Source string `protobuf:"bytes,2,opt,name=source,proto3" json:"source,omitempty"` - Fstype string `protobuf:"bytes,3,opt,name=fstype,proto3" json:"fstype,omitempty"` - Options []string `protobuf:"bytes,4,rep,name=options" json:"options,omitempty"` - MountPoint string `protobuf:"bytes,5,opt,name=mount_point,json=mountPoint,proto3" json:"mount_point,omitempty"` + // Driver is used to define the way the storage is passed through the + // virtual machine. It can be "9p", "blk", or something else, but for + // all cases, this will define if some extra steps are required before + // this storage gets mounted into the container. + Driver string `protobuf:"bytes,1,opt,name=driver,proto3" json:"driver,omitempty"` + // DriverOptions allows the caller to define a list of options such + // as block sizes, numbers of luns, ... which are very specific to + // every device and cannot be generalized through extra fields. + DriverOptions []string `protobuf:"bytes,2,rep,name=driver_options,json=driverOptions" json:"driver_options,omitempty"` + // Source can be anything representing the source of the storage. This + // will be handled by the proper handler based on the Driver used. + // For instance, it can be a very simple path if the caller knows the + // name of device inside the VM, or it can be some sort of identifier + // to let the agent find the device inside the VM. + Source string `protobuf:"bytes,3,opt,name=source,proto3" json:"source,omitempty"` + // Fstype represents the filesystem that needs to be used to mount the + // storage inside the VM. For instance, it could be "xfs" for block + // device, "9p" for shared filesystem, or "tmpfs" for shared /dev/shm. + Fstype string `protobuf:"bytes,4,opt,name=fstype,proto3" json:"fstype,omitempty"` + // Options describes the additional options that might be needed to + // mount properly the storage filesytem. + Options []string `protobuf:"bytes,5,rep,name=options" json:"options,omitempty"` + // MountPoint refers to the path where the storage should be mounted + // inside the VM. + MountPoint string `protobuf:"bytes,6,opt,name=mount_point,json=mountPoint,proto3" json:"mount_point,omitempty"` } func (m *Storage) Reset() { *m = Storage{} } @@ -776,6 +798,13 @@ func (m *Storage) GetDriver() string { return "" } +func (m *Storage) GetDriverOptions() []string { + if m != nil { + return m.DriverOptions + } + return nil +} + func (m *Storage) GetSource() string { if m != nil { return m.Source @@ -804,23 +833,25 @@ func (m *Storage) GetMountPoint() string { return "" } +// Device represents only the devices that could have been defined through the +// Linux Device list of the OCI specification. type Device struct { - // id can be used to identify the device inside the VM. Some devices + // Id can be used to identify the device inside the VM. Some devices // might not need it to be identified on the VM, and will rely on the - // provided vm_path instead. + // provided VmPath instead. Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - // type defines the type of device described. This can be "blk", + // Type defines the type of device described. This can be "blk", // "scsi", "vfio", ... // Particularly, this should be used to trigger the use of the // appropriate device handler. Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"` - // vm_path can be used by the caller to provide directly the path of + // VmPath can be used by the caller to provide directly the path of // the device as it will appear inside the VM. For some devices, the // device id or the list of options passed might not be enough to find // the device. In those cases, the caller should predict and provide // this vm_path. VmPath string `protobuf:"bytes,3,opt,name=vm_path,json=vmPath,proto3" json:"vm_path,omitempty"` - // container_path defines the path where the device should be found inside + // ContainerPath defines the path where the device should be found inside // the container. This path should match the path of the device from // the device list listed inside the OCI spec. This is used in order // to identify the right device in the spec and update it with the @@ -832,7 +863,7 @@ type Device struct { // been hotplugged. An equivalent Storage entry should be defined if // any mount needs to be performed afterwards. ContainerPath string `protobuf:"bytes,4,opt,name=container_path,json=containerPath,proto3" json:"container_path,omitempty"` - // options allows the caller to define a list of options such as block + // Options allows the caller to define a list of options such as block // sizes, numbers of luns, ... which are very specific to every device // and cannot be generalized through extra fields. Options []string `protobuf:"bytes,5,rep,name=options" json:"options,omitempty"` @@ -2442,21 +2473,36 @@ func (m *Storage) MarshalTo(dAtA []byte) (int, error) { i = encodeVarintAgent(dAtA, i, uint64(len(m.Driver))) i += copy(dAtA[i:], m.Driver) } + if len(m.DriverOptions) > 0 { + for _, s := range m.DriverOptions { + dAtA[i] = 0x12 + i++ + l = len(s) + for l >= 1<<7 { + dAtA[i] = uint8(uint64(l)&0x7f | 0x80) + l >>= 7 + i++ + } + dAtA[i] = uint8(l) + i++ + i += copy(dAtA[i:], s) + } + } if len(m.Source) > 0 { - dAtA[i] = 0x12 + dAtA[i] = 0x1a i++ i = encodeVarintAgent(dAtA, i, uint64(len(m.Source))) i += copy(dAtA[i:], m.Source) } if len(m.Fstype) > 0 { - dAtA[i] = 0x1a + dAtA[i] = 0x22 i++ i = encodeVarintAgent(dAtA, i, uint64(len(m.Fstype))) i += copy(dAtA[i:], m.Fstype) } if len(m.Options) > 0 { for _, s := range m.Options { - dAtA[i] = 0x22 + dAtA[i] = 0x2a i++ l = len(s) for l >= 1<<7 { @@ -2470,7 +2516,7 @@ func (m *Storage) MarshalTo(dAtA []byte) (int, error) { } } if len(m.MountPoint) > 0 { - dAtA[i] = 0x2a + dAtA[i] = 0x32 i++ i = encodeVarintAgent(dAtA, i, uint64(len(m.MountPoint))) i += copy(dAtA[i:], m.MountPoint) @@ -2961,6 +3007,12 @@ func (m *Storage) Size() (n int) { if l > 0 { n += 1 + l + sovAgent(uint64(l)) } + if len(m.DriverOptions) > 0 { + for _, s := range m.DriverOptions { + l = len(s) + n += 1 + l + sovAgent(uint64(l)) + } + } l = len(m.Source) if l > 0 { n += 1 + l + sovAgent(uint64(l)) @@ -5834,6 +5886,35 @@ func (m *Storage) Unmarshal(dAtA []byte) error { m.Driver = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DriverOptions", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAgent + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthAgent + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DriverOptions = append(m.DriverOptions, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 3: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Source", wireType) } @@ -5862,7 +5943,7 @@ func (m *Storage) Unmarshal(dAtA []byte) error { } m.Source = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 3: + case 4: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Fstype", wireType) } @@ -5891,7 +5972,7 @@ func (m *Storage) Unmarshal(dAtA []byte) error { } m.Fstype = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 4: + case 5: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Options", wireType) } @@ -5920,7 +6001,7 @@ func (m *Storage) Unmarshal(dAtA []byte) error { } m.Options = append(m.Options, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex - case 5: + case 6: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field MountPoint", wireType) } @@ -6410,84 +6491,85 @@ var ( func init() { proto.RegisterFile("agent.proto", fileDescriptorAgent) } var fileDescriptorAgent = []byte{ - // 1261 bytes of a gzipped FileDescriptorProto + // 1271 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x56, 0xdf, 0x6e, 0x1b, 0xc5, 0x17, 0xfe, 0x6d, 0x9c, 0x38, 0xf1, 0xb1, 0x9d, 0xa4, 0x93, 0x36, 0xd9, 0x9f, 0x5b, 0x95, 0xb0, - 0x40, 0x1b, 0x90, 0x9a, 0x8a, 0x80, 0x40, 0x2a, 0x42, 0x25, 0x4d, 0x4b, 0x94, 0x0b, 0x54, 0x6b, - 0x4c, 0x54, 0xee, 0xa2, 0xe9, 0xee, 0xc4, 0x59, 0xf0, 0xee, 0x2c, 0x33, 0xb3, 0x49, 0x4d, 0xef, - 0xb9, 0xe2, 0x92, 0xc7, 0xe0, 0x21, 0xb8, 0xe4, 0x92, 0x47, 0x40, 0x7d, 0x0a, 0x2e, 0xd1, 0xfc, - 0x5b, 0xef, 0xda, 0xeb, 0x22, 0xb5, 0x96, 0xb8, 0xf2, 0x9c, 0x73, 0xc6, 0xdf, 0xf9, 0xce, 0x99, - 0xd9, 0x33, 0x1f, 0xb4, 0xc9, 0x90, 0xa6, 0x72, 0x3f, 0xe3, 0x4c, 0x32, 0xb4, 0x3c, 0xe4, 0x59, - 0xd8, 0x6b, 0xb1, 0x30, 0x36, 0x8e, 0xde, 0xcd, 0x21, 0x63, 0xc3, 0x11, 0xbd, 0xaf, 0xad, 0xe7, - 0xf9, 0xf9, 0x7d, 0x9a, 0x64, 0x72, 0x6c, 0x82, 0xc1, 0xdf, 0x1e, 0x6c, 0x1f, 0x71, 0x4a, 0x24, - 0x3d, 0x62, 0xa9, 0x24, 0x71, 0x4a, 0x39, 0xa6, 0x3f, 0xe6, 0x54, 0x48, 0xf4, 0x2e, 0x74, 0x42, - 0xe7, 0x3b, 0x8b, 0x23, 0xdf, 0xdb, 0xf5, 0xf6, 0x5a, 0xb8, 0x5d, 0xf8, 0x4e, 0x22, 0xb4, 0x03, - 0xab, 0xf4, 0x05, 0x0d, 0x55, 0x74, 0x49, 0x47, 0x9b, 0xca, 0x3c, 0x89, 0xd0, 0xc7, 0xd0, 0x16, - 0x92, 0xc7, 0xe9, 0xf0, 0x2c, 0x17, 0x94, 0xfb, 0x8d, 0x5d, 0x6f, 0xaf, 0x7d, 0xb0, 0xb9, 0xaf, - 0xa8, 0xed, 0x0f, 0x74, 0xe0, 0x54, 0x50, 0x8e, 0x41, 0x14, 0x6b, 0x74, 0x07, 0x56, 0x23, 0x7a, - 0x19, 0x87, 0x54, 0xf8, 0xcb, 0xbb, 0x8d, 0xbd, 0xf6, 0x41, 0xc7, 0x6c, 0x7f, 0xac, 0x9d, 0xd8, - 0x05, 0xd1, 0x87, 0xb0, 0x26, 0x24, 0xe3, 0x64, 0x48, 0x85, 0xbf, 0xa2, 0x37, 0x76, 0x1d, 0xae, - 0xf6, 0xe2, 0x22, 0x8c, 0x6e, 0x41, 0xe3, 0xe9, 0xd1, 0x89, 0xdf, 0xd4, 0xd9, 0xc1, 0xee, 0xca, - 0x68, 0x88, 0x95, 0x3b, 0x78, 0x00, 0x37, 0x06, 0x92, 0x70, 0xf9, 0x06, 0x85, 0x07, 0xa7, 0xb0, - 0x8d, 0x69, 0xc2, 0x2e, 0xdf, 0xa8, 0x6b, 0x3e, 0xac, 0xca, 0x38, 0xa1, 0x2c, 0x97, 0xba, 0x6b, - 0x5d, 0xec, 0xcc, 0xe0, 0x37, 0x0f, 0xd0, 0x93, 0x17, 0x34, 0xec, 0x73, 0x16, 0x52, 0x21, 0xfe, - 0xa3, 0x93, 0xb8, 0x0b, 0xab, 0x99, 0x21, 0xe0, 0x2f, 0xeb, 0xed, 0xb6, 0xc1, 0x8e, 0x95, 0x8b, - 0x06, 0xdf, 0xc3, 0xf5, 0x41, 0x3c, 0x4c, 0xc9, 0x68, 0x81, 0x7c, 0xb7, 0xa1, 0x29, 0x34, 0xa6, - 0xa6, 0xda, 0xc5, 0xd6, 0x0a, 0xfa, 0x80, 0x9e, 0x91, 0x58, 0x2e, 0x2e, 0x53, 0x70, 0x0f, 0xb6, - 0x2a, 0x88, 0x22, 0x63, 0xa9, 0xa0, 0x9a, 0x80, 0x24, 0x32, 0x17, 0x1a, 0x6c, 0x05, 0x5b, 0x2b, - 0x88, 0x00, 0x3d, 0xe3, 0xb1, 0xa4, 0x03, 0xc9, 0x29, 0x49, 0x16, 0x51, 0x2a, 0x82, 0xe5, 0x88, - 0x48, 0xa2, 0x0b, 0xed, 0x60, 0xbd, 0x0e, 0xee, 0xc2, 0x56, 0x25, 0x8b, 0x25, 0xb5, 0x09, 0x8d, - 0x11, 0x4d, 0x35, 0x7a, 0x17, 0xab, 0x65, 0x40, 0xe0, 0x1a, 0xa6, 0x24, 0x5a, 0x1c, 0x1b, 0x9b, - 0xa2, 0x31, 0x49, 0xb1, 0x07, 0xa8, 0x9c, 0xc2, 0x52, 0x71, 0xac, 0xbd, 0x12, 0xeb, 0xa7, 0x70, - 0xed, 0x68, 0xc4, 0x04, 0x1d, 0xc8, 0x28, 0x4e, 0x17, 0x71, 0x36, 0x2f, 0x61, 0xeb, 0x5b, 0x39, - 0x7e, 0xa6, 0xc0, 0x44, 0xfc, 0x13, 0x5d, 0x50, 0x7d, 0x9c, 0x5d, 0xb9, 0xfa, 0x38, 0xbb, 0x52, - 0x27, 0x1d, 0xb2, 0x51, 0x9e, 0xa4, 0xfa, 0x9a, 0x77, 0xb1, 0xb5, 0x82, 0x5f, 0x3d, 0xb8, 0x6e, - 0x66, 0xe2, 0x80, 0xa4, 0xd1, 0x73, 0xf6, 0xc2, 0xa5, 0xef, 0xc1, 0xda, 0x05, 0x13, 0x32, 0x25, - 0x09, 0xb5, 0xa9, 0x0b, 0x5b, 0xc1, 0x47, 0xa9, 0xf0, 0x97, 0x76, 0x1b, 0x7b, 0x2d, 0xac, 0x96, - 0x95, 0x41, 0xd5, 0x78, 0xfd, 0xa0, 0x7a, 0x0f, 0xba, 0xc2, 0xa4, 0x3a, 0xcb, 0x62, 0x05, 0xa3, - 0x08, 0xad, 0xe1, 0x8e, 0x75, 0xf6, 0x95, 0x2f, 0xd8, 0x81, 0x1b, 0x8f, 0xa9, 0x90, 0x9c, 0x8d, - 0xab, 0xb4, 0x02, 0x02, 0xad, 0x93, 0xfe, 0x61, 0x14, 0x71, 0x2a, 0x04, 0xba, 0x03, 0xcd, 0x73, - 0x92, 0xc4, 0xa3, 0xb1, 0x66, 0xb8, 0x7e, 0xb0, 0x6e, 0x72, 0x9e, 0xf4, 0xbf, 0xd6, 0x5e, 0x6c, - 0xa3, 0x6a, 0x08, 0x11, 0xf3, 0x17, 0xdb, 0x27, 0x67, 0xaa, 0x03, 0x4e, 0x88, 0xf8, 0x41, 0x77, - 0xaa, 0x85, 0xf5, 0x5a, 0xb5, 0xa4, 0x75, 0x92, 0x4a, 0xca, 0xcf, 0x49, 0xa8, 0x3f, 0x11, 0x33, - 0x8d, 0x6d, 0x17, 0xac, 0xa5, 0xfe, 0xa9, 0x7b, 0x63, 0x00, 0xf5, 0x5a, 0xcd, 0x9f, 0x82, 0x5c, - 0xd1, 0x88, 0x0d, 0x47, 0xca, 0x06, 0x70, 0x79, 0x8f, 0x6a, 0x65, 0x22, 0x73, 0xdd, 0x83, 0x65, - 0xac, 0x96, 0x2a, 0xe1, 0xc5, 0x95, 0xda, 0xe0, 0xaf, 0x98, 0x84, 0xc6, 0x0a, 0x5e, 0xc2, 0x0a, - 0x66, 0xb9, 0x34, 0x97, 0x92, 0x0a, 0x69, 0xf9, 0xe8, 0xb5, 0xaa, 0x70, 0x48, 0x24, 0xbd, 0x22, - 0x63, 0x57, 0xa1, 0x35, 0x4b, 0xfc, 0x1b, 0x15, 0xfe, 0xea, 0xd3, 0x67, 0x39, 0x0f, 0xa9, 0xce, - 0xdd, 0xc2, 0xd6, 0x42, 0xd7, 0x61, 0x45, 0x84, 0x2c, 0xa3, 0x3a, 0x7b, 0x17, 0x1b, 0x23, 0xb8, - 0x07, 0x4d, 0x9d, 0x5c, 0x1d, 0x9f, 0x5d, 0xf9, 0x9e, 0x2e, 0xaf, 0x6d, 0xca, 0xd3, 0x3e, 0x6c, - 0x43, 0xc1, 0x31, 0x6c, 0x9f, 0x66, 0x11, 0x91, 0xb4, 0xe8, 0xa3, 0xbb, 0x56, 0xf7, 0xa0, 0x15, - 0x3b, 0x9f, 0xae, 0x60, 0xd2, 0xa0, 0x62, 0xeb, 0x64, 0x47, 0xf0, 0x18, 0xb6, 0x0e, 0xa3, 0xe8, - 0x6d, 0x51, 0x8e, 0xdd, 0x0b, 0xf6, 0xb6, 0x40, 0x5f, 0xc0, 0x96, 0xa9, 0xcb, 0xd4, 0xe9, 0x50, - 0xde, 0x87, 0x26, 0x77, 0x3d, 0xf1, 0x26, 0xaf, 0xb9, 0xdd, 0x64, 0x63, 0xc1, 0x0d, 0xd8, 0x7a, - 0x9a, 0x8e, 0xe2, 0x94, 0x1e, 0xf5, 0x4f, 0xbf, 0xa1, 0x6e, 0x8e, 0x05, 0xbf, 0x78, 0xb0, 0x6a, - 0xbf, 0x12, 0x7d, 0x58, 0x3c, 0xbe, 0xa4, 0xbc, 0xb8, 0x6c, 0xda, 0x2a, 0x1d, 0xd6, 0x52, 0xe5, - 0xb0, 0xb6, 0xa1, 0x79, 0x2e, 0xe4, 0x38, 0x2b, 0x0e, 0xd7, 0x58, 0xea, 0x3a, 0xb0, 0x4c, 0xc6, - 0x2c, 0x35, 0xfa, 0xa2, 0x85, 0x9d, 0x89, 0xde, 0x81, 0x76, 0xc2, 0xf2, 0x54, 0x9e, 0x65, 0x2c, - 0x4e, 0xa5, 0xbd, 0x62, 0xa0, 0x5d, 0x7d, 0xe5, 0x09, 0x7e, 0xf6, 0xa0, 0x69, 0x64, 0x08, 0x5a, - 0x87, 0xa5, 0x62, 0xee, 0x2c, 0xc5, 0x7a, 0x86, 0xeb, 0x5c, 0xf6, 0xca, 0xeb, 0x4c, 0x3b, 0xb0, - 0x7a, 0x99, 0x9c, 0x65, 0x44, 0x5e, 0x38, 0x0a, 0x97, 0x49, 0x9f, 0xc8, 0x0b, 0xf4, 0x01, 0xac, - 0x4f, 0xc6, 0x97, 0x8e, 0x9b, 0x7b, 0xd6, 0x2d, 0xbc, 0x7a, 0x5b, 0x89, 0xe9, 0x4a, 0x85, 0x69, - 0xf0, 0x1d, 0xc0, 0xe4, 0xcd, 0x56, 0xdf, 0x49, 0x5e, 0x90, 0x51, 0x4b, 0xe5, 0x19, 0x16, 0x83, - 0x4f, 0x2d, 0xd1, 0x1d, 0x58, 0x27, 0x51, 0x14, 0xab, 0xbf, 0x93, 0xd1, 0x71, 0x1c, 0x99, 0x2f, - 0xb0, 0x85, 0xa7, 0xbc, 0x1f, 0xf5, 0x60, 0xcd, 0x8d, 0x08, 0xd4, 0x84, 0xa5, 0xcb, 0x4f, 0x37, - 0xff, 0xa7, 0x7f, 0x3f, 0xdb, 0xf4, 0x0e, 0x7e, 0x6f, 0x41, 0xe7, 0x50, 0x29, 0xcc, 0x01, 0xe5, - 0xba, 0x09, 0xc7, 0xb0, 0x31, 0xa5, 0x19, 0xd1, 0x2d, 0x73, 0xbc, 0xf5, 0x52, 0xb2, 0xb7, 0xbd, - 0x6f, 0x34, 0xe8, 0xbe, 0xd3, 0xa0, 0xfb, 0x4f, 0x94, 0x06, 0x45, 0x4f, 0x60, 0xbd, 0x2a, 0xc1, - 0xd0, 0x4d, 0x37, 0x22, 0x6b, 0x84, 0xd9, 0x5c, 0x98, 0x63, 0xd8, 0x98, 0x52, 0x63, 0x8e, 0x4f, - 0xbd, 0x48, 0x9b, 0x0b, 0xf4, 0x10, 0xda, 0x25, 0xf9, 0x85, 0x7c, 0x03, 0x32, 0xab, 0xc8, 0xe6, - 0x02, 0x1c, 0x41, 0xb7, 0xa2, 0x88, 0x50, 0xcf, 0xd6, 0x53, 0x23, 0x93, 0xe6, 0x82, 0x3c, 0x82, - 0x76, 0x49, 0x98, 0x38, 0x16, 0xb3, 0xea, 0xa7, 0xf7, 0xff, 0x9a, 0x88, 0x7d, 0xa5, 0x0f, 0x01, - 0xac, 0x8e, 0x88, 0xe2, 0xb4, 0x80, 0x98, 0xd1, 0x2f, 0x05, 0x44, 0x8d, 0xe6, 0x78, 0x08, 0x60, - 0x9e, 0xff, 0x88, 0xe5, 0x12, 0xed, 0xb8, 0x86, 0x4e, 0x69, 0x8e, 0x9e, 0x3f, 0x1b, 0x98, 0x01, - 0xa0, 0x9c, 0xbf, 0x09, 0xc0, 0x97, 0x00, 0x13, 0x59, 0xe1, 0x00, 0x66, 0x84, 0xc6, 0xdc, 0x3e, - 0x1e, 0x42, 0xa7, 0x2c, 0x22, 0x90, 0xad, 0xb5, 0x46, 0x58, 0xcc, 0x85, 0x78, 0x00, 0x9d, 0xf2, - 0xac, 0x75, 0x10, 0x35, 0xf3, 0xb7, 0x37, 0x3d, 0x23, 0xd1, 0x57, 0xb0, 0x31, 0x35, 0xf0, 0xdd, - 0xad, 0xac, 0x7f, 0x07, 0x6a, 0x11, 0xa6, 0x66, 0x74, 0xf5, 0x5e, 0xff, 0x3b, 0xc2, 0xe7, 0xd0, - 0x29, 0x0f, 0x67, 0xc7, 0xbf, 0x66, 0x60, 0xf7, 0x2a, 0x03, 0x5a, 0x5d, 0xe4, 0x8a, 0x04, 0x72, - 0x17, 0xb9, 0x4e, 0x17, 0xbd, 0xee, 0xf3, 0xae, 0x2a, 0x16, 0xf7, 0x79, 0xd7, 0xea, 0x98, 0xd7, - 0x9d, 0x63, 0xf9, 0x91, 0x70, 0x45, 0xd4, 0x3c, 0x1c, 0xf3, 0x20, 0x1e, 0x75, 0xfe, 0x78, 0x75, - 0xdb, 0xfb, 0xf3, 0xd5, 0x6d, 0xef, 0xaf, 0x57, 0xb7, 0xbd, 0xe7, 0x4d, 0x1d, 0xfd, 0xe4, 0x9f, - 0x00, 0x00, 0x00, 0xff, 0xff, 0x39, 0x12, 0x9c, 0xa5, 0x38, 0x0f, 0x00, 0x00, + 0x40, 0x1b, 0x90, 0x9a, 0x8a, 0x80, 0x40, 0x2a, 0x42, 0x25, 0x4d, 0x4b, 0x94, 0x0b, 0x14, 0x6b, + 0x4c, 0x54, 0xee, 0xa2, 0xe9, 0xee, 0xc4, 0x59, 0xf0, 0xee, 0x2c, 0x33, 0xb3, 0x4e, 0x4d, 0xef, + 0x79, 0x02, 0x1e, 0x83, 0x3b, 0x5e, 0x80, 0x4b, 0x2e, 0x79, 0x04, 0xd4, 0xa7, 0xe0, 0x12, 0xcd, + 0xbf, 0xb5, 0xd7, 0x5e, 0x17, 0x29, 0xb5, 0xc4, 0x95, 0xe7, 0x9c, 0x33, 0xfe, 0xce, 0x77, 0xce, + 0xcc, 0x9c, 0xfd, 0xa0, 0x49, 0xfa, 0x34, 0x95, 0xfb, 0x19, 0x67, 0x92, 0xa1, 0xe5, 0x3e, 0xcf, + 0xc2, 0x4e, 0x83, 0x85, 0xb1, 0x71, 0x74, 0x6e, 0xf7, 0x19, 0xeb, 0x0f, 0xe8, 0x43, 0x6d, 0xbd, + 0xc8, 0x2f, 0x1e, 0xd2, 0x24, 0x93, 0x23, 0x13, 0x0c, 0xfe, 0xf6, 0x60, 0xfb, 0x88, 0x53, 0x22, + 0xe9, 0x11, 0x4b, 0x25, 0x89, 0x53, 0xca, 0x31, 0xfd, 0x31, 0xa7, 0x42, 0xa2, 0x77, 0xa1, 0x15, + 0x3a, 0xdf, 0x79, 0x1c, 0xf9, 0xde, 0xae, 0xb7, 0xd7, 0xc0, 0xcd, 0xc2, 0x77, 0x12, 0xa1, 0x1d, + 0x58, 0xa5, 0x2f, 0x69, 0xa8, 0xa2, 0x4b, 0x3a, 0x5a, 0x57, 0xe6, 0x49, 0x84, 0x3e, 0x86, 0xa6, + 0x90, 0x3c, 0x4e, 0xfb, 0xe7, 0xb9, 0xa0, 0xdc, 0xaf, 0xed, 0x7a, 0x7b, 0xcd, 0x83, 0xcd, 0x7d, + 0x45, 0x6d, 0xbf, 0xa7, 0x03, 0x67, 0x82, 0x72, 0x0c, 0xa2, 0x58, 0xa3, 0x7b, 0xb0, 0x1a, 0xd1, + 0x61, 0x1c, 0x52, 0xe1, 0x2f, 0xef, 0xd6, 0xf6, 0x9a, 0x07, 0x2d, 0xb3, 0xfd, 0xa9, 0x76, 0x62, + 0x17, 0x44, 0x1f, 0xc2, 0x9a, 0x90, 0x8c, 0x93, 0x3e, 0x15, 0xfe, 0x8a, 0xde, 0xd8, 0x76, 0xb8, + 0xda, 0x8b, 0x8b, 0x30, 0xba, 0x03, 0xb5, 0xd3, 0xa3, 0x13, 0xbf, 0xae, 0xb3, 0x83, 0xdd, 0x95, + 0xd1, 0x10, 0x2b, 0x77, 0xf0, 0x08, 0x6e, 0xf5, 0x24, 0xe1, 0xf2, 0x1a, 0x85, 0x07, 0x67, 0xb0, + 0x8d, 0x69, 0xc2, 0x86, 0xd7, 0xea, 0x9a, 0x0f, 0xab, 0x32, 0x4e, 0x28, 0xcb, 0xa5, 0xee, 0x5a, + 0x1b, 0x3b, 0x33, 0xf8, 0xd5, 0x03, 0xf4, 0xec, 0x25, 0x0d, 0xbb, 0x9c, 0x85, 0x54, 0x88, 0xff, + 0xe8, 0x24, 0xee, 0xc3, 0x6a, 0x66, 0x08, 0xf8, 0xcb, 0x7a, 0xbb, 0x6d, 0xb0, 0x63, 0xe5, 0xa2, + 0xc1, 0xf7, 0x70, 0xb3, 0x17, 0xf7, 0x53, 0x32, 0x58, 0x20, 0xdf, 0x6d, 0xa8, 0x0b, 0x8d, 0xa9, + 0xa9, 0xb6, 0xb1, 0xb5, 0x82, 0x2e, 0xa0, 0xe7, 0x24, 0x96, 0x8b, 0xcb, 0x14, 0x3c, 0x80, 0xad, + 0x12, 0xa2, 0xc8, 0x58, 0x2a, 0xa8, 0x26, 0x20, 0x89, 0xcc, 0x85, 0x06, 0x5b, 0xc1, 0xd6, 0x0a, + 0x22, 0x40, 0xcf, 0x79, 0x2c, 0x69, 0x4f, 0x72, 0x4a, 0x92, 0x45, 0x94, 0x8a, 0x60, 0x39, 0x22, + 0x92, 0xe8, 0x42, 0x5b, 0x58, 0xaf, 0x83, 0xfb, 0xb0, 0x55, 0xca, 0x62, 0x49, 0x6d, 0x42, 0x6d, + 0x40, 0x53, 0x8d, 0xde, 0xc6, 0x6a, 0x19, 0x10, 0xb8, 0x81, 0x29, 0x89, 0x16, 0xc7, 0xc6, 0xa6, + 0xa8, 0x8d, 0x53, 0xec, 0x01, 0x9a, 0x4c, 0x61, 0xa9, 0x38, 0xd6, 0xde, 0x04, 0xeb, 0x53, 0xb8, + 0x71, 0x34, 0x60, 0x82, 0xf6, 0x64, 0x14, 0xa7, 0x8b, 0x38, 0x9b, 0x57, 0xb0, 0xf5, 0xad, 0x1c, + 0x3d, 0x57, 0x60, 0x22, 0xfe, 0x89, 0x2e, 0xa8, 0x3e, 0xce, 0xae, 0x5c, 0x7d, 0x9c, 0x5d, 0xa9, + 0x93, 0x0e, 0xd9, 0x20, 0x4f, 0x52, 0x7d, 0xcd, 0xdb, 0xd8, 0x5a, 0xc1, 0x2f, 0x1e, 0xdc, 0x34, + 0x33, 0xb1, 0x47, 0xd2, 0xe8, 0x05, 0x7b, 0xe9, 0xd2, 0x77, 0x60, 0xed, 0x92, 0x09, 0x99, 0x92, + 0x84, 0xda, 0xd4, 0x85, 0xad, 0xe0, 0xa3, 0x54, 0xf8, 0x4b, 0xbb, 0xb5, 0xbd, 0x06, 0x56, 0xcb, + 0xd2, 0xa0, 0xaa, 0xbd, 0x79, 0x50, 0xbd, 0x07, 0x6d, 0x61, 0x52, 0x9d, 0x67, 0xb1, 0x82, 0x51, + 0x84, 0xd6, 0x70, 0xcb, 0x3a, 0xbb, 0xca, 0x17, 0xec, 0xc0, 0xad, 0xa7, 0x54, 0x48, 0xce, 0x46, + 0x65, 0x5a, 0x01, 0x81, 0xc6, 0x49, 0xf7, 0x30, 0x8a, 0x38, 0x15, 0x02, 0xdd, 0x83, 0xfa, 0x05, + 0x49, 0xe2, 0xc1, 0x48, 0x33, 0x5c, 0x3f, 0x58, 0x37, 0x39, 0x4f, 0xba, 0x5f, 0x6b, 0x2f, 0xb6, + 0x51, 0x35, 0x84, 0x88, 0xf9, 0x8b, 0xed, 0x93, 0x33, 0xd5, 0x01, 0x27, 0x44, 0xfc, 0xa0, 0x3b, + 0xd5, 0xc0, 0x7a, 0xad, 0x5a, 0xd2, 0x38, 0x49, 0x25, 0xe5, 0x17, 0x24, 0xd4, 0x4f, 0xc4, 0x4c, + 0x63, 0xdb, 0x05, 0x6b, 0xa9, 0x7f, 0xea, 0xde, 0x18, 0x40, 0xbd, 0x56, 0xf3, 0xa7, 0x20, 0x57, + 0x34, 0x62, 0xc3, 0x91, 0xb2, 0x01, 0x3c, 0xb9, 0x47, 0xb5, 0x32, 0x91, 0xb9, 0xee, 0xc1, 0x32, + 0x56, 0x4b, 0x95, 0xf0, 0xf2, 0x4a, 0x6d, 0xf0, 0x57, 0x4c, 0x42, 0x63, 0x05, 0xaf, 0x60, 0x05, + 0xb3, 0x5c, 0x9a, 0x4b, 0x49, 0x85, 0xb4, 0x7c, 0xf4, 0x5a, 0x55, 0xd8, 0x27, 0x92, 0x5e, 0x91, + 0x91, 0xab, 0xd0, 0x9a, 0x13, 0xfc, 0x6b, 0x25, 0xfe, 0xea, 0xe9, 0xb3, 0x9c, 0x87, 0x54, 0xe7, + 0x6e, 0x60, 0x6b, 0xa1, 0x9b, 0xb0, 0x22, 0x42, 0x96, 0x51, 0x9d, 0xbd, 0x8d, 0x8d, 0x11, 0x3c, + 0x80, 0xba, 0x4e, 0xae, 0x8e, 0xcf, 0xae, 0x7c, 0x4f, 0x97, 0xd7, 0x34, 0xe5, 0x69, 0x1f, 0xb6, + 0xa1, 0xe0, 0x18, 0xb6, 0xcf, 0xb2, 0x88, 0x48, 0x5a, 0xf4, 0xd1, 0x5d, 0xab, 0x07, 0xd0, 0x88, + 0x9d, 0x4f, 0x57, 0x30, 0x6e, 0x50, 0xb1, 0x75, 0xbc, 0x23, 0x78, 0x0a, 0x5b, 0x87, 0x51, 0xf4, + 0xb6, 0x28, 0xc7, 0xee, 0x0b, 0xf6, 0xb6, 0x40, 0x5f, 0xc0, 0x96, 0xa9, 0xcb, 0xd4, 0xe9, 0x50, + 0xde, 0x87, 0x3a, 0x77, 0x3d, 0xf1, 0xc6, 0x5f, 0x73, 0xbb, 0xc9, 0xc6, 0x82, 0x5b, 0xb0, 0x75, + 0x9a, 0x0e, 0xe2, 0x94, 0x1e, 0x75, 0xcf, 0xbe, 0xa1, 0x6e, 0x8e, 0x05, 0xbf, 0x79, 0xb0, 0x6a, + 0x5f, 0x89, 0x3e, 0x2c, 0x1e, 0x0f, 0x29, 0x2f, 0x2e, 0x9b, 0xb6, 0xd0, 0x07, 0xb0, 0x6e, 0x56, + 0xe7, 0x2c, 0x93, 0x31, 0x2b, 0xde, 0x5e, 0xdb, 0x78, 0x4f, 0x8d, 0x73, 0xe2, 0x4c, 0x6b, 0xa5, + 0x33, 0xdd, 0x86, 0xfa, 0x85, 0x90, 0xa3, 0xac, 0x38, 0x6b, 0x63, 0xa9, 0x5b, 0xe3, 0xf0, 0x56, + 0x34, 0x9e, 0x33, 0xd1, 0x3b, 0xd0, 0x4c, 0x58, 0x9e, 0xca, 0xf3, 0x8c, 0xc5, 0xa9, 0xd4, 0xaa, + 0xa2, 0x81, 0x41, 0xbb, 0xba, 0xca, 0x13, 0xfc, 0xec, 0x41, 0xdd, 0xa8, 0x15, 0xb4, 0x0e, 0x4b, + 0xc5, 0x78, 0x5a, 0x8a, 0xf5, 0xa8, 0xd7, 0xb9, 0xec, 0xcb, 0xd0, 0x99, 0x76, 0x60, 0x75, 0x98, + 0x9c, 0x67, 0x44, 0x5e, 0x3a, 0x6a, 0xc3, 0xa4, 0x4b, 0xe4, 0xa5, 0xaa, 0x6c, 0x3c, 0xe5, 0x74, + 0xdc, 0x50, 0x6c, 0x17, 0x5e, 0xbd, 0x6d, 0x2e, 0xd3, 0xe0, 0x3b, 0x80, 0xf1, 0xa7, 0x5d, 0x3d, + 0xa7, 0xbc, 0x20, 0xa3, 0x96, 0xca, 0xd3, 0x2f, 0xe6, 0xa3, 0x5a, 0xa2, 0x7b, 0xb0, 0x4e, 0xa2, + 0x28, 0x56, 0x7f, 0x27, 0x83, 0xe3, 0x38, 0x32, 0x0f, 0xb5, 0x81, 0xa7, 0xbc, 0x1f, 0x75, 0x60, + 0xcd, 0x4d, 0x12, 0x54, 0x87, 0xa5, 0xe1, 0xa7, 0x9b, 0xff, 0xd3, 0xbf, 0x9f, 0x6d, 0x7a, 0x07, + 0xbf, 0x37, 0xa0, 0x75, 0xa8, 0x84, 0x68, 0x8f, 0x72, 0xdd, 0x84, 0x63, 0xd8, 0x98, 0x92, 0x96, + 0xe8, 0x8e, 0xb9, 0x05, 0xd5, 0x8a, 0xb3, 0xb3, 0xbd, 0x6f, 0xa4, 0xea, 0xbe, 0x93, 0xaa, 0xfb, + 0xcf, 0x94, 0x54, 0x45, 0xcf, 0x60, 0xbd, 0xac, 0xd4, 0xd0, 0x6d, 0x37, 0x49, 0x2b, 0xf4, 0xdb, + 0x5c, 0x98, 0x63, 0xd8, 0x98, 0x12, 0x6d, 0x8e, 0x4f, 0xb5, 0x96, 0x9b, 0x0b, 0xf4, 0x18, 0x9a, + 0x13, 0x2a, 0x0d, 0xf9, 0x06, 0x64, 0x56, 0xb8, 0xcd, 0x05, 0x38, 0x82, 0x76, 0x49, 0x38, 0xa1, + 0x8e, 0xad, 0xa7, 0x42, 0x4d, 0xcd, 0x05, 0x79, 0x02, 0xcd, 0x09, 0xfd, 0xe2, 0x58, 0xcc, 0x8a, + 0xa4, 0xce, 0xff, 0x2b, 0x22, 0xf6, 0x63, 0x7e, 0x08, 0x60, 0xe5, 0x46, 0x14, 0xa7, 0x05, 0xc4, + 0x8c, 0xcc, 0x29, 0x20, 0x2a, 0xa4, 0xc9, 0x63, 0x00, 0xa3, 0x12, 0x22, 0x96, 0x4b, 0xb4, 0xe3, + 0x1a, 0x3a, 0x25, 0x4d, 0x3a, 0xfe, 0x6c, 0x60, 0x06, 0x80, 0x72, 0x7e, 0x1d, 0x80, 0x2f, 0x01, + 0xc6, 0xea, 0xc3, 0x01, 0xcc, 0xe8, 0x91, 0xb9, 0x7d, 0x3c, 0x84, 0xd6, 0xa4, 0xd6, 0x40, 0xb6, + 0xd6, 0x0a, 0xfd, 0x31, 0x17, 0xe2, 0x11, 0xb4, 0x26, 0x47, 0xb2, 0x83, 0xa8, 0x18, 0xd3, 0x9d, + 0xe9, 0x51, 0x8a, 0xbe, 0x82, 0x8d, 0xa9, 0xef, 0x82, 0xbb, 0x95, 0xd5, 0x9f, 0x8b, 0x4a, 0x84, + 0xa9, 0x51, 0x5e, 0xbe, 0xd7, 0xff, 0x8e, 0xf0, 0x39, 0xb4, 0x26, 0x67, 0xb8, 0xe3, 0x5f, 0x31, + 0xd7, 0x3b, 0xa5, 0x39, 0xae, 0x2e, 0x72, 0x49, 0x29, 0xb9, 0x8b, 0x5c, 0x25, 0x9f, 0xde, 0xf4, + 0xbc, 0xcb, 0xc2, 0xc6, 0x3d, 0xef, 0x4a, 0xb9, 0xf3, 0xa6, 0x73, 0x9c, 0xfc, 0x96, 0xb8, 0x22, + 0x2a, 0xbe, 0x2f, 0xf3, 0x20, 0x9e, 0xb4, 0xfe, 0x78, 0x7d, 0xd7, 0xfb, 0xf3, 0xf5, 0x5d, 0xef, + 0xaf, 0xd7, 0x77, 0xbd, 0x17, 0x75, 0x1d, 0xfd, 0xe4, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x60, + 0xd6, 0x13, 0xd5, 0x5f, 0x0f, 0x00, 0x00, }