Compare commits

...

17 Commits

@ -839,6 +839,7 @@ type EnvDependent struct {
CheckedAt *time.Time `protobuf:"bytes,5,opt,name=checked_at,json=checkedAt,proto3,stdtime" json:"checked_at,omitempty"` CheckedAt *time.Time `protobuf:"bytes,5,opt,name=checked_at,json=checkedAt,proto3,stdtime" json:"checked_at,omitempty"`
Cmd string `protobuf:"bytes,6,opt,name=cmd,proto3" json:"cmd,omitempty"` Cmd string `protobuf:"bytes,6,opt,name=cmd,proto3" json:"cmd,omitempty"`
IsRequired bool `protobuf:"varint,7,opt,name=is_required,json=isRequired,proto3" json:"is_required,omitempty"` IsRequired bool `protobuf:"varint,7,opt,name=is_required,json=isRequired,proto3" json:"is_required,omitempty"`
Version string `protobuf:"bytes,8,opt,name=version,proto3" json:"version,omitempty"`
} }
func (m *EnvDependent) Reset() { *m = EnvDependent{} } func (m *EnvDependent) Reset() { *m = EnvDependent{} }
@ -923,6 +924,13 @@ func (m *EnvDependent) GetIsRequired() bool {
return false return false
} }
func (m *EnvDependent) GetVersion() string {
if m != nil {
return m.Version
}
return ""
}
// 依赖项列表 // 依赖项列表
type Envs struct { type Envs struct {
Envs []*EnvDependent `protobuf:"bytes,1,rep,name=envs,proto3" json:"envs,omitempty"` Envs []*EnvDependent `protobuf:"bytes,1,rep,name=envs,proto3" json:"envs,omitempty"`
@ -1403,124 +1411,125 @@ func init() {
func init() { proto.RegisterFile("api/v1/config.proto", fileDescriptor_321614cd6c9c1b8a) } func init() { proto.RegisterFile("api/v1/config.proto", fileDescriptor_321614cd6c9c1b8a) }
var fileDescriptor_321614cd6c9c1b8a = []byte{ var fileDescriptor_321614cd6c9c1b8a = []byte{
// 1870 bytes of a gzipped FileDescriptorProto // 1876 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x58, 0xdd, 0x6f, 0x1b, 0xb9, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x58, 0xdd, 0x6f, 0x1b, 0xb9,
0x11, 0x8f, 0xbe, 0x2c, 0x69, 0x24, 0x4b, 0x0e, 0xfd, 0x11, 0x45, 0x49, 0x1d, 0x67, 0x7b, 0xd7, 0x11, 0x8f, 0xbe, 0x2c, 0x69, 0x24, 0x4b, 0x0e, 0xfd, 0x11, 0x45, 0x49, 0x1d, 0x67, 0x7b, 0xd7,
0xf3, 0x05, 0x85, 0x75, 0x71, 0xbf, 0x80, 0xb6, 0xc0, 0xc1, 0xb1, 0x7d, 0xa9, 0x81, 0xeb, 0xc1, 0xf3, 0x05, 0x85, 0x75, 0x71, 0xbf, 0x80, 0xb6, 0xc0, 0xc1, 0xb1, 0x7d, 0xa9, 0x81, 0xeb, 0xc1,
0xa5, 0xcf, 0xe8, 0xc7, 0xcb, 0x82, 0xde, 0xa5, 0x25, 0xd6, 0xab, 0xe5, 0x1e, 0x49, 0x29, 0x56, 0xa5, 0xcf, 0xe8, 0xc7, 0xcb, 0x82, 0xde, 0xa5, 0x25, 0xd6, 0xab, 0xe5, 0x1e, 0x49, 0x29, 0x56,
0x5e, 0x8a, 0xde, 0x53, 0x1f, 0xaf, 0x28, 0xd0, 0xfe, 0x4b, 0x2d, 0xfa, 0x72, 0x40, 0x5f, 0xfa, 0x5e, 0x8a, 0xde, 0x53, 0x81, 0xbe, 0x5c, 0x51, 0xa0, 0xfd, 0x97, 0x5a, 0xf4, 0xe5, 0x80, 0xbe,
0xd6, 0x22, 0x69, 0xff, 0x80, 0xfe, 0x05, 0x2d, 0x38, 0xe4, 0xae, 0x24, 0x1b, 0x06, 0x02, 0xf4, 0xf4, 0xad, 0x45, 0xd2, 0xfe, 0x1d, 0x2d, 0x38, 0xe4, 0xae, 0x24, 0x1b, 0x06, 0x02, 0xf4, 0x8d,
0x8d, 0x33, 0xf3, 0xe3, 0x70, 0x38, 0xf3, 0xe3, 0x90, 0xbb, 0xb0, 0xce, 0x32, 0x31, 0x98, 0x3e, 0x33, 0xf3, 0xe3, 0x70, 0x38, 0xf3, 0xe3, 0x90, 0xbb, 0xb0, 0xce, 0x32, 0x31, 0x98, 0x3e, 0x1f,
0x1f, 0x44, 0x32, 0xbd, 0x14, 0xc3, 0xbd, 0x4c, 0x49, 0x23, 0xc9, 0x0a, 0xcb, 0xc4, 0xde, 0xf4, 0x44, 0x32, 0xbd, 0x14, 0xc3, 0xbd, 0x4c, 0x49, 0x23, 0xc9, 0x0a, 0xcb, 0xc4, 0xde, 0xf4, 0x79,
0x79, 0xff, 0xc9, 0x50, 0xca, 0x61, 0xc2, 0x07, 0xa8, 0xbd, 0x98, 0x5c, 0x0e, 0x8c, 0x18, 0x73, 0xff, 0xc9, 0x50, 0xca, 0x61, 0xc2, 0x07, 0xa8, 0xbd, 0x98, 0x5c, 0x0e, 0x8c, 0x18, 0x73, 0x6d,
0x6d, 0xd8, 0x38, 0x73, 0xc0, 0xfe, 0xc6, 0x50, 0x0e, 0x25, 0x0e, 0x07, 0x76, 0xe4, 0xb5, 0x8f, 0xd8, 0x38, 0x73, 0xc0, 0xfe, 0xc6, 0x50, 0x0e, 0x25, 0x0e, 0x07, 0x76, 0xe4, 0xb5, 0x8f, 0xfd,
0xfd, 0x34, 0xeb, 0x9a, 0xa5, 0xa9, 0x34, 0xcc, 0x08, 0x99, 0x6a, 0x6f, 0x7d, 0x74, 0xd3, 0x29, 0x34, 0xeb, 0x9a, 0xa5, 0xa9, 0x34, 0xcc, 0x08, 0x99, 0x6a, 0x6f, 0x7d, 0x74, 0xd3, 0x29, 0x1f,
0x1f, 0x67, 0x66, 0xe6, 0x8c, 0xc1, 0xbf, 0xcb, 0xb0, 0x72, 0x88, 0xa1, 0x90, 0x0e, 0x94, 0x45, 0x67, 0x66, 0xe6, 0x8c, 0xc1, 0x7f, 0xca, 0xb0, 0x72, 0x88, 0xa1, 0x90, 0x0e, 0x94, 0x45, 0xdc,
0xdc, 0x2b, 0xed, 0x94, 0x76, 0x2b, 0xb4, 0x2c, 0x62, 0xb2, 0x01, 0xb5, 0x84, 0x5d, 0xf0, 0xa4, 0x2b, 0xed, 0x94, 0x76, 0x2b, 0xb4, 0x2c, 0x62, 0xb2, 0x01, 0xb5, 0x84, 0x5d, 0xf0, 0xa4, 0x57,
0x57, 0xde, 0x29, 0xed, 0x36, 0xa9, 0x13, 0x08, 0x81, 0x6a, 0xca, 0xc6, 0xbc, 0x57, 0x41, 0x25, 0xde, 0x29, 0xed, 0x36, 0xa9, 0x13, 0x08, 0x81, 0x6a, 0xca, 0xc6, 0xbc, 0x57, 0x41, 0x25, 0x8e,
0x8e, 0x2d, 0x72, 0xca, 0x92, 0x09, 0xef, 0x55, 0x1d, 0x12, 0x05, 0xb2, 0x03, 0xad, 0x2c, 0x61, 0x2d, 0x72, 0xca, 0x92, 0x09, 0xef, 0x55, 0x1d, 0x12, 0x05, 0xb2, 0x03, 0xad, 0x2c, 0x61, 0x11,
0x11, 0x1f, 0xc9, 0x24, 0xe6, 0xaa, 0x57, 0x43, 0xdb, 0xa2, 0x8a, 0x7c, 0x03, 0x40, 0xa4, 0xd9, 0x1f, 0xc9, 0x24, 0xe6, 0xaa, 0x57, 0x43, 0xdb, 0xa2, 0x8a, 0x7c, 0x03, 0x40, 0xa4, 0xd9, 0xc4,
0xc4, 0x84, 0x66, 0x96, 0xf1, 0xde, 0x0a, 0x02, 0x9a, 0xa8, 0xf9, 0x7c, 0x96, 0x71, 0xd2, 0x87, 0x84, 0x66, 0x96, 0xf1, 0xde, 0x0a, 0x02, 0x9a, 0xa8, 0xf9, 0x7c, 0x96, 0x71, 0xd2, 0x87, 0x46,
0x46, 0xc4, 0x0c, 0x1f, 0x4a, 0x35, 0xeb, 0xd5, 0xd1, 0x58, 0xc8, 0x36, 0x0c, 0x2d, 0x95, 0xe9, 0xc4, 0x0c, 0x1f, 0x4a, 0x35, 0xeb, 0xd5, 0xd1, 0x58, 0xc8, 0x36, 0x0c, 0x2d, 0x95, 0xe9, 0x35,
0x35, 0x76, 0x4a, 0xbb, 0x35, 0x8a, 0x63, 0xd2, 0x83, 0xba, 0xcc, 0x70, 0xe7, 0xbd, 0x26, 0xc2, 0x76, 0x4a, 0xbb, 0x35, 0x8a, 0x63, 0xd2, 0x83, 0xba, 0xcc, 0x70, 0xe7, 0xbd, 0x26, 0xc2, 0x73,
0x73, 0x91, 0x7c, 0x0c, 0x10, 0x29, 0xce, 0x0c, 0x8f, 0x43, 0x66, 0x7a, 0xb0, 0x53, 0xda, 0x6d, 0x91, 0x7c, 0x0c, 0x10, 0x29, 0xce, 0x0c, 0x8f, 0x43, 0x66, 0x7a, 0xb0, 0x53, 0xda, 0x6d, 0xed,
0xed, 0xf7, 0xf7, 0x5c, 0x5e, 0xf6, 0xf2, 0xbc, 0xec, 0x7d, 0x9e, 0x27, 0xfb, 0x45, 0xf5, 0xab, 0xf7, 0xf7, 0x5c, 0x5e, 0xf6, 0xf2, 0xbc, 0xec, 0x7d, 0x9e, 0x27, 0xfb, 0x45, 0xf5, 0xab, 0x7f,
0x7f, 0x3c, 0x29, 0xd1, 0xa6, 0x9f, 0x73, 0x60, 0xac, 0x83, 0x49, 0x16, 0xe7, 0x0e, 0x5a, 0xef, 0x3e, 0x29, 0xd1, 0xa6, 0x9f, 0x73, 0x60, 0xac, 0x83, 0x49, 0x16, 0xe7, 0x0e, 0x5a, 0xef, 0xea,
0xea, 0xc0, 0xcf, 0x39, 0x30, 0xc1, 0x00, 0xee, 0x7f, 0x2a, 0xb4, 0x71, 0xa9, 0xa6, 0xfc, 0x8b, 0xc0, 0xcf, 0x39, 0x30, 0xc1, 0x00, 0xee, 0x7f, 0x2a, 0xb4, 0x71, 0xa9, 0xa6, 0xfc, 0x8b, 0x09,
0x09, 0xd7, 0x66, 0x69, 0x83, 0xa5, 0x9d, 0xca, 0xe2, 0x06, 0x83, 0xe7, 0x50, 0x77, 0x60, 0x4d, 0xd7, 0x66, 0x69, 0x83, 0xa5, 0x9d, 0xca, 0xe2, 0x06, 0x83, 0xe7, 0x50, 0x77, 0x60, 0x4d, 0xbe,
0xbe, 0x05, 0x2b, 0x8e, 0x2d, 0x08, 0x6a, 0xed, 0x77, 0xf6, 0x1c, 0x5d, 0xf6, 0xbc, 0x37, 0x6f, 0x05, 0x2b, 0x8e, 0x2d, 0x08, 0x6a, 0xed, 0x77, 0xf6, 0x1c, 0x5d, 0xf6, 0xbc, 0x37, 0x6f, 0x0d,
0x0d, 0x04, 0xac, 0x3a, 0xcd, 0x21, 0xcb, 0x4c, 0x34, 0x62, 0x64, 0x0b, 0x56, 0x12, 0x9e, 0x0e, 0x04, 0xac, 0x3a, 0xcd, 0x21, 0xcb, 0x4c, 0x34, 0x62, 0x64, 0x0b, 0x56, 0x12, 0x9e, 0x0e, 0xcd,
0xcd, 0x08, 0xab, 0x5a, 0xa3, 0x5e, 0xb2, 0xf5, 0x7a, 0x25, 0x62, 0x33, 0xc2, 0xca, 0xd6, 0xa8, 0x08, 0xab, 0x5a, 0xa3, 0x5e, 0xb2, 0xf5, 0x7a, 0x25, 0x62, 0x33, 0xc2, 0xca, 0xd6, 0xa8, 0x13,
0x13, 0x2c, 0x7a, 0xc4, 0xc5, 0x70, 0x64, 0xb0, 0xb6, 0x35, 0xea, 0x25, 0x9b, 0x6a, 0xac, 0x8f, 0x2c, 0x7a, 0xc4, 0xc5, 0x70, 0x64, 0xb0, 0xb6, 0x35, 0xea, 0x25, 0x9b, 0x6a, 0xac, 0x8f, 0x2b,
0x2b, 0x2e, 0x8e, 0x83, 0xff, 0x56, 0xa0, 0xed, 0xd6, 0x3a, 0x9b, 0x69, 0xc3, 0xc7, 0x76, 0x72, 0x2e, 0x8e, 0x83, 0xff, 0x56, 0xa0, 0xed, 0xd6, 0x3a, 0x9b, 0x69, 0xc3, 0xc7, 0x76, 0x72, 0x2c,
0x2c, 0xc7, 0x4c, 0xa4, 0xb8, 0x54, 0x93, 0x7a, 0xc9, 0x2e, 0x65, 0x84, 0x49, 0x78, 0x4e, 0x22, 0xc7, 0x4c, 0xa4, 0xb8, 0x54, 0x93, 0x7a, 0xc9, 0x2e, 0x65, 0x84, 0x49, 0x78, 0x4e, 0x22, 0x14,
0x14, 0xec, 0xc6, 0xaf, 0xf8, 0xec, 0x95, 0x54, 0xb1, 0xf6, 0x44, 0x2a, 0x64, 0x4b, 0x9b, 0x98, 0xec, 0xc6, 0xaf, 0xf8, 0xec, 0x95, 0x54, 0xb1, 0xf6, 0x44, 0x2a, 0x64, 0x4b, 0x9b, 0x98, 0xeb,
0xeb, 0x48, 0x09, 0xac, 0x9d, 0x5f, 0x75, 0x51, 0x65, 0x03, 0x4a, 0xe4, 0x50, 0x7a, 0x46, 0xe1, 0x48, 0x09, 0xac, 0x9d, 0x5f, 0x75, 0x51, 0x65, 0x03, 0x4a, 0xe4, 0x50, 0x7a, 0x46, 0xe1, 0xd8,
0xd8, 0xd6, 0xfe, 0x92, 0x4d, 0x45, 0x24, 0x53, 0xcf, 0xa3, 0x5c, 0x24, 0x6b, 0x50, 0x11, 0x51, 0xd6, 0xfe, 0x92, 0x4d, 0x45, 0x24, 0x53, 0xcf, 0xa3, 0x5c, 0x24, 0x6b, 0x50, 0x11, 0x51, 0xe6,
0xe6, 0x09, 0x64, 0x87, 0xe4, 0x31, 0x34, 0x59, 0xca, 0x92, 0x99, 0x11, 0x91, 0x46, 0x02, 0x35, 0x09, 0x64, 0x87, 0xe4, 0x31, 0x34, 0x59, 0xca, 0x92, 0x99, 0x11, 0x91, 0x46, 0x02, 0x35, 0xe9,
0xe9, 0x5c, 0x61, 0x63, 0xd3, 0xc2, 0x70, 0x24, 0xb9, 0xa3, 0x51, 0x21, 0x93, 0x8f, 0x60, 0x23, 0x5c, 0x61, 0x63, 0xd3, 0xc2, 0x70, 0x24, 0xb9, 0xa3, 0x51, 0x21, 0x93, 0x8f, 0x60, 0x23, 0x92,
0x92, 0xd9, 0x4c, 0xd9, 0xbc, 0x84, 0xda, 0x30, 0x65, 0xc2, 0x19, 0x67, 0x0a, 0x19, 0xd5, 0xa4, 0xd9, 0x4c, 0xd9, 0xbc, 0x84, 0xda, 0x30, 0x65, 0xc2, 0x19, 0x67, 0x0a, 0x19, 0xd5, 0xa4, 0xa4,
0xa4, 0xb0, 0x9d, 0x59, 0xd3, 0x2f, 0x39, 0x53, 0x64, 0x00, 0xeb, 0x8a, 0x0f, 0x85, 0x36, 0x5c, 0xb0, 0x9d, 0x59, 0xd3, 0x2f, 0x39, 0x53, 0x64, 0x00, 0xeb, 0x8a, 0x0f, 0x85, 0x36, 0x5c, 0x85,
0x85, 0x17, 0x2c, 0xba, 0x1a, 0x2a, 0x39, 0x49, 0x63, 0x64, 0x50, 0x93, 0x92, 0xdc, 0xf4, 0xa2, 0x17, 0x2c, 0xba, 0x1a, 0x2a, 0x39, 0x49, 0x63, 0x64, 0x50, 0x93, 0x92, 0xdc, 0xf4, 0xa2, 0xb0,
0xb0, 0x90, 0x0f, 0x61, 0x2d, 0x91, 0x43, 0x91, 0x2e, 0xa2, 0xdb, 0x88, 0xee, 0xa2, 0x7e, 0x01, 0x90, 0x0f, 0x61, 0x2d, 0x91, 0x43, 0x91, 0x2e, 0xa2, 0xdb, 0x88, 0xee, 0xa2, 0x7e, 0x01, 0xfa,
0xfa, 0x01, 0x74, 0x15, 0x8f, 0xe4, 0x78, 0xcc, 0xd3, 0x38, 0x74, 0xc9, 0x5c, 0x45, 0x16, 0x75, 0x01, 0x74, 0x15, 0x8f, 0xe4, 0x78, 0xcc, 0xd3, 0x38, 0x74, 0xc9, 0x5c, 0x45, 0x16, 0x75, 0x0a,
0x0a, 0xf5, 0xcf, 0x31, 0xa5, 0x3d, 0xa8, 0x4f, 0xb9, 0xd2, 0x36, 0x9d, 0x1d, 0x97, 0x1c, 0x2f, 0xf5, 0xcf, 0x31, 0xa5, 0x3d, 0xa8, 0x4f, 0xb9, 0xd2, 0x36, 0x9d, 0x1d, 0x97, 0x1c, 0x2f, 0x92,
0x92, 0x27, 0xd0, 0x8a, 0x14, 0x8f, 0x85, 0x09, 0x71, 0xbf, 0x5d, 0xb4, 0x82, 0x53, 0x7d, 0x66, 0x27, 0xd0, 0x8a, 0x14, 0x8f, 0x85, 0x09, 0x71, 0xbf, 0x5d, 0xb4, 0x82, 0x53, 0x7d, 0x66, 0x77,
0x77, 0xfc, 0x00, 0xea, 0x9a, 0x47, 0xa1, 0xcd, 0xe0, 0x9a, 0x2b, 0xac, 0xe6, 0xd1, 0x49, 0x94, 0xfc, 0x00, 0xea, 0x9a, 0x47, 0xa1, 0xcd, 0xe0, 0x9a, 0x2b, 0xac, 0xe6, 0xd1, 0x49, 0x94, 0x05,
0x05, 0x7f, 0x2c, 0xe5, 0x0c, 0xf8, 0x44, 0x4a, 0xc3, 0x95, 0xad, 0x34, 0xbb, 0x90, 0x13, 0xe3, 0x7f, 0x2a, 0xe5, 0x0c, 0xf8, 0x44, 0x4a, 0xc3, 0x95, 0xad, 0x34, 0xbb, 0x90, 0x13, 0xe3, 0x09,
0x09, 0xe0, 0x04, 0xbb, 0x74, 0x24, 0x53, 0xc3, 0x22, 0xe3, 0x19, 0x90, 0x8b, 0x58, 0x85, 0xa1, 0xe0, 0x04, 0xbb, 0x74, 0x24, 0x53, 0xc3, 0x22, 0xe3, 0x19, 0x90, 0x8b, 0x58, 0x85, 0xa1, 0xe2,
0xe2, 0x7c, 0xcc, 0x53, 0xe3, 0x49, 0x30, 0x57, 0x58, 0x6b, 0x91, 0x4d, 0xcf, 0x81, 0xb9, 0xc2, 0x7c, 0xcc, 0x53, 0xe3, 0x49, 0x30, 0x57, 0x58, 0x6b, 0x91, 0x4d, 0xcf, 0x81, 0xb9, 0xc2, 0xd6,
0xd6, 0xe8, 0x92, 0xf3, 0xd8, 0xa6, 0xc8, 0xb3, 0xa0, 0x90, 0x83, 0xdf, 0x97, 0xf3, 0x63, 0x70, 0xe8, 0x92, 0xf3, 0xd8, 0xa6, 0xc8, 0xb3, 0xa0, 0x90, 0x83, 0x3f, 0x94, 0xf3, 0x63, 0x70, 0x24,
0x24, 0x74, 0x96, 0xb0, 0x19, 0xf9, 0x01, 0xf4, 0xf4, 0x48, 0xbe, 0x0a, 0x8b, 0x42, 0x4c, 0x34, 0x74, 0x96, 0xb0, 0x19, 0xf9, 0x01, 0xf4, 0xf4, 0x48, 0xbe, 0x0a, 0x8b, 0x42, 0x4c, 0x34, 0x57,
0x57, 0x61, 0x24, 0x27, 0xa9, 0x0b, 0xb6, 0x41, 0x37, 0xad, 0x9d, 0x7a, 0xf3, 0xb9, 0xe6, 0xea, 0x61, 0x24, 0x27, 0xa9, 0x0b, 0xb6, 0x41, 0x37, 0xad, 0x9d, 0x7a, 0xf3, 0xb9, 0xe6, 0xea, 0xd0,
0xd0, 0x1a, 0xc9, 0x3e, 0xa0, 0x21, 0x14, 0x69, 0xcc, 0xaf, 0x43, 0x7f, 0x34, 0x05, 0xd7, 0xb8, 0x1a, 0xc9, 0x3e, 0xa0, 0x21, 0x14, 0x69, 0xcc, 0xaf, 0x43, 0x7f, 0x34, 0x05, 0xd7, 0xb8, 0x95,
0x95, 0x06, 0x5d, 0xb7, 0xc6, 0x13, 0x6b, 0x3b, 0x2c, 0x4c, 0xe4, 0x3d, 0xe8, 0x64, 0x6c, 0xc8, 0x06, 0x5d, 0xb7, 0xc6, 0x13, 0x6b, 0x3b, 0x2c, 0x4c, 0xe4, 0x3d, 0xe8, 0x64, 0x6c, 0xc8, 0x75,
0x75, 0x98, 0x71, 0x15, 0x2a, 0xce, 0x62, 0x7f, 0x9a, 0xda, 0xa8, 0x3d, 0xe5, 0x8a, 0x72, 0x16, 0x98, 0x71, 0x15, 0x2a, 0xce, 0x62, 0x7f, 0x9a, 0xda, 0xa8, 0x3d, 0xe5, 0x8a, 0x72, 0x16, 0x5b,
0x5b, 0x5a, 0x2c, 0x11, 0xc9, 0xb8, 0x34, 0x54, 0x6f, 0xf3, 0xc8, 0x59, 0xc8, 0x8f, 0xa1, 0x8f, 0x5a, 0x2c, 0x11, 0xc9, 0xb8, 0x34, 0x54, 0x6f, 0xf3, 0xc8, 0x59, 0xc8, 0x8f, 0xa1, 0x8f, 0xa1,
0xa1, 0xc4, 0x32, 0x9a, 0x58, 0x45, 0xb8, 0x70, 0x20, 0x34, 0xe6, 0xa0, 0x41, 0x71, 0x97, 0x47, 0xc4, 0x32, 0x9a, 0x58, 0x45, 0xb8, 0x70, 0x20, 0x34, 0xe6, 0xa0, 0x41, 0x71, 0x97, 0x47, 0x1e,
0x1e, 0x70, 0xb4, 0x60, 0x0f, 0xfe, 0x54, 0x85, 0x8e, 0x3f, 0xae, 0x3c, 0x9a, 0x28, 0x61, 0x66, 0x70, 0xb4, 0x60, 0x0f, 0xfe, 0x5c, 0x85, 0x8e, 0x3f, 0xae, 0x3c, 0x9a, 0x28, 0x61, 0x66, 0xe4,
0xe4, 0x21, 0x34, 0x84, 0x0e, 0xa3, 0x44, 0x6a, 0xee, 0x93, 0x50, 0x17, 0xfa, 0xd0, 0x8a, 0x96, 0x21, 0x34, 0x84, 0x0e, 0xa3, 0x44, 0x6a, 0xee, 0x93, 0x50, 0x17, 0xfa, 0xd0, 0x8a, 0x96, 0x57,
0x57, 0xa8, 0x5f, 0x08, 0xcc, 0xd5, 0xae, 0x83, 0xea, 0x79, 0x50, 0x1f, 0x40, 0x97, 0xa7, 0xec, 0xa8, 0x5f, 0x08, 0xcc, 0xd5, 0xae, 0x83, 0xea, 0x79, 0x50, 0x1f, 0x40, 0x97, 0xa7, 0xec, 0x22,
0x22, 0xe1, 0x45, 0x6a, 0x71, 0xb3, 0x0d, 0xda, 0x71, 0xea, 0x3c, 0xa3, 0xf6, 0xdc, 0x78, 0x60, 0xe1, 0x45, 0x6a, 0x71, 0xb3, 0x0d, 0xda, 0x71, 0xea, 0x3c, 0xa3, 0xf6, 0xdc, 0x78, 0x60, 0xe4,
0xe4, 0x5a, 0x53, 0x88, 0x5c, 0xc6, 0xfd, 0x36, 0x28, 0x71, 0x36, 0xdf, 0xb5, 0x3e, 0xb5, 0x16, 0x5a, 0x53, 0x88, 0x5c, 0xc6, 0xfd, 0x36, 0x28, 0x71, 0x36, 0xdf, 0xb5, 0x3e, 0xb5, 0x16, 0xf2,
0xf2, 0x7d, 0x78, 0x70, 0x63, 0x46, 0xb1, 0x84, 0xdb, 0xec, 0xe6, 0xd2, 0xa4, 0x62, 0xa5, 0xef, 0x7d, 0x78, 0x70, 0x63, 0x46, 0xb1, 0x84, 0xdb, 0xec, 0xe6, 0xd2, 0xa4, 0x62, 0xa5, 0xef, 0xc2,
0xc2, 0xd6, 0x8d, 0x79, 0xee, 0x24, 0x18, 0x6c, 0x0b, 0x0d, 0xba, 0xb1, 0x34, 0xed, 0xd0, 0xd9, 0xd6, 0x8d, 0x79, 0xee, 0x24, 0x18, 0x6c, 0x0b, 0x0d, 0xba, 0xb1, 0x34, 0xed, 0xd0, 0xd9, 0xc8,
0xc8, 0xc7, 0xf0, 0xf8, 0xc6, 0xac, 0x4b, 0x91, 0xc6, 0x61, 0xc6, 0xb4, 0xb6, 0xe7, 0x0a, 0x9b, 0xc7, 0xf0, 0xf8, 0xc6, 0xac, 0x4b, 0x91, 0xc6, 0x61, 0xc6, 0xb4, 0xb6, 0xe7, 0x0a, 0x9b, 0x47,
0x47, 0x83, 0x3e, 0x5c, 0x9a, 0xfb, 0x89, 0x48, 0xe3, 0x53, 0x0f, 0xb0, 0x4c, 0xb9, 0xe1, 0x60, 0x83, 0x3e, 0x5c, 0x9a, 0xfb, 0x89, 0x48, 0xe3, 0x53, 0x0f, 0xb0, 0x4c, 0xb9, 0xe1, 0x60, 0x92,
0x92, 0x25, 0x92, 0xc5, 0xd8, 0x5e, 0x1a, 0x74, 0x7d, 0x69, 0xe6, 0x39, 0x9a, 0xc8, 0x33, 0xb8, 0x25, 0x92, 0xc5, 0xd8, 0x5e, 0x1a, 0x74, 0x7d, 0x69, 0xe6, 0x39, 0x9a, 0xc8, 0x33, 0xb8, 0x3f,
0x3f, 0x66, 0xd7, 0xf3, 0x8a, 0x6a, 0xf1, 0xda, 0x75, 0x9c, 0x1a, 0xed, 0x8e, 0xd9, 0x75, 0x5e, 0x66, 0xd7, 0xf3, 0x8a, 0x6a, 0xf1, 0xda, 0x75, 0x9c, 0x1a, 0xed, 0x8e, 0xd9, 0x75, 0x5e, 0xc8,
0xc8, 0x33, 0xf1, 0x1a, 0x1b, 0x4f, 0x81, 0x63, 0x49, 0x22, 0x5f, 0xf1, 0x38, 0xe4, 0xd7, 0xf6, 0x33, 0xf1, 0x1a, 0x1b, 0x4f, 0x81, 0x63, 0x49, 0x22, 0x5f, 0xf1, 0x38, 0xe4, 0xd7, 0xf6, 0x2a,
0x2a, 0xb3, 0xe7, 0x9d, 0xe4, 0xb6, 0x03, 0x67, 0x3a, 0xbe, 0x36, 0xe4, 0x7d, 0xe8, 0xb8, 0x3e, 0xb3, 0xe7, 0x9d, 0xe4, 0xb6, 0x03, 0x67, 0x3a, 0xbe, 0x36, 0xe4, 0x7d, 0xe8, 0xb8, 0x3e, 0xa2,
0xa2, 0xf8, 0x17, 0x13, 0xa1, 0xb8, 0xeb, 0x39, 0x0d, 0xba, 0x8a, 0x5a, 0xea, 0x95, 0xc1, 0x5f, 0xf8, 0x17, 0x13, 0xa1, 0xb8, 0xeb, 0x39, 0x0d, 0xba, 0x8a, 0x5a, 0xea, 0x95, 0xc1, 0xdf, 0x4a,
0x4b, 0xd0, 0x38, 0xe3, 0xc6, 0x88, 0x74, 0xa8, 0xc9, 0xb7, 0x61, 0x45, 0x63, 0x3b, 0x47, 0x46, 0xd0, 0x38, 0xe3, 0xc6, 0x88, 0x74, 0xa8, 0xc9, 0xb7, 0x61, 0x45, 0x63, 0x3b, 0x47, 0x46, 0xb4,
0xb4, 0xf6, 0x37, 0x96, 0x2f, 0x1a, 0xd7, 0xea, 0xa9, 0xc7, 0x58, 0xf4, 0x25, 0x1e, 0x7d, 0x64, 0xf6, 0x37, 0x96, 0x2f, 0x1a, 0xd7, 0xea, 0xa9, 0xc7, 0x58, 0xf4, 0x25, 0x1e, 0x7d, 0x64, 0xc7,
0xc7, 0x2d, 0xb4, 0x6b, 0x0b, 0xd4, 0x63, 0xc8, 0x3e, 0x34, 0xb4, 0xe7, 0x1e, 0x92, 0xa4, 0xb5, 0x2d, 0xb4, 0x6b, 0x0b, 0xd4, 0x63, 0xc8, 0x3e, 0x34, 0xb4, 0xe7, 0x1e, 0x92, 0xa4, 0xb5, 0xbf,
0xbf, 0x75, 0xc3, 0xbb, 0xb7, 0xd2, 0x02, 0x47, 0x06, 0x50, 0x8f, 0xdd, 0x19, 0x46, 0xa6, 0xb4, 0x75, 0xc3, 0xbb, 0xb7, 0xd2, 0x02, 0x47, 0x06, 0x50, 0x8f, 0xdd, 0x19, 0x46, 0xa6, 0xb4, 0xf6,
0xf6, 0x37, 0x97, 0xa7, 0xf8, 0x03, 0x4e, 0x73, 0x54, 0xf0, 0x9f, 0x12, 0xb4, 0x8f, 0xd3, 0xe9, 0x37, 0x97, 0xa7, 0xf8, 0x03, 0x4e, 0x73, 0x54, 0xf0, 0xfb, 0x32, 0xb4, 0x8f, 0xd3, 0xe9, 0x11,
0x11, 0xcf, 0x78, 0x1a, 0xdb, 0xc2, 0xe6, 0xaf, 0x95, 0xd2, 0xc2, 0x6b, 0xe5, 0xc6, 0x05, 0x53, 0xcf, 0x78, 0x1a, 0xdb, 0xc2, 0xe6, 0xaf, 0x95, 0xd2, 0xc2, 0x6b, 0xe5, 0xc6, 0x05, 0x53, 0xbe,
0xbe, 0x7d, 0xc1, 0x3c, 0x85, 0xb6, 0xd0, 0xa1, 0x48, 0xb5, 0x61, 0x49, 0xc2, 0x63, 0x4f, 0xea, 0x7d, 0xc1, 0x3c, 0x85, 0xb6, 0xd0, 0xa1, 0x48, 0xb5, 0x61, 0x49, 0xc2, 0x63, 0x4f, 0xea, 0x96,
0x96, 0xd0, 0x27, 0xb9, 0xca, 0x76, 0x3b, 0xae, 0x94, 0x54, 0xf9, 0x93, 0x07, 0x05, 0x7c, 0x67, 0xd0, 0x27, 0xb9, 0xca, 0x76, 0x3b, 0xae, 0x94, 0x54, 0xf9, 0x93, 0x07, 0x05, 0x7c, 0x67, 0x8c,
0x8c, 0x78, 0x74, 0xe5, 0x9e, 0x09, 0xb5, 0x77, 0x7e, 0x67, 0xb8, 0x39, 0x07, 0xc6, 0x5e, 0x56, 0x78, 0x74, 0xe5, 0x9e, 0x09, 0xb5, 0x77, 0x7e, 0x67, 0xb8, 0x39, 0x07, 0xc6, 0x5e, 0x56, 0xd1,
0xd1, 0x38, 0xf6, 0x57, 0x98, 0x1d, 0xda, 0x0e, 0x2d, 0xf4, 0xbc, 0x88, 0x8e, 0x89, 0x20, 0x74, 0x38, 0xf6, 0x57, 0x98, 0x1d, 0xda, 0x0e, 0x2d, 0xf4, 0xbc, 0x88, 0x8e, 0x89, 0x20, 0x74, 0x5e,
0x51, 0xc1, 0x8f, 0xa0, 0x7a, 0x9c, 0x4e, 0x35, 0xd9, 0x85, 0x2a, 0x4f, 0xa7, 0xda, 0xbf, 0x11, 0xc1, 0xc5, 0xe6, 0xde, 0x58, 0x6a, 0xee, 0xc1, 0x47, 0x50, 0x3d, 0x4e, 0xa7, 0x9a, 0xec, 0x42,
0x8a, 0x62, 0x2c, 0xa6, 0x83, 0x22, 0x22, 0xf8, 0x5d, 0x05, 0x6a, 0xf6, 0x10, 0x6b, 0xfb, 0x00, 0x95, 0xa7, 0x53, 0xed, 0x5f, 0x0f, 0x45, 0x99, 0x16, 0x13, 0x45, 0x11, 0x11, 0xfc, 0xae, 0x02,
0xbb, 0xd1, 0x0b, 0x2b, 0xb4, 0x39, 0x29, 0xfa, 0xdf, 0xfb, 0xd0, 0x29, 0x58, 0xe7, 0x20, 0x65, 0x35, 0x7b, 0xbc, 0xb5, 0x7d, 0x9a, 0xdd, 0xe8, 0x92, 0x15, 0xda, 0x9c, 0x14, 0x9d, 0xf1, 0x7d,
0x84, 0xac, 0xe6, 0xda, 0x02, 0x96, 0x3f, 0x5b, 0x3c, 0xac, 0xe2, 0x60, 0xb9, 0xd6, 0xc1, 0xbe, 0xe8, 0x14, 0x7c, 0x74, 0x90, 0x32, 0x42, 0x56, 0x73, 0x6d, 0x01, 0xcb, 0x1f, 0x34, 0x1e, 0x56,
0x09, 0xab, 0x4c, 0x19, 0x11, 0xd9, 0x43, 0x82, 0xa8, 0x2a, 0xa2, 0xda, 0x5e, 0x59, 0x80, 0xfc, 0x71, 0xb0, 0x5c, 0xeb, 0x60, 0xdf, 0x84, 0x55, 0xa6, 0x8c, 0x88, 0xec, 0xf1, 0x41, 0x54, 0x15,
0x81, 0xf5, 0xa0, 0x9a, 0x03, 0x79, 0xa5, 0x03, 0x3d, 0x85, 0xf6, 0x05, 0x4b, 0xd3, 0x22, 0xf0, 0x51, 0x6d, 0xaf, 0x2c, 0x40, 0xfe, 0x28, 0x7b, 0x50, 0xcd, 0x81, 0xbc, 0xd2, 0x81, 0x9e, 0x42,
0x15, 0xc4, 0xb4, 0x9c, 0xce, 0x41, 0x3e, 0x84, 0xb5, 0x4b, 0x25, 0x78, 0x1a, 0x27, 0x22, 0xbd, 0xfb, 0x82, 0xa5, 0x69, 0x11, 0xf8, 0x0a, 0x62, 0x5a, 0x4e, 0xe7, 0x20, 0x1f, 0xc2, 0xda, 0xa5,
0xf2, 0xb0, 0x3a, 0xc2, 0xba, 0x73, 0xbd, 0x83, 0x76, 0xa0, 0x2c, 0xf3, 0x77, 0x40, 0x59, 0x2e, 0x12, 0x3c, 0x8d, 0x13, 0x91, 0x5e, 0x79, 0x58, 0x1d, 0x61, 0xdd, 0xb9, 0xde, 0x41, 0x3b, 0x50,
0xdd, 0x96, 0xcd, 0xe5, 0xdb, 0x92, 0x40, 0x75, 0xc4, 0xf4, 0xc8, 0x5f, 0xf7, 0x38, 0xb6, 0x7d, 0x96, 0xf9, 0x0b, 0xa1, 0x2c, 0x97, 0xee, 0xd1, 0xe6, 0xf2, 0x3d, 0x4a, 0xa0, 0x3a, 0x62, 0x7a,
0xf4, 0x62, 0x22, 0x92, 0xe2, 0x5d, 0xd8, 0xa4, 0x75, 0x94, 0x0f, 0x30, 0x4c, 0xc5, 0x33, 0xa9, 0xe4, 0x1f, 0x02, 0x38, 0xb6, 0x1d, 0xf6, 0x62, 0x22, 0x92, 0xe2, 0xc5, 0xd8, 0xa4, 0x75, 0x94,
0xf2, 0xad, 0xb4, 0x5d, 0x98, 0x4e, 0x87, 0x6b, 0x07, 0xbf, 0x86, 0xfa, 0xe1, 0xe9, 0xf9, 0x49, 0x0f, 0x30, 0x4c, 0xc5, 0x33, 0xa9, 0xf2, 0xad, 0xb4, 0x5d, 0x98, 0x4e, 0x87, 0x6b, 0x07, 0xbf,
0x7a, 0x29, 0x2d, 0xa3, 0x22, 0xa9, 0xb8, 0xf6, 0x6f, 0x35, 0x27, 0xd8, 0x0a, 0x8d, 0x65, 0xcc, 0x86, 0xfa, 0xe1, 0xe9, 0xf9, 0x49, 0x7a, 0x29, 0x2d, 0xd7, 0x22, 0xa9, 0xb8, 0xf6, 0xaf, 0x38,
0x13, 0x77, 0x3f, 0x3b, 0xae, 0x36, 0x51, 0x83, 0xd7, 0xf3, 0x1a, 0x54, 0xc6, 0xa3, 0xd7, 0x98, 0x27, 0xd8, 0x0a, 0x8d, 0x65, 0xcc, 0x13, 0x77, 0x73, 0x3b, 0x16, 0x37, 0x51, 0x83, 0x17, 0xf7,
0xef, 0x32, 0xb5, 0x43, 0x1b, 0x7d, 0xc6, 0x55, 0x94, 0xdf, 0x26, 0x65, 0x9a, 0x8b, 0xc1, 0x97, 0x1a, 0x54, 0xc6, 0xa3, 0xd7, 0x98, 0xef, 0x32, 0xb5, 0x43, 0x1b, 0x7d, 0xc6, 0x55, 0x94, 0xdf,
0x25, 0x80, 0x9f, 0xf2, 0xb1, 0x54, 0xb3, 0x7c, 0x3d, 0x23, 0x0d, 0x4b, 0x7c, 0xd9, 0x9d, 0x80, 0x33, 0x65, 0x9a, 0x8b, 0xc1, 0x97, 0x25, 0x80, 0x9f, 0xf2, 0xb1, 0x54, 0xb3, 0x7c, 0x3d, 0x23,
0xb7, 0xf2, 0x94, 0x89, 0xc4, 0xb6, 0x2b, 0x5f, 0xed, 0xb9, 0xc2, 0x26, 0x60, 0xa2, 0xfd, 0x81, 0x0d, 0x4b, 0x7c, 0xd9, 0x9d, 0x80, 0xf7, 0xf5, 0x94, 0x89, 0xc4, 0x36, 0x32, 0x5f, 0xed, 0xb9,
0xa8, 0x50, 0x1c, 0x5b, 0xdd, 0xa5, 0xe2, 0xdc, 0x57, 0x13, 0xc7, 0x8b, 0x41, 0xd4, 0x96, 0x83, 0xc2, 0x26, 0x60, 0xa2, 0xfd, 0x51, 0xa9, 0x50, 0x1c, 0x5b, 0xdd, 0xa5, 0xe2, 0xdc, 0x57, 0x13,
0xf8, 0x0d, 0x34, 0x8e, 0x84, 0xbe, 0xc2, 0x08, 0x1e, 0x41, 0x33, 0x16, 0xfa, 0x2a, 0x5c, 0x38, 0xc7, 0x8b, 0x41, 0xd4, 0x96, 0x83, 0xf8, 0x0d, 0x34, 0x8e, 0x84, 0xbe, 0xc2, 0x08, 0x1e, 0x41,
0xa1, 0x0d, 0xab, 0xf8, 0xcc, 0x7f, 0x53, 0xb8, 0xf0, 0xca, 0x8b, 0xe1, 0xfd, 0xff, 0x01, 0xfc, 0x33, 0x16, 0xfa, 0x2a, 0x5c, 0x38, 0xbb, 0x0d, 0xab, 0xf8, 0xcc, 0x7f, 0x6d, 0xb8, 0xf0, 0xca,
0xb6, 0x04, 0x70, 0xc4, 0xa7, 0x22, 0xe2, 0x18, 0xc3, 0x53, 0xa8, 0x44, 0xd9, 0xc4, 0xf7, 0xbb, 0x8b, 0xe1, 0xfd, 0xff, 0x01, 0xfc, 0xb6, 0x04, 0x70, 0xc4, 0xa7, 0x22, 0xe2, 0x18, 0xc3, 0x53,
0x6e, 0xd1, 0x5e, 0x5c, 0x4d, 0xa8, 0xb5, 0x91, 0x67, 0xb0, 0x32, 0xc6, 0xb4, 0xf9, 0x3e, 0x47, 0xa8, 0x44, 0xd9, 0xc4, 0x77, 0xc2, 0x6e, 0xd1, 0x78, 0x5c, 0x4d, 0xa8, 0xb5, 0x91, 0x67, 0xb0,
0x72, 0xd4, 0x3c, 0x99, 0xd4, 0x23, 0xc8, 0x7b, 0x50, 0xb5, 0x3b, 0xe8, 0x55, 0xf0, 0x10, 0xae, 0x32, 0xc6, 0xb4, 0xf9, 0x0e, 0x48, 0x72, 0xd4, 0x3c, 0x99, 0xd4, 0x23, 0xc8, 0x7b, 0x50, 0xb5,
0xe5, 0xc8, 0x7c, 0xcb, 0x14, 0xad, 0xfb, 0x7f, 0xa9, 0x42, 0xd3, 0x75, 0xb0, 0x83, 0xd3, 0x13, 0x3b, 0xe8, 0x55, 0xf0, 0x10, 0xae, 0xe5, 0xc8, 0x7c, 0xcb, 0x14, 0xad, 0xfb, 0x7f, 0xad, 0x42,
0xf2, 0x33, 0x68, 0xbd, 0xe4, 0xa6, 0x68, 0xc2, 0x5b, 0xb7, 0xfa, 0xc5, 0xb1, 0xfd, 0x5e, 0xeb, 0xd3, 0xf5, 0xb6, 0x83, 0xd3, 0x13, 0xf2, 0x33, 0x68, 0xbd, 0xe4, 0xa6, 0x68, 0xcf, 0x5b, 0xb7,
0x17, 0xce, 0x72, 0x64, 0xd0, 0xfb, 0xf2, 0x6f, 0xff, 0xfa, 0x43, 0x99, 0x90, 0xb5, 0x81, 0xff, 0x3a, 0xc9, 0xb1, 0xfd, 0x92, 0xeb, 0x17, 0xce, 0x72, 0x64, 0xd0, 0xfb, 0xf2, 0xef, 0xff, 0xfe,
0xa6, 0xd4, 0xb9, 0x0f, 0x0a, 0xed, 0x73, 0xfc, 0xf4, 0xf0, 0x9f, 0x76, 0xdd, 0xe5, 0xbe, 0xa9, 0x63, 0x99, 0x90, 0xb5, 0x81, 0xff, 0xda, 0xd4, 0xb9, 0x0f, 0x0a, 0xed, 0x73, 0xfc, 0x28, 0xf1,
0xfb, 0x77, 0x2c, 0x12, 0x3c, 0x44, 0x97, 0xeb, 0xfd, 0xce, 0x60, 0xe9, 0x33, 0xf5, 0x87, 0xa5, 0x1f, 0x7d, 0xdd, 0xe5, 0x8e, 0xaa, 0xfb, 0x77, 0x2c, 0x12, 0x3c, 0x44, 0x97, 0xeb, 0xfd, 0xce,
0x67, 0xe4, 0x1c, 0x60, 0xfe, 0x05, 0x43, 0x1e, 0xe6, 0x1e, 0x6f, 0x7d, 0xd5, 0xf4, 0x6f, 0x2e, 0x60, 0xe9, 0x03, 0xf6, 0x87, 0xa5, 0x67, 0xe4, 0x1c, 0x60, 0xfe, 0x6d, 0x43, 0x1e, 0xe6, 0x1e,
0x16, 0x3c, 0x42, 0xa7, 0x9b, 0x64, 0x7d, 0xd9, 0xe9, 0x20, 0x11, 0xda, 0x90, 0x9f, 0x40, 0xc3, 0x6f, 0x7d, 0xef, 0xf4, 0x6f, 0x2e, 0x16, 0x3c, 0x42, 0xa7, 0x9b, 0x64, 0x7d, 0xd9, 0xe9, 0x20,
0xee, 0x1e, 0xdb, 0xd1, 0x5d, 0x5b, 0x5f, 0x2d, 0xb6, 0x6e, 0x61, 0xc1, 0x26, 0xfa, 0xeb, 0x92, 0x11, 0xda, 0x90, 0x9f, 0x40, 0xc3, 0xee, 0x1e, 0xdb, 0xd1, 0x5d, 0x5b, 0x5f, 0x2d, 0xb6, 0x6e,
0xd5, 0x62, 0xdf, 0x38, 0xfb, 0x18, 0xea, 0x2f, 0xb9, 0xc1, 0x5e, 0x78, 0x97, 0xa3, 0xf6, 0x42, 0x61, 0xc1, 0x26, 0xfa, 0xeb, 0x92, 0xd5, 0x62, 0xdf, 0x38, 0xfb, 0x18, 0xea, 0x2f, 0xb9, 0xc1,
0x57, 0xd4, 0xc1, 0x06, 0xfa, 0xe9, 0x90, 0x76, 0xee, 0xc7, 0x76, 0x47, 0xf2, 0x0b, 0x58, 0x75, 0x5e, 0x78, 0x97, 0xa3, 0xf6, 0x42, 0x57, 0xd4, 0xc1, 0x06, 0xfa, 0xe9, 0x90, 0x76, 0xee, 0xc7,
0xb9, 0x3b, 0x13, 0x86, 0x8f, 0x59, 0x76, 0xa7, 0xb3, 0xbb, 0x72, 0xf8, 0x00, 0xdd, 0xde, 0xef, 0x76, 0x47, 0xf2, 0x0b, 0x58, 0x75, 0xb9, 0x3b, 0x13, 0x86, 0x8f, 0x59, 0x76, 0xa7, 0xb3, 0xbb,
0x77, 0x8b, 0xf0, 0xbc, 0xa3, 0x33, 0x58, 0x7d, 0xc9, 0xcd, 0x02, 0xf9, 0xee, 0xf2, 0x5c, 0x30, 0x72, 0xf8, 0x00, 0xdd, 0xde, 0xef, 0x77, 0x8b, 0xf0, 0xbc, 0xa3, 0x33, 0x58, 0x7d, 0xc9, 0xcd,
0x6c, 0x8e, 0x0d, 0xb6, 0xd0, 0xeb, 0x1a, 0x29, 0x2a, 0x13, 0xa3, 0xed, 0xc5, 0xf7, 0xfe, 0xfc, 0x02, 0xf9, 0xee, 0xf2, 0x5c, 0x30, 0x6c, 0x8e, 0x0d, 0xb6, 0xd0, 0xeb, 0x1a, 0x29, 0x2a, 0x13,
0x66, 0xbb, 0xf4, 0xf5, 0x9b, 0xed, 0xd2, 0x3f, 0xdf, 0x6c, 0x97, 0xbe, 0x7a, 0xbb, 0x7d, 0xef, 0xa3, 0xed, 0xc5, 0xf7, 0xfe, 0xf2, 0x66, 0xbb, 0xf4, 0xf5, 0x9b, 0xed, 0xd2, 0xbf, 0xde, 0x6c,
0xeb, 0xb7, 0xdb, 0xf7, 0xfe, 0xfe, 0x76, 0xfb, 0x1e, 0xf8, 0x9f, 0x0a, 0xa7, 0xa5, 0x5f, 0xdd, 0x97, 0xbe, 0x7a, 0xbb, 0x7d, 0xef, 0xeb, 0xb7, 0xdb, 0xf7, 0xfe, 0xf1, 0x76, 0xfb, 0x1e, 0xf8,
0x1f, 0x4b, 0xc5, 0x63, 0x19, 0xf9, 0xa9, 0x3f, 0x9a, 0x3e, 0xbf, 0x58, 0xc1, 0x25, 0xbf, 0xf3, 0xdf, 0x0d, 0xa7, 0xa5, 0x5f, 0xdd, 0x1f, 0x4b, 0xc5, 0x63, 0x19, 0xf9, 0xa9, 0x3f, 0x9a, 0x3e,
0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x79, 0xb7, 0x26, 0x50, 0x8f, 0x10, 0x00, 0x00, 0xbf, 0x58, 0xc1, 0x25, 0xbf, 0xf3, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xee, 0x28, 0x27, 0x2b,
0xa9, 0x10, 0x00, 0x00,
} }
// Reference imports to suppress errors if they are not otherwise used. // Reference imports to suppress errors if they are not otherwise used.
@ -2526,6 +2535,13 @@ func (m *EnvDependent) MarshalToSizedBuffer(dAtA []byte) (int, error) {
_ = i _ = i
var l int var l int
_ = l _ = l
if len(m.Version) > 0 {
i -= len(m.Version)
copy(dAtA[i:], m.Version)
i = encodeVarintConfig(dAtA, i, uint64(len(m.Version)))
i--
dAtA[i] = 0x42
}
if m.IsRequired { if m.IsRequired {
i-- i--
if m.IsRequired { if m.IsRequired {
@ -3269,6 +3285,10 @@ func (m *EnvDependent) Size() (n int) {
if m.IsRequired { if m.IsRequired {
n += 2 n += 2
} }
l = len(m.Version)
if l > 0 {
n += 1 + l + sovConfig(uint64(l))
}
return n return n
} }
@ -5778,6 +5798,38 @@ func (m *EnvDependent) Unmarshal(dAtA []byte) error {
} }
} }
m.IsRequired = bool(v != 0) m.IsRequired = bool(v != 0)
case 8:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowConfig
}
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 ErrInvalidLengthConfig
}
postIndex := iNdEx + intStringLen
if postIndex < 0 {
return ErrInvalidLengthConfig
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.Version = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
default: default:
iNdEx = preIndex iNdEx = preIndex
skippy, err := skipConfig(dAtA[iNdEx:]) skippy, err := skipConfig(dAtA[iNdEx:])

@ -116,6 +116,7 @@ message EnvDependent {
[ (gogoproto.stdtime) = true ]; // [ (gogoproto.stdtime) = true ]; //
string cmd = 6; // string cmd = 6; //
bool is_required = 7; // bool is_required = 7; //
string version = 8; //
} }
// //

@ -900,7 +900,8 @@ func (m *SetDocumentRecommendRequest) GetType() int32 {
// 查询文档(针对首页的查询) // 查询文档(针对首页的查询)
type ListDocumentForHomeRequest struct { type ListDocumentForHomeRequest struct {
Limit int64 `protobuf:"varint,1,opt,name=limit,proto3" json:"limit,omitempty"` Limit int64 `protobuf:"varint,1,opt,name=limit,proto3" json:"limit,omitempty"`
Field []string `protobuf:"bytes,2,rep,name=field,proto3" json:"field,omitempty"`
} }
func (m *ListDocumentForHomeRequest) Reset() { *m = ListDocumentForHomeRequest{} } func (m *ListDocumentForHomeRequest) Reset() { *m = ListDocumentForHomeRequest{} }
@ -943,6 +944,13 @@ func (m *ListDocumentForHomeRequest) GetLimit() int64 {
return 0 return 0
} }
func (m *ListDocumentForHomeRequest) GetField() []string {
if m != nil {
return m.Field
}
return nil
}
// 首页文档查询返回项 // 首页文档查询返回项
type ListDocumentForHomeItem struct { type ListDocumentForHomeItem struct {
CategoryId int64 `protobuf:"varint,1,opt,name=category_id,json=categoryId,proto3" json:"category_id,omitempty"` CategoryId int64 `protobuf:"varint,1,opt,name=category_id,json=categoryId,proto3" json:"category_id,omitempty"`
@ -1373,116 +1381,116 @@ func init() {
func init() { proto.RegisterFile("api/v1/document.proto", fileDescriptor_55a584ae3a7fc022) } func init() { proto.RegisterFile("api/v1/document.proto", fileDescriptor_55a584ae3a7fc022) }
var fileDescriptor_55a584ae3a7fc022 = []byte{ var fileDescriptor_55a584ae3a7fc022 = []byte{
// 1729 bytes of a gzipped FileDescriptorProto // 1736 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x58, 0xdd, 0x6e, 0xdb, 0xc8, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x58, 0xdd, 0x6e, 0xdb, 0xc8,
0x15, 0x0e, 0x45, 0xd9, 0x96, 0x8e, 0x64, 0x45, 0x99, 0x58, 0x36, 0x4d, 0xdb, 0x92, 0xc2, 0xd4, 0x15, 0x0e, 0x45, 0xd9, 0x96, 0x8e, 0x64, 0x45, 0x99, 0x58, 0x36, 0x4d, 0xdb, 0x92, 0xc2, 0xd4,
0xad, 0xd7, 0x28, 0x2c, 0xc4, 0x45, 0x7b, 0xb1, 0x7b, 0x51, 0x78, 0x9d, 0x34, 0x35, 0x50, 0x14, 0xad, 0xd7, 0x28, 0x2c, 0xc4, 0x45, 0x7b, 0xb1, 0x7b, 0x51, 0x78, 0x9d, 0x34, 0x6b, 0xa0, 0x28,
0x0b, 0x66, 0x83, 0x05, 0xf6, 0x46, 0x65, 0xc4, 0xb1, 0xc4, 0x96, 0x12, 0x59, 0x72, 0x64, 0x55, 0x16, 0xcc, 0x06, 0x0b, 0xec, 0x8d, 0xca, 0x88, 0x63, 0x89, 0x2d, 0x25, 0xb2, 0xe4, 0xc8, 0xaa,
0x41, 0x7b, 0xd3, 0x07, 0x28, 0x16, 0xe8, 0xab, 0xf4, 0x21, 0x7a, 0x55, 0x04, 0x68, 0x2f, 0x0a, 0x82, 0xf6, 0xa6, 0x0f, 0x50, 0x2c, 0xd0, 0x57, 0xe9, 0x43, 0xf4, 0xaa, 0x08, 0xd0, 0x5e, 0x14,
0xf4, 0xa2, 0x8b, 0xa4, 0x2f, 0xd0, 0x37, 0x28, 0xe6, 0xcc, 0x0c, 0x45, 0xf1, 0xc7, 0xf6, 0xa6, 0xe8, 0x45, 0x17, 0x49, 0x5f, 0xa0, 0x6f, 0x50, 0xcc, 0x99, 0x19, 0x8a, 0xe2, 0x8f, 0xed, 0xdd,
0x77, 0x9c, 0x33, 0x33, 0xdf, 0x37, 0x67, 0xe6, 0x9c, 0x6f, 0xce, 0x10, 0x3a, 0x4e, 0xe8, 0x0d, 0xbd, 0xe3, 0x9c, 0x99, 0xf9, 0xbe, 0x39, 0x33, 0xe7, 0x7c, 0x73, 0x86, 0xd0, 0x71, 0x42, 0x6f,
0x6e, 0x9e, 0x0d, 0xdc, 0x60, 0x34, 0x9f, 0xd2, 0x19, 0x3b, 0x0b, 0xa3, 0x80, 0x05, 0x64, 0xd3, 0x70, 0xf3, 0x6c, 0xe0, 0x06, 0xa3, 0xf9, 0x94, 0xce, 0xd8, 0x59, 0x18, 0x05, 0x2c, 0x20, 0x9b,
0x09, 0xbd, 0xb3, 0x9b, 0x67, 0x66, 0x6f, 0x1c, 0x04, 0x63, 0x9f, 0x0e, 0xd0, 0xfa, 0x66, 0x7e, 0x4e, 0xe8, 0x9d, 0xdd, 0x3c, 0x33, 0x7b, 0xe3, 0x20, 0x18, 0xfb, 0x74, 0x80, 0xd6, 0x37, 0xf3,
0x3d, 0x60, 0xde, 0x94, 0xc6, 0xcc, 0x99, 0x86, 0x62, 0xa0, 0xb9, 0x33, 0x0e, 0xc6, 0x01, 0x7e, 0xeb, 0x01, 0xf3, 0xa6, 0x34, 0x66, 0xce, 0x34, 0x14, 0x03, 0xcd, 0x9d, 0x71, 0x30, 0x0e, 0xf0,
0x0e, 0xf8, 0x97, 0xb4, 0x1e, 0xca, 0x69, 0x1c, 0xdc, 0x99, 0xcd, 0x02, 0xe6, 0x30, 0x2f, 0x98, 0x73, 0xc0, 0xbf, 0xa4, 0xf5, 0x50, 0x4e, 0xe3, 0xe0, 0xce, 0x6c, 0x16, 0x30, 0x87, 0x79, 0xc1,
0xc5, 0xb2, 0xf7, 0x20, 0x0b, 0x4a, 0xa7, 0x21, 0x5b, 0xca, 0xce, 0x3d, 0xb9, 0x20, 0x87, 0x31, 0x2c, 0x96, 0xbd, 0x07, 0x59, 0x50, 0x3a, 0x0d, 0xd9, 0x52, 0x76, 0xee, 0xc9, 0x05, 0x39, 0x8c,
0x67, 0x34, 0x59, 0x2d, 0xc9, 0x7c, 0x24, 0x3b, 0xe6, 0x31, 0x8d, 0x84, 0xc9, 0xfa, 0xb6, 0x06, 0x39, 0xa3, 0xc9, 0x6a, 0x49, 0xe6, 0x23, 0xd9, 0x31, 0x8f, 0x69, 0x24, 0x4c, 0xd6, 0x37, 0x35,
0xb5, 0xe7, 0x72, 0xe1, 0xa4, 0x05, 0x15, 0xcf, 0x35, 0xb4, 0xbe, 0x76, 0xa2, 0xdb, 0x15, 0xcf, 0xa8, 0x3d, 0x97, 0x0b, 0x27, 0x2d, 0xa8, 0x78, 0xae, 0xa1, 0xf5, 0xb5, 0x13, 0xdd, 0xae, 0x78,
0x25, 0x3b, 0xb0, 0xc1, 0x3c, 0xe6, 0x53, 0xa3, 0xd2, 0xd7, 0x4e, 0xea, 0xb6, 0x68, 0x10, 0x13, 0x2e, 0xd9, 0x81, 0x0d, 0xe6, 0x31, 0x9f, 0x1a, 0x95, 0xbe, 0x76, 0x52, 0xb7, 0x45, 0x83, 0x98,
0x6a, 0xbf, 0xa1, 0xcb, 0x45, 0x10, 0xb9, 0xb1, 0xa1, 0x63, 0x47, 0xd2, 0x26, 0x7d, 0x68, 0xb8, 0x50, 0xfb, 0x2d, 0x5d, 0x2e, 0x82, 0xc8, 0x8d, 0x0d, 0x1d, 0x3b, 0x92, 0x36, 0xe9, 0x43, 0xc3,
0x34, 0x1e, 0x45, 0x5e, 0xc8, 0x57, 0x6b, 0x54, 0xb1, 0x3b, 0x6d, 0x22, 0x7b, 0xb0, 0xc5, 0xe9, 0xa5, 0xf1, 0x28, 0xf2, 0x42, 0xbe, 0x5a, 0xa3, 0x8a, 0xdd, 0x69, 0x13, 0xd9, 0x83, 0x2d, 0x4e,
0x87, 0x9e, 0x6b, 0x6c, 0x20, 0xd1, 0x26, 0x6f, 0x5e, 0x21, 0xd9, 0x28, 0xb8, 0xa1, 0x91, 0xb1, 0x3f, 0xf4, 0x5c, 0x63, 0x03, 0x89, 0x36, 0x79, 0xf3, 0x0a, 0xc9, 0x46, 0xc1, 0x0d, 0x8d, 0x8c,
0x29, 0xc8, 0xb0, 0xc1, 0xad, 0x0b, 0xcf, 0x65, 0x13, 0x63, 0xab, 0xaf, 0x9d, 0x6c, 0xd8, 0xa2, 0x4d, 0x41, 0x86, 0x0d, 0x6e, 0x5d, 0x78, 0x2e, 0x9b, 0x18, 0x5b, 0x7d, 0xed, 0x64, 0xc3, 0x16,
0x41, 0x76, 0x61, 0x73, 0x42, 0xbd, 0xf1, 0x84, 0x19, 0x35, 0x34, 0xcb, 0x16, 0x31, 0x60, 0x2b, 0x0d, 0xb2, 0x0b, 0x9b, 0x13, 0xea, 0x8d, 0x27, 0xcc, 0xa8, 0xa1, 0x59, 0xb6, 0x88, 0x01, 0x5b,
0x8c, 0xe8, 0x8d, 0x47, 0x17, 0x46, 0x1d, 0x3b, 0x54, 0x93, 0xe3, 0x84, 0xce, 0x98, 0xc6, 0x06, 0x61, 0x44, 0x6f, 0x3c, 0xba, 0x30, 0xea, 0xd8, 0xa1, 0x9a, 0x1c, 0x27, 0x74, 0xc6, 0x34, 0x36,
0x08, 0x1c, 0x6c, 0x10, 0x02, 0xd5, 0xf9, 0xdc, 0x73, 0x8d, 0x06, 0x52, 0xe2, 0x37, 0x39, 0x86, 0x40, 0xe0, 0x60, 0x83, 0x10, 0xa8, 0xce, 0xe7, 0x9e, 0x6b, 0x34, 0x90, 0x12, 0xbf, 0xc9, 0x31,
0x96, 0x1b, 0x2c, 0x66, 0x7e, 0xe0, 0xb8, 0xc3, 0x51, 0x30, 0x9f, 0x31, 0xa3, 0x89, 0x53, 0xb6, 0xb4, 0xdc, 0x60, 0x31, 0xf3, 0x03, 0xc7, 0x1d, 0x8e, 0x82, 0xf9, 0x8c, 0x19, 0x4d, 0x9c, 0xb2,
0x95, 0xf5, 0x92, 0x1b, 0xc9, 0x11, 0x00, 0x07, 0x96, 0x43, 0xb6, 0x71, 0x48, 0x9d, 0x5b, 0x44, 0xad, 0xac, 0x97, 0xdc, 0x48, 0x8e, 0x00, 0x38, 0xb0, 0x1c, 0xb2, 0x8d, 0x43, 0xea, 0xdc, 0x22,
0xf7, 0x31, 0xb4, 0xae, 0x9d, 0x9b, 0x20, 0xf2, 0x18, 0x95, 0x43, 0x5a, 0x02, 0x45, 0x59, 0xc5, 0xba, 0x8f, 0xa1, 0x75, 0xed, 0xdc, 0x04, 0x91, 0xc7, 0xa8, 0x1c, 0xd2, 0x12, 0x28, 0xca, 0x2a,
0xb0, 0xa7, 0xb0, 0x3d, 0x0a, 0xa6, 0x7c, 0xf3, 0xe5, 0xa8, 0x87, 0x38, 0xaa, 0x29, 0x8d, 0x62, 0x86, 0x3d, 0x85, 0xed, 0x51, 0x30, 0xe5, 0x9b, 0x2f, 0x47, 0x3d, 0xc4, 0x51, 0x4d, 0x69, 0x14,
0xd0, 0x0e, 0x6c, 0xc4, 0xa3, 0x20, 0xa2, 0x46, 0x5b, 0xac, 0x1d, 0x1b, 0xa4, 0x07, 0x0d, 0xfc, 0x83, 0x76, 0x60, 0x23, 0x1e, 0x05, 0x11, 0x35, 0xda, 0x62, 0xed, 0xd8, 0x20, 0x3d, 0x68, 0xe0,
0x90, 0x13, 0x1f, 0x61, 0x1f, 0xa0, 0x29, 0x99, 0x16, 0x46, 0xde, 0x88, 0x1a, 0x44, 0xba, 0xcc, 0x87, 0x9c, 0xf8, 0x08, 0xfb, 0x00, 0x4d, 0xc9, 0xb4, 0x30, 0xf2, 0x46, 0xd4, 0x20, 0xd2, 0x65,
0x1b, 0xdc, 0xe5, 0xd8, 0x7b, 0x4b, 0x8d, 0xc7, 0xb8, 0xf9, 0xf8, 0xcd, 0xb7, 0x33, 0x66, 0x0e, 0xde, 0xe0, 0x2e, 0xc7, 0xde, 0x5b, 0x6a, 0x3c, 0xc6, 0xcd, 0xc7, 0x6f, 0xbe, 0x9d, 0x31, 0x73,
0x9b, 0xc7, 0xc6, 0x8e, 0xd8, 0x4e, 0xd1, 0x22, 0x3f, 0x05, 0x18, 0x45, 0xd4, 0x61, 0xd4, 0x1d, 0xd8, 0x3c, 0x36, 0x76, 0xc4, 0x76, 0x8a, 0x16, 0xf9, 0x39, 0xc0, 0x28, 0xa2, 0x0e, 0xa3, 0xee,
0x3a, 0xcc, 0xe8, 0xf4, 0xb5, 0x93, 0xc6, 0xb9, 0x79, 0x26, 0x42, 0xef, 0x4c, 0x85, 0xde, 0xd9, 0xd0, 0x61, 0x46, 0xa7, 0xaf, 0x9d, 0x34, 0xce, 0xcd, 0x33, 0x11, 0x7a, 0x67, 0x2a, 0xf4, 0xce,
0x97, 0x2a, 0x9e, 0x3f, 0xaf, 0x7e, 0xf3, 0xef, 0x9e, 0x66, 0xd7, 0xe5, 0x9c, 0x0b, 0xc6, 0x01, 0xbe, 0x50, 0xf1, 0xfc, 0x69, 0xf5, 0xeb, 0xff, 0xf4, 0x34, 0xbb, 0x2e, 0xe7, 0x5c, 0x30, 0x0e,
0xe6, 0xa1, 0xab, 0x00, 0x76, 0xef, 0x0b, 0x20, 0xe7, 0x08, 0x00, 0x97, 0xfa, 0x54, 0x02, 0xec, 0x30, 0x0f, 0x5d, 0x05, 0xb0, 0x7b, 0x5f, 0x00, 0x39, 0x47, 0x00, 0xb8, 0xd4, 0xa7, 0x12, 0x60,
0xdd, 0x17, 0x40, 0xce, 0xb9, 0x60, 0xe4, 0x12, 0x9a, 0x11, 0x15, 0xbb, 0x89, 0x10, 0x47, 0xf7, 0xef, 0xbe, 0x00, 0x72, 0xce, 0x05, 0x23, 0x97, 0xd0, 0x8c, 0xa8, 0xd8, 0x4d, 0x84, 0x38, 0xba,
0x84, 0x68, 0x24, 0xb3, 0x2e, 0x18, 0xf9, 0x3e, 0x3c, 0x54, 0xab, 0x50, 0xb1, 0x6b, 0xe0, 0xf6, 0x27, 0x44, 0x23, 0x99, 0x75, 0xc1, 0xc8, 0x0f, 0xe1, 0xa1, 0x5a, 0x85, 0x8a, 0x5d, 0x03, 0xb7,
0x6d, 0x4b, 0xf3, 0x6b, 0x11, 0xc2, 0x26, 0xd4, 0x78, 0xff, 0xcc, 0x99, 0x52, 0x63, 0x5f, 0x64, 0x6f, 0x5b, 0x9a, 0x5f, 0x8b, 0x10, 0x36, 0xa1, 0xc6, 0xfb, 0x67, 0xce, 0x94, 0x1a, 0xfb, 0x22,
0x86, 0x6a, 0xf3, 0xe3, 0x1a, 0x39, 0x8c, 0x8e, 0x83, 0x68, 0xc9, 0xe7, 0x9b, 0x7d, 0xfd, 0x44, 0x33, 0x54, 0x9b, 0x1f, 0xd7, 0xc8, 0x61, 0x74, 0x1c, 0x44, 0x4b, 0x3e, 0xdf, 0xec, 0xeb, 0x27,
0xb7, 0x41, 0x99, 0xae, 0x5c, 0xf2, 0x09, 0xb4, 0xd3, 0x24, 0x08, 0x72, 0x80, 0x20, 0x0f, 0x53, 0xba, 0x0d, 0xca, 0x74, 0xe5, 0x92, 0x8f, 0xa0, 0x9d, 0x26, 0x41, 0x90, 0x03, 0x04, 0x79, 0x98,
0x2c, 0x88, 0xd5, 0x06, 0x9d, 0xfe, 0x8e, 0x19, 0x87, 0xd8, 0xcb, 0x3f, 0xc9, 0x39, 0xc0, 0x2a, 0x62, 0x41, 0xac, 0x36, 0xe8, 0xf4, 0xf7, 0xcc, 0x38, 0xc4, 0x5e, 0xfe, 0x49, 0xce, 0x01, 0x56,
0xdb, 0x8d, 0x2e, 0x3a, 0x49, 0xce, 0x84, 0x02, 0x9d, 0x5d, 0x24, 0x3d, 0x76, 0x6a, 0x14, 0xe9, 0xd9, 0x6e, 0x74, 0xd1, 0x49, 0x72, 0x26, 0x14, 0xe8, 0xec, 0x22, 0xe9, 0xb1, 0x53, 0xa3, 0x48,
0x43, 0x95, 0x13, 0x19, 0x3d, 0x1c, 0xdd, 0x54, 0xa3, 0x39, 0x8b, 0x8d, 0x3d, 0x7c, 0xcd, 0x74, 0x1f, 0xaa, 0x9c, 0xc8, 0xe8, 0xe1, 0xe8, 0xa6, 0x1a, 0xcd, 0x59, 0x6c, 0xec, 0xe1, 0x6b, 0xa6,
0xe6, 0xbc, 0xf1, 0xe9, 0x70, 0xfc, 0xd6, 0x0b, 0x8d, 0x7e, 0x5f, 0x3b, 0xa9, 0xd9, 0x20, 0x4c, 0x33, 0xe7, 0x8d, 0x4f, 0x87, 0xe3, 0xb7, 0x5e, 0x68, 0xf4, 0xfb, 0xda, 0x49, 0xcd, 0x06, 0x61,
0x2f, 0xdf, 0x7a, 0xa1, 0x08, 0xdf, 0xd9, 0x0d, 0x8d, 0xd8, 0x90, 0x46, 0x51, 0x10, 0x19, 0x4f, 0x7a, 0xf9, 0xd6, 0x0b, 0x45, 0xf8, 0xce, 0x6e, 0x68, 0xc4, 0x86, 0x34, 0x8a, 0x82, 0xc8, 0x78,
0x70, 0x49, 0x4d, 0x69, 0x7c, 0xc1, 0x6d, 0xd6, 0x0f, 0xa0, 0xf3, 0x1c, 0x1d, 0x50, 0x3a, 0x63, 0x82, 0x4b, 0x6a, 0x4a, 0xe3, 0x0b, 0x6e, 0xb3, 0x7e, 0x04, 0x9d, 0xe7, 0xe8, 0x80, 0xd2, 0x19,
0xd3, 0xdf, 0xce, 0x69, 0xbc, 0x92, 0x1b, 0x5d, 0xc8, 0x8d, 0x35, 0x80, 0x23, 0x9b, 0x62, 0xda, 0x9b, 0xfe, 0x6e, 0x4e, 0xe3, 0x95, 0xdc, 0xe8, 0x42, 0x6e, 0xac, 0x01, 0x1c, 0xd9, 0x14, 0xd3,
0xdb, 0x74, 0xb4, 0x1c, 0xf9, 0x77, 0x4e, 0x78, 0x01, 0xe4, 0x25, 0x65, 0x65, 0xa3, 0x94, 0x8a, 0xde, 0xa6, 0xa3, 0xe5, 0xc8, 0xbf, 0x73, 0xc2, 0x0b, 0x20, 0x2f, 0x29, 0x2b, 0x1b, 0xa5, 0x54,
0xf5, 0xa0, 0xb1, 0xf0, 0xd8, 0x64, 0xe8, 0xcc, 0xd9, 0x24, 0x88, 0x50, 0xcb, 0x6a, 0x36, 0x70, 0xac, 0x07, 0x8d, 0x85, 0xc7, 0x26, 0x43, 0x67, 0xce, 0x26, 0x41, 0x84, 0x5a, 0x56, 0xb3, 0x81,
0xd3, 0x05, 0x5a, 0xac, 0x21, 0x1c, 0xbc, 0x5a, 0xc1, 0xc4, 0x97, 0xf2, 0x4c, 0x14, 0x5e, 0x0f, 0x9b, 0x2e, 0xd0, 0x62, 0x0d, 0xe1, 0xe0, 0xd5, 0x0a, 0x26, 0xbe, 0x94, 0x67, 0xa2, 0xf0, 0x7a,
0x1a, 0x4a, 0xda, 0x87, 0x09, 0x3d, 0x28, 0xd3, 0x95, 0x9b, 0x3d, 0xda, 0x4a, 0xf6, 0x68, 0xad, 0xd0, 0x50, 0xd2, 0x3e, 0x4c, 0xe8, 0x41, 0x99, 0xae, 0xdc, 0xec, 0xd1, 0x56, 0xb2, 0x47, 0x6b,
0x77, 0x15, 0x78, 0xfc, 0x0b, 0x2f, 0xce, 0xad, 0x94, 0x40, 0x95, 0xeb, 0x90, 0x5c, 0x2b, 0x7e, 0xbd, 0xab, 0xc0, 0xe3, 0x5f, 0x7a, 0x71, 0x6e, 0xa5, 0x04, 0xaa, 0x5c, 0x87, 0xe4, 0x5a, 0xf1,
0x27, 0xf9, 0x59, 0x49, 0xe5, 0x67, 0x0b, 0x2a, 0x0b, 0x57, 0x6a, 0x6d, 0x65, 0x81, 0x52, 0x79, 0x3b, 0xc9, 0xcf, 0x4a, 0x2a, 0x3f, 0x5b, 0x50, 0x59, 0xb8, 0x52, 0x6b, 0x2b, 0x0b, 0x94, 0xca,
0xed, 0x51, 0xdf, 0x35, 0xaa, 0x7d, 0x9d, 0x4b, 0x25, 0x36, 0xb8, 0x35, 0x88, 0x5c, 0x1a, 0xa1, 0x6b, 0x8f, 0xfa, 0xae, 0x51, 0xed, 0xeb, 0x5c, 0x2a, 0xb1, 0xc1, 0xad, 0x41, 0xe4, 0xd2, 0x08,
0xae, 0xd6, 0x6d, 0xd1, 0xc8, 0x2e, 0x6e, 0x33, 0x17, 0x77, 0x29, 0x41, 0xde, 0xc2, 0x4e, 0x25, 0x75, 0xb5, 0x6e, 0x8b, 0x46, 0x76, 0x71, 0x9b, 0xb9, 0xb8, 0x4b, 0x09, 0xf2, 0x16, 0x76, 0x2a,
0xc8, 0x2b, 0x55, 0xa8, 0xf5, 0xf5, 0x94, 0x2a, 0x3c, 0x81, 0xa6, 0x17, 0x0f, 0x93, 0xfc, 0x30, 0x41, 0x5e, 0xa9, 0x42, 0xad, 0xaf, 0xa7, 0x54, 0xe1, 0x09, 0x34, 0xbd, 0x78, 0x98, 0xe4, 0x87,
0xea, 0x7d, 0xfd, 0xa4, 0x66, 0x37, 0xbc, 0xd8, 0x56, 0x26, 0xbe, 0x14, 0xdf, 0x9b, 0x7a, 0x0c, 0x51, 0xef, 0xeb, 0x27, 0x35, 0xbb, 0xe1, 0xc5, 0xb6, 0x32, 0xf1, 0xa5, 0xf8, 0xde, 0xd4, 0x63,
0xd5, 0x56, 0xb7, 0x45, 0x43, 0x85, 0x6d, 0x63, 0x15, 0xb6, 0x47, 0x6b, 0x02, 0xd3, 0x44, 0x6f, 0xa8, 0xb6, 0xba, 0x2d, 0x1a, 0x2a, 0x6c, 0x1b, 0xab, 0xb0, 0x3d, 0x5a, 0x13, 0x98, 0x26, 0x7a,
0x52, 0xf2, 0xb1, 0x0f, 0xb5, 0x6b, 0x4a, 0x87, 0x6c, 0x19, 0x52, 0x54, 0xd8, 0xba, 0xbd, 0x75, 0x93, 0x92, 0x8f, 0x7d, 0xa8, 0x5d, 0x53, 0x3a, 0x64, 0xcb, 0x90, 0xa2, 0xc2, 0xd6, 0xed, 0xad,
0x4d, 0xe9, 0x97, 0xcb, 0x90, 0x5a, 0x5f, 0xc1, 0xa3, 0xf5, 0x1d, 0x0d, 0xfd, 0x25, 0xde, 0x57, 0x6b, 0x4a, 0xbf, 0x58, 0x86, 0xd4, 0xfa, 0x12, 0x1e, 0xad, 0xef, 0x68, 0xe8, 0x2f, 0xf1, 0xbe,
0x01, 0x73, 0x7c, 0xb9, 0xa1, 0xa2, 0x41, 0x7e, 0x08, 0x35, 0x75, 0x58, 0x78, 0x36, 0x8d, 0xf3, 0x0a, 0x98, 0xe3, 0xcb, 0x0d, 0x15, 0x0d, 0xf2, 0x63, 0xa8, 0xa9, 0xc3, 0xc2, 0xb3, 0x69, 0x9c,
0xb6, 0x8a, 0xf5, 0x64, 0x7a, 0x32, 0xc2, 0xa2, 0x40, 0x2e, 0x71, 0x01, 0xaa, 0xef, 0x8a, 0xd1, 0xb7, 0x55, 0xac, 0x27, 0xd3, 0x93, 0x11, 0x16, 0x05, 0x72, 0x89, 0x0b, 0x50, 0x7d, 0x57, 0x8c,
0xe9, 0xea, 0x26, 0xd4, 0xd2, 0x37, 0xe1, 0x53, 0xd8, 0x5e, 0xe5, 0x93, 0x38, 0x7a, 0xce, 0xdb, 0x4e, 0x57, 0x37, 0xa1, 0x96, 0xbe, 0x09, 0x9f, 0xc2, 0xf6, 0x2a, 0x9f, 0xc4, 0xd1, 0x73, 0xde,
0x5c, 0x19, 0xc5, 0xbd, 0x26, 0x64, 0x58, 0x4f, 0xc9, 0xb0, 0xf5, 0x27, 0x0d, 0x3a, 0xeb, 0x3c, 0xe6, 0xca, 0x28, 0xee, 0x35, 0x21, 0xc3, 0x7a, 0x4a, 0x86, 0xad, 0x3f, 0x6b, 0xd0, 0x59, 0xe7,
0x2a, 0x28, 0x0e, 0xa1, 0xce, 0x53, 0x60, 0xc1, 0x2f, 0x09, 0xa4, 0xab, 0xd9, 0x2b, 0xc3, 0x9d, 0x51, 0x41, 0x71, 0x08, 0x75, 0x9e, 0x02, 0x0b, 0x7e, 0x49, 0x20, 0x5d, 0xcd, 0x5e, 0x19, 0xee,
0xb1, 0x46, 0x7e, 0x92, 0xf2, 0x56, 0x47, 0x6f, 0x4d, 0xe5, 0x6d, 0xde, 0xaf, 0x94, 0xdf, 0x17, 0x8c, 0x35, 0xf2, 0xb3, 0x94, 0xb7, 0x3a, 0x7a, 0x6b, 0x2a, 0x6f, 0xf3, 0x7e, 0xa5, 0xfc, 0xbe,
0x6b, 0x49, 0x90, 0x1c, 0x65, 0x49, 0xea, 0xf1, 0x30, 0xc5, 0x63, 0xa9, 0xa0, 0x53, 0xf8, 0x6d, 0x58, 0x4b, 0x82, 0xe4, 0x28, 0x4b, 0x52, 0x8f, 0x87, 0x29, 0x1e, 0x4b, 0x05, 0x9d, 0xc2, 0x6f,
0x9d, 0x83, 0x99, 0x3e, 0x93, 0x9f, 0x05, 0xd1, 0xcf, 0x83, 0x29, 0x55, 0x08, 0x49, 0x4c, 0x68, 0xeb, 0x33, 0x30, 0xd3, 0x67, 0xf2, 0x8b, 0x20, 0xfa, 0x2c, 0x98, 0x52, 0x85, 0x90, 0xc4, 0x84,
0xa9, 0x98, 0xb0, 0xfe, 0xa2, 0xc1, 0x5e, 0xc1, 0x24, 0xdc, 0xf4, 0x8c, 0xaf, 0x62, 0x5e, 0xda, 0x96, 0x8e, 0x89, 0x24, 0x94, 0x2b, 0xa9, 0x50, 0xb6, 0xfe, 0xaa, 0xc1, 0x5e, 0x01, 0x14, 0x1e,
0xd7, 0x63, 0x68, 0x25, 0x03, 0x44, 0xed, 0x20, 0x0a, 0x95, 0x6d, 0x65, 0xbd, 0xc4, 0x1a, 0x82, 0x45, 0x66, 0x07, 0x04, 0x5a, 0x7a, 0x07, 0x8e, 0xa1, 0x95, 0x0c, 0x10, 0x15, 0x85, 0x28, 0x5f,
0xab, 0x94, 0x1a, 0x86, 0xb2, 0xaa, 0x4b, 0x95, 0x92, 0xc6, 0x5f, 0x72, 0x4d, 0x4d, 0x47, 0x49, 0xb6, 0x95, 0xf5, 0x12, 0x2b, 0x0b, 0xae, 0x5d, 0x6a, 0x18, 0x8a, 0xad, 0x2e, 0xb5, 0x4b, 0x1a,
0xf5, 0xce, 0x28, 0xf9, 0x1a, 0x0e, 0x0a, 0x5d, 0x8d, 0xc3, 0x60, 0x16, 0x53, 0xf2, 0x59, 0x0a, 0x7f, 0xc5, 0x95, 0x36, 0x1d, 0x3b, 0xd5, 0x3b, 0x63, 0xe7, 0x2b, 0x38, 0x28, 0xdc, 0x80, 0x38,
0x4c, 0x43, 0xb0, 0x9e, 0x02, 0x2b, 0x71, 0x36, 0x85, 0xfd, 0x37, 0x0d, 0x3a, 0xaf, 0xa8, 0x13, 0x0c, 0x66, 0x31, 0x25, 0x9f, 0xa4, 0xc0, 0x34, 0x04, 0xeb, 0x29, 0xb0, 0x12, 0x67, 0x53, 0xd8,
0x8d, 0x26, 0xb7, 0xe9, 0xc5, 0x46, 0x81, 0x5e, 0x6c, 0x94, 0xe8, 0x45, 0x66, 0x23, 0xab, 0xb9, 0x7f, 0xd7, 0xa0, 0xf3, 0x8a, 0x3a, 0xd1, 0x68, 0x72, 0x9b, 0x8a, 0x6c, 0x14, 0xa8, 0xc8, 0x46,
0xa0, 0xe1, 0x20, 0x41, 0xc4, 0xa4, 0x72, 0xe0, 0xb7, 0xca, 0xd6, 0xad, 0x55, 0xb6, 0xa6, 0x94, 0x89, 0x8a, 0x64, 0x36, 0xb2, 0x9a, 0x0b, 0x25, 0x0e, 0x12, 0x44, 0x4c, 0xea, 0x09, 0x7e, 0xab,
0xa2, 0xb6, 0x56, 0xba, 0xad, 0xa7, 0x71, 0x3d, 0x93, 0xc6, 0xd6, 0x7f, 0x35, 0xd8, 0x56, 0xae, 0x1c, 0xde, 0x5a, 0xe5, 0x70, 0x4a, 0x3f, 0x6a, 0x6b, 0x05, 0xdd, 0x7a, 0x72, 0xd7, 0x33, 0xc9,
0xbc, 0xc2, 0xda, 0xa5, 0x40, 0xa2, 0xd3, 0x12, 0x2b, 0xd2, 0x28, 0x2d, 0xb1, 0x29, 0x6a, 0x3d, 0x6d, 0xfd, 0x4f, 0x83, 0x6d, 0xe5, 0xca, 0x2b, 0xac, 0x68, 0x0a, 0x84, 0x3b, 0x2d, 0xbc, 0x22,
0x5b, 0x35, 0x8a, 0xda, 0xa8, 0x9a, 0xae, 0x8d, 0xd6, 0x0b, 0x97, 0x8d, 0xff, 0xb7, 0x70, 0xd9, 0xb9, 0xd2, 0xc2, 0x9b, 0xa2, 0xd6, 0xb3, 0xb5, 0xa4, 0xa8, 0x98, 0xaa, 0xe9, 0x8a, 0x69, 0xbd,
0xfc, 0xce, 0x85, 0x8b, 0x15, 0xc0, 0xe3, 0xec, 0x19, 0x96, 0x2b, 0x14, 0x77, 0x22, 0xe4, 0x52, 0x9c, 0xd9, 0xf8, 0xbe, 0xe5, 0xcc, 0xe6, 0xb7, 0x2e, 0x67, 0xac, 0x00, 0x1e, 0x67, 0xcf, 0xb0,
0x2a, 0xeb, 0x6c, 0x6c, 0xac, 0x45, 0xa4, 0x7e, 0x67, 0x44, 0x7e, 0x02, 0x9d, 0xe7, 0xb2, 0x40, 0x5c, 0xb7, 0xb8, 0x13, 0x21, 0x17, 0x58, 0x59, 0x7d, 0x63, 0x63, 0x2d, 0x22, 0xf5, 0x3b, 0x23,
0x5d, 0xa7, 0x6c, 0x83, 0x3e, 0x8f, 0x7c, 0x29, 0x5c, 0xfc, 0xf3, 0xfc, 0x1f, 0x0d, 0x68, 0xa8, 0xf2, 0x23, 0xe8, 0x3c, 0x97, 0x65, 0xeb, 0x3a, 0x65, 0x1b, 0xf4, 0x79, 0xe4, 0x4b, 0x39, 0xe3,
0x31, 0x17, 0x5f, 0x5c, 0x91, 0x3f, 0xac, 0xdf, 0x4e, 0x32, 0x2a, 0x89, 0x75, 0x4b, 0xc8, 0xca, 0x9f, 0xe7, 0xff, 0x6c, 0x40, 0x43, 0x8d, 0xb9, 0xf8, 0xfc, 0x8a, 0xfc, 0x71, 0xfd, 0xce, 0x92,
0x88, 0x34, 0x9f, 0xde, 0x3a, 0x46, 0x64, 0x83, 0x75, 0xf4, 0xc7, 0xbf, 0xff, 0xe7, 0xcf, 0x95, 0x51, 0x49, 0xac, 0x5b, 0x42, 0x56, 0x46, 0xa4, 0xf9, 0xf4, 0xd6, 0x31, 0x22, 0x1b, 0xac, 0xa3,
0x3d, 0xd2, 0x19, 0x64, 0x5e, 0x4a, 0x83, 0x09, 0xe7, 0x79, 0x0b, 0x3b, 0x45, 0xca, 0x43, 0x12, 0x3f, 0xfd, 0xe3, 0xbf, 0x7f, 0xa9, 0xec, 0x91, 0xce, 0x20, 0xf3, 0x7e, 0x1a, 0x4c, 0x38, 0xcf,
0xec, 0x5b, 0x74, 0xc9, 0xdc, 0xcd, 0x1d, 0xca, 0x0b, 0xfe, 0x12, 0xb2, 0x8e, 0x91, 0xb3, 0x67, 0x5b, 0xd8, 0x29, 0xd2, 0x23, 0x92, 0x60, 0xdf, 0xa2, 0x56, 0xe6, 0x6e, 0xee, 0x50, 0x5e, 0xf0,
0x9a, 0x39, 0xce, 0xe4, 0xe2, 0xfa, 0x54, 0x3b, 0x25, 0x2e, 0xb4, 0xd6, 0x55, 0x91, 0x1c, 0x15, 0xf7, 0x91, 0x75, 0x8c, 0x9c, 0x3d, 0xd3, 0xcc, 0x71, 0x26, 0xd7, 0xd9, 0xc7, 0xda, 0x29, 0x71,
0xab, 0xe5, 0x5d, 0x7c, 0x07, 0xc8, 0xd7, 0xb1, 0xda, 0x59, 0x3e, 0xce, 0xf2, 0x15, 0xb4, 0x5e, 0xa1, 0xb5, 0xae, 0x95, 0xe4, 0xa8, 0x58, 0x43, 0xef, 0xe2, 0x3b, 0x40, 0xbe, 0x8e, 0xd5, 0xce,
0x63, 0x64, 0x24, 0x2c, 0xb9, 0x93, 0xbc, 0x0b, 0xd8, 0x2c, 0x04, 0x76, 0xa0, 0xb5, 0x5e, 0x5a, 0xf2, 0x71, 0x96, 0x2f, 0xa1, 0xf5, 0x1a, 0x23, 0x23, 0x61, 0xc9, 0x9d, 0xe4, 0x5d, 0xc0, 0x66,
0xad, 0x96, 0x5f, 0x58, 0x72, 0x95, 0xb2, 0x18, 0xc8, 0x42, 0x4e, 0x73, 0x2c, 0xe4, 0x35, 0x34, 0x21, 0xb0, 0x03, 0xad, 0xf5, 0x82, 0x6b, 0xb5, 0xfc, 0xc2, 0x42, 0xac, 0x94, 0xc5, 0x40, 0x16,
0x52, 0x35, 0x16, 0x49, 0x2e, 0x93, 0x7c, 0xe1, 0x65, 0xe6, 0x9c, 0x52, 0xb0, 0x24, 0x0f, 0xeb, 0x72, 0x9a, 0x63, 0x21, 0xaf, 0xa1, 0x91, 0xaa, 0xbc, 0x48, 0x72, 0xc5, 0xe4, 0xcb, 0x31, 0x33,
0xc2, 0xe3, 0x97, 0x94, 0xd9, 0xd4, 0xe7, 0xf9, 0x92, 0x94, 0x5e, 0x05, 0xfb, 0xb2, 0x5f, 0x14, 0xe7, 0x94, 0x82, 0x25, 0x79, 0x58, 0x17, 0x1e, 0xbf, 0xa4, 0xcc, 0xa6, 0x3e, 0xcf, 0x97, 0xa4,
0x61, 0x18, 0xd9, 0x56, 0x1f, 0xd1, 0x4d, 0x62, 0x14, 0x9c, 0x31, 0xe2, 0x92, 0x6b, 0x68, 0x67, 0x20, 0x2b, 0xd8, 0x97, 0xfd, 0xa2, 0x08, 0xc3, 0xc8, 0xb6, 0xfa, 0x88, 0x6e, 0x12, 0xa3, 0xe0,
0x93, 0xa2, 0x80, 0x62, 0xb5, 0x67, 0x45, 0x09, 0x64, 0x3d, 0x41, 0x9a, 0x03, 0xb2, 0x9f, 0xa3, 0x8c, 0x11, 0x97, 0x5c, 0x43, 0x3b, 0x9b, 0x14, 0x05, 0x14, 0xab, 0x3d, 0x2b, 0x4a, 0x20, 0xeb,
0x51, 0x2f, 0x42, 0x42, 0xa1, 0x99, 0x5e, 0x1e, 0x39, 0x28, 0x5e, 0xb4, 0xd8, 0xa6, 0x5b, 0x3c, 0x09, 0xd2, 0x1c, 0x90, 0xfd, 0x1c, 0x8d, 0x7a, 0x27, 0x12, 0x0a, 0xcd, 0xf4, 0xf2, 0xc8, 0x41,
0x2a, 0xcf, 0x14, 0xdf, 0x8b, 0x19, 0x99, 0x42, 0x6b, 0x5d, 0x54, 0x56, 0xc7, 0x5d, 0x78, 0x61, 0xf1, 0xa2, 0xc5, 0x36, 0xdd, 0xe2, 0x51, 0x79, 0xa6, 0xf8, 0x5e, 0xcc, 0xc8, 0x14, 0x5a, 0xeb,
0x98, 0x07, 0x65, 0xdd, 0x9c, 0xac, 0x87, 0x64, 0xfb, 0x64, 0x2f, 0x47, 0x16, 0xe3, 0x68, 0xe2, 0xa2, 0xb2, 0x3a, 0xee, 0xc2, 0x0b, 0xc3, 0x3c, 0x28, 0xeb, 0xe6, 0x64, 0x3d, 0x24, 0xdb, 0x27,
0x42, 0x3b, 0x95, 0x7a, 0x42, 0xb9, 0x3b, 0xd9, 0xdd, 0x43, 0x73, 0x69, 0x5c, 0xc9, 0xbd, 0xb3, 0x7b, 0x39, 0xb2, 0x18, 0x47, 0x13, 0x17, 0xda, 0xa9, 0xd4, 0x13, 0xca, 0xdd, 0xc9, 0xee, 0x1e,
0x76, 0xf3, 0x1c, 0x7c, 0x1e, 0x8f, 0xe1, 0x5f, 0x41, 0xfb, 0xe5, 0x3d, 0x59, 0x8a, 0xcd, 0x56, 0x9a, 0x4b, 0xe3, 0x4a, 0xee, 0x9d, 0xb5, 0x9b, 0xe7, 0xe0, 0xf3, 0x78, 0x0c, 0xff, 0x1a, 0xda,
0x17, 0x49, 0x0c, 0x52, 0x42, 0x42, 0x7e, 0x9d, 0x13, 0x18, 0x7c, 0x9d, 0x90, 0x92, 0x45, 0x97, 0x2f, 0xef, 0xc9, 0x52, 0x6c, 0xb6, 0xba, 0x48, 0x62, 0x90, 0x12, 0x12, 0xf2, 0x9b, 0x9c, 0xc0,
0x3a, 0x63, 0x21, 0xcf, 0x61, 0x89, 0xa6, 0x08, 0xcc, 0xe5, 0x1a, 0x57, 0xf2, 0x96, 0x28, 0x14, 0xe0, 0x9b, 0x85, 0x94, 0x2c, 0xba, 0xd4, 0x19, 0x0b, 0x79, 0x0e, 0x4b, 0x34, 0x45, 0x60, 0x2e,
0xb3, 0xec, 0x4b, 0xa3, 0x94, 0xf8, 0x7b, 0x48, 0xdc, 0x35, 0xf3, 0x11, 0xa8, 0xee, 0xf0, 0x4f, 0xd7, 0xb8, 0x92, 0x17, 0x46, 0xa1, 0x98, 0x65, 0xdf, 0x1f, 0xa5, 0xc4, 0x3f, 0x40, 0xe2, 0xae,
0xb5, 0xd3, 0xf3, 0x7f, 0xe9, 0x00, 0xf2, 0xe1, 0xc4, 0x55, 0x3d, 0x10, 0xaa, 0x9e, 0x79, 0x4a, 0x99, 0x8f, 0x40, 0x75, 0x87, 0x7f, 0xac, 0x9d, 0x9e, 0xff, 0x5b, 0x07, 0x90, 0xcf, 0x29, 0xae,
0x7d, 0x74, 0x68, 0xde, 0x96, 0x6c, 0xc8, 0x40, 0x7e, 0x0f, 0xbb, 0xc5, 0xcf, 0x37, 0x72, 0xac, 0xea, 0x81, 0x50, 0xf5, 0xcc, 0x03, 0xeb, 0x3b, 0x87, 0xe6, 0x6d, 0xc9, 0x86, 0x0c, 0xe4, 0x0f,
0x60, 0x6f, 0x7d, 0xde, 0x95, 0xba, 0xff, 0x14, 0xa9, 0x8f, 0xcc, 0x52, 0x6a, 0x1e, 0x46, 0xa1, 0xb0, 0x5b, 0xfc, 0xa8, 0x23, 0xc7, 0x0a, 0xf6, 0xd6, 0x47, 0x5f, 0xa9, 0xfb, 0x4f, 0x91, 0xfa,
0x7a, 0x65, 0x66, 0xc9, 0x3f, 0x52, 0x11, 0xa5, 0xbf, 0xa7, 0xe5, 0xfe, 0xfa, 0xb0, 0x73, 0xe9, 0xc8, 0x2c, 0xa5, 0xe6, 0x61, 0x14, 0xaa, 0xb7, 0x67, 0x96, 0xfc, 0x3b, 0x2a, 0xa2, 0xf4, 0xf7,
0x53, 0x27, 0xe7, 0xed, 0x77, 0x0d, 0x2b, 0x79, 0xba, 0xa7, 0x87, 0x65, 0x4c, 0x03, 0xc7, 0xf7, 0xb4, 0xdc, 0x5f, 0x1f, 0x76, 0x2e, 0x7d, 0xea, 0xe4, 0xbc, 0xfd, 0xb6, 0x61, 0x25, 0x4f, 0xf7,
0x3f, 0xff, 0xf1, 0x5f, 0xdf, 0x77, 0xb5, 0x77, 0xef, 0xbb, 0xda, 0xb7, 0xef, 0xbb, 0xda, 0x37, 0xf4, 0xb0, 0x8c, 0x69, 0xe0, 0xf8, 0xfe, 0xa7, 0x3f, 0xfd, 0xdb, 0xfb, 0xae, 0xf6, 0xee, 0x7d,
0x1f, 0xba, 0x0f, 0xde, 0x7d, 0xe8, 0x3e, 0xf8, 0xe7, 0x87, 0xee, 0x03, 0x90, 0x3f, 0x1a, 0xbf, 0x57, 0xfb, 0xe6, 0x7d, 0x57, 0xfb, 0xfa, 0x43, 0xf7, 0xc1, 0xbb, 0x0f, 0xdd, 0x07, 0xff, 0xfa,
0xd0, 0xbe, 0x7e, 0x34, 0x0d, 0x22, 0xea, 0x06, 0x23, 0x09, 0xf4, 0xd9, 0xcd, 0xb3, 0x37, 0x9b, 0xd0, 0x7d, 0x00, 0xf2, 0xf7, 0xe3, 0xe7, 0xda, 0x57, 0x8f, 0xa6, 0x41, 0x44, 0xdd, 0x60, 0x24,
0x48, 0xf6, 0xa3, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0x12, 0x32, 0x62, 0xac, 0xa5, 0x14, 0x00, 0x81, 0x3e, 0xb9, 0x79, 0xf6, 0x66, 0x13, 0xc9, 0x7e, 0xf2, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff,
0x00, 0xb8, 0xd7, 0x8d, 0xf1, 0xbb, 0x14, 0x00, 0x00,
} }
// Reference imports to suppress errors if they are not otherwise used. // Reference imports to suppress errors if they are not otherwise used.
@ -3096,6 +3104,15 @@ func (m *ListDocumentForHomeRequest) MarshalToSizedBuffer(dAtA []byte) (int, err
_ = i _ = i
var l int var l int
_ = l _ = l
if len(m.Field) > 0 {
for iNdEx := len(m.Field) - 1; iNdEx >= 0; iNdEx-- {
i -= len(m.Field[iNdEx])
copy(dAtA[i:], m.Field[iNdEx])
i = encodeVarintDocument(dAtA, i, uint64(len(m.Field[iNdEx])))
i--
dAtA[i] = 0x12
}
}
if m.Limit != 0 { if m.Limit != 0 {
i = encodeVarintDocument(dAtA, i, uint64(m.Limit)) i = encodeVarintDocument(dAtA, i, uint64(m.Limit))
i-- i--
@ -3794,6 +3811,12 @@ func (m *ListDocumentForHomeRequest) Size() (n int) {
if m.Limit != 0 { if m.Limit != 0 {
n += 1 + sovDocument(uint64(m.Limit)) n += 1 + sovDocument(uint64(m.Limit))
} }
if len(m.Field) > 0 {
for _, s := range m.Field {
l = len(s)
n += 1 + l + sovDocument(uint64(l))
}
}
return n return n
} }
@ -6641,6 +6664,38 @@ func (m *ListDocumentForHomeRequest) Unmarshal(dAtA []byte) error {
break break
} }
} }
case 2:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Field", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowDocument
}
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 ErrInvalidLengthDocument
}
postIndex := iNdEx + intStringLen
if postIndex < 0 {
return ErrInvalidLengthDocument
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.Field = append(m.Field, string(dAtA[iNdEx:postIndex]))
iNdEx = postIndex
default: default:
iNdEx = preIndex iNdEx = preIndex
skippy, err := skipDocument(dAtA[iNdEx:]) skippy, err := skipDocument(dAtA[iNdEx:])

@ -116,7 +116,10 @@ message SetDocumentRecommendRequest {
} }
// //
message ListDocumentForHomeRequest { int64 limit = 1; } message ListDocumentForHomeRequest {
int64 limit = 1;
repeated string field = 2;
}
// //
message ListDocumentForHomeItem { message ListDocumentForHomeItem {

@ -267,6 +267,7 @@ func (s *ConfigAPIService) GetEnvs(ctx context.Context, req *emptypb.Empty) (res
err := util.CheckCommandExists(envs[i].Cmd) err := util.CheckCommandExists(envs[i].Cmd)
envs[i].IsInstalled = err == nil envs[i].IsInstalled = err == nil
envs[i].CheckedAt = &now envs[i].CheckedAt = &now
envs[i].Version = util.GetCommandVersion(envs[i].Cmd)
if err != nil { if err != nil {
envs[i].Error = err.Error() envs[i].Error = err.Error()
} }

@ -555,6 +555,11 @@ func (s *DocumentAPIService) ListDocumentForHome(ctx context.Context, req *pb.Li
limit = int(req.Limit) limit = int(req.Limit)
} }
defaultFields := []string{"id", "title", "ext"}
if len(req.Field) > 0 {
defaultFields = append(defaultFields, req.Field...)
}
resp := &pb.ListDocumentForHomeResponse{} resp := &pb.ListDocumentForHomeResponse{}
for _, category := range categories { for _, category := range categories {
docs, _, _ := s.dbModel.GetDocumentList(&model.OptionGetDocumentList{ docs, _, _ := s.dbModel.GetDocumentList(&model.OptionGetDocumentList{
@ -565,7 +570,7 @@ func (s *DocumentAPIService) ListDocumentForHome(ctx context.Context, req *pb.Li
Page: 1, Page: 1,
Size: limit, Size: limit,
Sort: []string{"id desc"}, Sort: []string{"id desc"},
SelectFields: []string{"id", "title", "ext"}, SelectFields: defaultFields,
}) })
var pbDocs []*pb.Document var pbDocs []*pb.Document

@ -528,6 +528,10 @@ func (m *DBModel) GetConfigOfSecurity(name ...string) (config ConfigSecurity) {
bytes, _ := json.Marshal(data) bytes, _ := json.Marshal(data)
json.Unmarshal(bytes, &config) json.Unmarshal(bytes, &config)
if config.MaxDocumentSize <= 0 {
config.MaxDocumentSize = 50 // 默认50M
}
return return
} }

@ -145,10 +145,6 @@ func NewDBModel(cfg *conf.Database, lg *zap.Logger) (m *DBModel, err error) {
} }
m.tableFieldsMap[table] = filedsMap m.tableFieldsMap[table] = filedsMap
} }
go m.loopCovertDocument()
go m.cronUpdateSitemap()
go m.cronMarkAttachmentDeleted()
go m.cronCleanInvalidAttachment()
return return
} }
@ -194,6 +190,13 @@ func (m *DBModel) SyncDB() (err error) {
return return
} }
func (m *DBModel) RunTasks() {
go m.loopCovertDocument()
go m.cronUpdateSitemap()
go m.cronMarkAttachmentDeleted()
go m.cronCleanInvalidAttachment()
}
func (m *DBModel) GetDB() *gorm.DB { func (m *DBModel) GetDB() *gorm.DB {
return m.db return m.db
} }

@ -54,7 +54,7 @@ func (m *DBModel) UpdateSitemap() (err error) {
for _, doc := range documents { for _, doc := range documents {
su = append(su, sitemap.SitemapUrl{ su = append(su, sitemap.SitemapUrl{
Loc: fmt.Sprintf("%s/document/%d", domain, doc.Id), Loc: fmt.Sprintf("%s/document/%d", domain, doc.Id),
Lastmod: doc.UpdatedAt.Format("2006-01-02 15:04:05"), Lastmod: doc.UpdatedAt.Format(time.RFC3339),
ChangeFreq: sitemap.DAILY, ChangeFreq: sitemap.DAILY,
Priority: 1.0, Priority: 1.0,
}) })
@ -65,7 +65,7 @@ func (m *DBModel) UpdateSitemap() (err error) {
} }
sitemapIndexes = append(sitemapIndexes, sitemap.SitemapIndex{ sitemapIndexes = append(sitemapIndexes, sitemap.SitemapIndex{
Loc: domain + "/" + file, Loc: domain + "/" + file,
Lastmod: time.Now().Format("2006-01-02 15:04:05"), Lastmod: time.Now().Format(time.RFC3339),
}) })
page++ page++
} }
@ -84,7 +84,7 @@ func (m *DBModel) UpdateSitemap() (err error) {
for _, article := range articles { for _, article := range articles {
su = append(su, sitemap.SitemapUrl{ su = append(su, sitemap.SitemapUrl{
Loc: fmt.Sprintf("%s/article/%s", domain, article.Identifier), Loc: fmt.Sprintf("%s/article/%s", domain, article.Identifier),
Lastmod: article.UpdatedAt.Format("2006-01-02 15:04:05"), Lastmod: article.UpdatedAt.Format(time.RFC3339),
ChangeFreq: sitemap.DAILY, ChangeFreq: sitemap.DAILY,
Priority: 1.0, Priority: 1.0,
}) })
@ -95,7 +95,7 @@ func (m *DBModel) UpdateSitemap() (err error) {
} }
sitemapIndexes = append(sitemapIndexes, sitemap.SitemapIndex{ sitemapIndexes = append(sitemapIndexes, sitemap.SitemapIndex{
Loc: domain + "/" + file, Loc: domain + "/" + file,
Lastmod: time.Now().Format("2006-01-02 15:04:05"), Lastmod: time.Now().Format(time.RFC3339),
}) })
page++ page++
} }
@ -141,11 +141,11 @@ func (m *DBModel) InitSEO() {
defaultTitle = "管理后台 - " defaultTitle = "管理后台 - "
} }
m.logger.Debug("initSEO", zap.String("file", path), zap.String("title", defaultTitle))
bs, _ := os.ReadFile(path) bs, _ := os.ReadFile(path)
if doc, errDoc := goquery.NewDocumentFromReader(bytes.NewReader(bs)); errDoc != nil { if doc, errDoc := goquery.NewDocumentFromReader(bytes.NewReader(bs)); errDoc != nil {
m.logger.Error("initSEO", zap.Error(errDoc), zap.String("file", path)) m.logger.Error("initSEO", zap.Error(errDoc), zap.String("file", path))
} else { } else {
m.logger.Debug("initSEO", zap.String("file", path), zap.String("title", defaultTitle+cfg.Sitename))
doc.Find("title").SetText(defaultTitle + cfg.Sitename) doc.Find("title").SetText(defaultTitle + cfg.Sitename)
doc.Find("meta[name='keywords']").SetAttr("content", cfg.Keywords) doc.Find("meta[name='keywords']").SetAttr("content", cfg.Keywords)
doc.Find("meta[name='description']").SetAttr("content", cfg.Description) doc.Find("meta[name='description']").SetAttr("content", cfg.Description)
@ -166,15 +166,15 @@ func (m *DBModel) cronUpdateSitemap() {
for { for {
hour, _ := strconv.Atoi(os.Getenv("MOREDOC_UPDATE_SITEMAP_HOUR")) // 默认为每天凌晨0点更新站点地图 hour, _ := strconv.Atoi(os.Getenv("MOREDOC_UPDATE_SITEMAP_HOUR")) // 默认为每天凌晨0点更新站点地图
hour = hour % 24 hour = hour % 24
m.logger.Info("cronUpdateSitemap", zap.Int("hour", hour), zap.String("lastUpdated", lastUpdated)) m.logger.Debug("cronUpdateSitemap", zap.Int("hour", hour), zap.String("lastUpdated", lastUpdated))
now := time.Now() now := time.Now()
if now.Hour() == hour && now.Format(layout) != lastUpdated { if now.Hour() == hour && now.Format(layout) != lastUpdated {
m.logger.Info("cronUpdateSitemapstart...") m.logger.Debug("cronUpdateSitemapstart...")
err := m.UpdateSitemap() err := m.UpdateSitemap()
if err != nil { if err != nil {
m.logger.Info("cronUpdateSitemapend...", zap.Error(err)) m.logger.Debug("cronUpdateSitemapend...", zap.Error(err))
} }
m.logger.Info("cronUpdateSitemapend...") m.logger.Debug("cronUpdateSitemapend...")
lastUpdated = now.Format(layout) lastUpdated = now.Format(layout)
} }
time.Sleep(1 * time.Minute) time.Sleep(1 * time.Minute)
@ -190,7 +190,7 @@ func (m *DBModel) cronCleanInvalidAttachment() {
sleepDuration := 1 * time.Minute sleepDuration := 1 * time.Minute
for { for {
time.Sleep(1 * time.Second) time.Sleep(1 * time.Second)
m.logger.Info("cronCleanInvalidAttachmentstart...") m.logger.Debug("cronCleanInvalidAttachmentstart...")
var ( var (
deletedAttachemnts, attachemnts []Attachment deletedAttachemnts, attachemnts []Attachment
hashes []string hashes []string
@ -206,7 +206,7 @@ func (m *DBModel) cronCleanInvalidAttachment() {
// 1. 找出已被标记删除的附件 // 1. 找出已被标记删除的附件
m.db.Unscoped().Where("deleted_at IS NOT NULL").Where("deleted_at < ?", time.Now().Add(-time.Duration(retentionMinute)*time.Minute)).Limit(100).Find(&deletedAttachemnts) m.db.Unscoped().Where("deleted_at IS NOT NULL").Where("deleted_at < ?", time.Now().Add(-time.Duration(retentionMinute)*time.Minute)).Limit(100).Find(&deletedAttachemnts)
if len(deletedAttachemnts) == 0 { if len(deletedAttachemnts) == 0 {
m.logger.Info("cronCleanInvalidAttachmentend...") m.logger.Debug("cronCleanInvalidAttachmentend...")
time.Sleep(sleepDuration) time.Sleep(sleepDuration)
continue continue
} }
@ -226,10 +226,10 @@ func (m *DBModel) cronCleanInvalidAttachment() {
err := m.db.Unscoped().Where("id IN (?)", ids).Delete(&Attachment{}).Error err := m.db.Unscoped().Where("id IN (?)", ids).Delete(&Attachment{}).Error
if err != nil { if err != nil {
m.logger.Error("cronCleanInvalidAttachment", zap.Error(err)) m.logger.Error("cronCleanInvalidAttachment", zap.Error(err))
m.logger.Info("cronCleanInvalidAttachmentend...") m.logger.Debug("cronCleanInvalidAttachmentend...")
continue continue
} }
m.logger.Info("cronCleanInvalidAttachment", zap.Any("ids", ids), zap.Any("Attachemnts", deletedAttachemnts)) m.logger.Debug("cronCleanInvalidAttachment", zap.Any("ids", ids), zap.Any("Attachemnts", deletedAttachemnts))
for _, attachemnt := range deletedAttachemnts { for _, attachemnt := range deletedAttachemnts {
if _, ok := hashMap[attachemnt.Hash]; !ok { // 删除附件文件 if _, ok := hashMap[attachemnt.Hash]; !ok { // 删除附件文件
m.logger.Debug("cronCleanInvalidAttachment", zap.String("path", attachemnt.Path), zap.Any("attachemnt", attachemnt)) m.logger.Debug("cronCleanInvalidAttachment", zap.String("path", attachemnt.Path), zap.Any("attachemnt", attachemnt))
@ -247,7 +247,7 @@ func (m *DBModel) cronCleanInvalidAttachment() {
} }
} }
} }
m.logger.Info("cronCleanInvalidAttachmentend...") m.logger.Debug("cronCleanInvalidAttachmentend...")
} }
} }
@ -294,12 +294,12 @@ func (m *DBModel) cronMarkAttachmentDeleted() {
} }
// 非配置类和横幅类附件如果type_id为0则表示未被使用超过24小时则标记删除 // 非配置类和横幅类附件如果type_id为0则表示未被使用超过24小时则标记删除
m.logger.Info("cronMarkAttachmentDeleted start...") m.logger.Debug("cronMarkAttachmentDeleted start...")
err := m.db.Where("`type` not in (?) and type_id = ?", []int{AttachmentTypeConfig, AttachmentTypeBanner}, 0).Where("created_at < ?", time.Now().Add(-time.Duration(24)*time.Hour)).Delete(&Attachment{}).Error err := m.db.Where("`type` not in (?) and type_id = ?", []int{AttachmentTypeConfig, AttachmentTypeBanner}, 0).Where("created_at < ?", time.Now().Add(-time.Duration(24)*time.Hour)).Delete(&Attachment{}).Error
if err != nil { if err != nil {
m.logger.Error("cronMarkAttachmentDeleted", zap.Error(err)) m.logger.Error("cronMarkAttachmentDeleted", zap.Error(err))
} }
m.logger.Info("cronMarkAttachmentDeleted end...") m.logger.Debug("cronMarkAttachmentDeleted end...")
} }
} }
@ -314,11 +314,12 @@ func (m *DBModel) loopCovertDocument() {
m.db.Model(&Document{}).Where("status = ?", DocumentStatusConverting).Update("status", DocumentStatusPending) m.db.Model(&Document{}).Where("status = ?", DocumentStatusConverting).Update("status", DocumentStatusPending)
for { for {
now := time.Now() now := time.Now()
m.logger.Info("loopCovertDocumentstart...") m.logger.Debug("loopCovertDocumentstart...")
err := m.ConvertDocument() err := m.ConvertDocument()
if err != nil && err != gorm.ErrRecordNotFound { if err != nil && err != gorm.ErrRecordNotFound {
m.logger.Info("loopCovertDocumentend...", zap.Error(err), zap.String("cost", time.Since(now).String())) m.logger.Error("loopCovertDocument", zap.Error(err))
} }
m.logger.Debug("loopCovertDocumentend...", zap.String("cost", time.Since(now).String()))
if err == gorm.ErrRecordNotFound { if err == gorm.ErrRecordNotFound {
time.Sleep(sleep) time.Sleep(sleep)
} }

@ -58,6 +58,10 @@ func Run(cfg *conf.Config, logger *zap.Logger) {
return return
} }
// 每次启动时都对dist中的title进行一次处理以替换掉关键字 moredoc
go dbModel.InitSEO()
dbModel.RunTasks()
if cfg.Level != "debug" { if cfg.Level != "debug" {
gin.SetMode(gin.ReleaseMode) gin.SetMode(gin.ReleaseMode)
} }

@ -189,6 +189,15 @@ func CheckCommandExists(command string) error {
return err return err
} }
func GetCommandVersion(command string) string {
cmd := exec.Command(command, "--version")
output, err := cmd.CombinedOutput()
if err != nil {
return ""
}
return strings.TrimSpace(string(output))
}
// 获取系统发行版本信息 // 获取系统发行版本信息
func GetOSRelease() (osVersion string, err error) { func GetOSRelease() (osVersion string, err error) {
var ( var (

@ -5,6 +5,7 @@
? `/view/cover/${document.attachment.hash}` ? `/view/cover/${document.attachment.hash}`
: '' : ''
" "
lazy
:alt="document.title" :alt="document.title"
:style="{ height: height }" :style="{ height: height }"
> >

@ -89,6 +89,7 @@ export default {
this.$message.success('') this.$message.success('')
this.disabled = true this.disabled = true
} else { } else {
this.loadCaptcha()
this.$message.error(res.data.message || '') this.$message.error(res.data.message || '')
} }
this.loading = false this.loading = false

@ -117,6 +117,7 @@ export default {
this.$router.push('/login') this.$router.push('/login')
this.disabled = true this.disabled = true
} else { } else {
this.loadCaptcha()
this.$message.error(res.data.message || '') this.$message.error(res.data.message || '')
} }
this.loading = false this.loading = false

@ -106,6 +106,7 @@ export default {
} }
this.loading = false this.loading = false
} else { } else {
this.loadCaptcha()
this.loading = false this.loading = false
} }
}, },

@ -206,6 +206,9 @@ export default {
} else { } else {
this.$router.replace({ name: 'index' }) this.$router.replace({ name: 'index' })
} }
}else{
this.loadCaptcha()
this.$message.error(res.data.message || '')
} }
this.loading = false this.loading = false
} }

@ -34,7 +34,7 @@ export default {
}, },
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss">
.com-user-avatar { .com-user-avatar {
display: inline-block; display: inline-block;
position: relative; position: relative;
@ -47,9 +47,10 @@ export default {
border: 2px solid #409eff; border: 2px solid #409eff;
} }
img { img {
height: 100%; // height: 100%;
width: 100%; // width: 100%;
border-radius: 50%; // border-radius: 50%;
margin: 0 auto;
} }
} }
} }

@ -84,6 +84,7 @@
</el-button> </el-button>
<el-dropdown-menu slot="dropdown"> <el-dropdown-menu slot="dropdown">
<el-dropdown-item command="profile"> </el-dropdown-item> <el-dropdown-item command="profile"> </el-dropdown-item>
<!-- <el-dropdown-item command="copyjwt"> JWT </el-dropdown-item> -->
<el-dropdown-item command="password"> </el-dropdown-item> <el-dropdown-item command="password"> </el-dropdown-item>
<el-dropdown-item command="logout">退</el-dropdown-item> <el-dropdown-item command="logout">退</el-dropdown-item>
</el-dropdown-menu> </el-dropdown-menu>
@ -264,6 +265,18 @@ export default {
case 'password': case 'password':
this.formPasswordVisible = true this.formPasswordVisible = true
break break
case 'copyjwt':
// 将用户的token复制到剪贴板
const input = document.createElement('input')
input.setAttribute('readonly', 'readonly')
input.setAttribute('value', this.token)
document.body.appendChild(input)
input.select()
input.setSelectionRange(0, 9999)
document.execCommand('copy')
document.body.removeChild(input)
this.$message.success(' JSON Web Token ')
break
case 'logout': case 'logout':
this.logout() this.logout()
this.$router.replace({ path: '/' }) this.$router.replace({ path: '/' })

@ -504,7 +504,7 @@ export default {
field: ['id', 'title', 'link'], field: ['id', 'title', 'link'],
}) })
if (res.status === 200) { if (res.status === 200) {
this.friendlinks = res.data.friendlink this.friendlinks = res.data.friendlink || []
} }
}, },
async signToday() { async signToday() {

@ -30,7 +30,9 @@
"vue-template-compiler": "^2.6.14", "vue-template-compiler": "^2.6.14",
"vue-upload-component": "^2.8.23", "vue-upload-component": "^2.8.23",
"vuex-persist": "^3.1.3", "vuex-persist": "^3.1.3",
"webpack": "^4.46.0" "vxe-table": "^3.6.13",
"webpack": "^4.46.0",
"xe-utils": "^3.5.12"
}, },
"devDependencies": { "devDependencies": {
"@babel/eslint-parser": "^7.16.3", "@babel/eslint-parser": "^7.16.3",
@ -20123,6 +20125,15 @@
"node": ">=0.10.0" "node": ">=0.10.0"
} }
}, },
"node_modules/vxe-table": {
"version": "3.6.13",
"resolved": "https://registry.npmjs.org/vxe-table/-/vxe-table-3.6.13.tgz",
"integrity": "sha512-Lm4J1dH4CAHnHWO/JKPo77SCaggPTdk7RFhCNvkMWRsReBvWwTR4zBUnEwmnomhNorRVdBYETjOnsbfor7us9Q==",
"peerDependencies": {
"vue": "^2.6.0",
"xe-utils": "^3.5.0"
}
},
"node_modules/watchpack": { "node_modules/watchpack": {
"version": "1.7.5", "version": "1.7.5",
"resolved": "https://registry.npmmirror.com/watchpack/-/watchpack-1.7.5.tgz", "resolved": "https://registry.npmmirror.com/watchpack/-/watchpack-1.7.5.tgz",
@ -21204,6 +21215,11 @@
} }
} }
}, },
"node_modules/xe-utils": {
"version": "3.5.12",
"resolved": "https://registry.npmjs.org/xe-utils/-/xe-utils-3.5.12.tgz",
"integrity": "sha512-g+KntGC41vYJ+GzDngy28LIGAu3kSfhQxiprYxv1P6jP3DRVLNnTruBFD4WIVmMF2AUm1o23IMyAcQ10m2XSyQ=="
},
"node_modules/xtend": { "node_modules/xtend": {
"version": "4.0.2", "version": "4.0.2",
"resolved": "https://registry.npmmirror.com/xtend/-/xtend-4.0.2.tgz", "resolved": "https://registry.npmmirror.com/xtend/-/xtend-4.0.2.tgz",
@ -36543,6 +36559,12 @@
} }
} }
}, },
"vxe-table": {
"version": "3.6.13",
"resolved": "https://registry.npmjs.org/vxe-table/-/vxe-table-3.6.13.tgz",
"integrity": "sha512-Lm4J1dH4CAHnHWO/JKPo77SCaggPTdk7RFhCNvkMWRsReBvWwTR4zBUnEwmnomhNorRVdBYETjOnsbfor7us9Q==",
"requires": {}
},
"watchpack": { "watchpack": {
"version": "1.7.5", "version": "1.7.5",
"resolved": "https://registry.npmmirror.com/watchpack/-/watchpack-1.7.5.tgz", "resolved": "https://registry.npmmirror.com/watchpack/-/watchpack-1.7.5.tgz",
@ -37391,6 +37413,11 @@
"integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==",
"requires": {} "requires": {}
}, },
"xe-utils": {
"version": "3.5.12",
"resolved": "https://registry.npmjs.org/xe-utils/-/xe-utils-3.5.12.tgz",
"integrity": "sha512-g+KntGC41vYJ+GzDngy28LIGAu3kSfhQxiprYxv1P6jP3DRVLNnTruBFD4WIVmMF2AUm1o23IMyAcQ10m2XSyQ=="
},
"xtend": { "xtend": {
"version": "4.0.2", "version": "4.0.2",
"resolved": "https://registry.npmmirror.com/xtend/-/xtend-4.0.2.tgz", "resolved": "https://registry.npmmirror.com/xtend/-/xtend-4.0.2.tgz",

@ -35,7 +35,9 @@
"vue-template-compiler": "^2.6.14", "vue-template-compiler": "^2.6.14",
"vue-upload-component": "^2.8.23", "vue-upload-component": "^2.8.23",
"vuex-persist": "^3.1.3", "vuex-persist": "^3.1.3",
"webpack": "^4.46.0" "vxe-table": "^3.6.13",
"webpack": "^4.46.0",
"xe-utils": "^3.5.12"
}, },
"devDependencies": { "devDependencies": {
"@babel/eslint-parser": "^7.16.3", "@babel/eslint-parser": "^7.16.3",
@ -55,4 +57,4 @@
"stylelint-config-prettier": "^8.0.2", "stylelint-config-prettier": "^8.0.2",
"stylelint-config-standard": "^21.0.0" "stylelint-config-standard": "^21.0.0"
} }
} }

@ -149,8 +149,8 @@
style="width: 100%" style="width: 100%"
empty-text="您暂无权限查看环境依赖情况" empty-text="您暂无权限查看环境依赖情况"
> >
<el-table-column prop="name" label="名称" width="100"> </el-table-column <el-table-column prop="name" label="名称" width="100"> </el-table-column>
><el-table-column prop="is_required" label="是否必须" width="100"> <el-table-column prop="is_required" label="是否必须" width="100">
<template slot-scope="scope"> <template slot-scope="scope">
<el-tag <el-tag
v-if="scope.row.is_required" v-if="scope.row.is_required"
@ -178,6 +178,11 @@
> >
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="version" label="版本" min-width="100">
<template slot-scope="scope">
{{ scope.row.version || '-' }}
</template>
</el-table-column>
<el-table-column prop="description" min-width="200" label="用途"> <el-table-column prop="description" min-width="200" label="用途">
</el-table-column> </el-table-column>
<el-table-column prop="error" label="错误" min-width="100"> <el-table-column prop="error" label="错误" min-width="100">

@ -1,9 +1,9 @@
<template> <template>
<div class="page page-index"> <div class="page page-index">
<div class="searchbox"> <div class="searchbox">
<el-carousel :interval="3000" arrow="always" :height="carouselHeight"> <el-carousel :interval="3000" arrow="always" :height="isMobile ? '250px' : '360px'" @change="changeCarousel">
<a <a
v-for="banner in banners" v-for="(banner, index) in banners"
:key="'banner-' + banner.id" :key="'banner-' + banner.id"
:href="banner.url ? banner.url : 'javascript:;'" :href="banner.url ? banner.url : 'javascript:;'"
:target="banner.url ? '_blank' : ''" :target="banner.url ? '_blank' : ''"
@ -11,7 +11,7 @@
> >
<el-carousel-item <el-carousel-item
:style=" :style="
'background: url(' + banner.path + ') center center no-repeat;' 'background: url(' + (carouselIndexes.indexOf(index)>-1 ? banner.path: '') + ') center center no-repeat;'
" "
> >
</el-carousel-item> </el-carousel-item>
@ -208,6 +208,7 @@
? `/view/cover/${item.attachment.hash}` ? `/view/cover/${item.attachment.hash}`
: '' : ''
" "
lazy
:alt="item.title" :alt="item.title"
> >
<div slot="error" class="image-slot"> <div slot="error" class="image-slot">
@ -270,7 +271,7 @@
<div> <div>
<div class="card-body-left hidden-xs-only"> <div class="card-body-left hidden-xs-only">
<nuxt-link :to="`/category/${item.category_id}`"> <nuxt-link :to="`/category/${item.category_id}`">
<el-image class="category-cover" :src="item.category_cover"> <el-image lazy class="category-cover" :src="item.category_cover">
<div slot="error" class="image-slot"> <div slot="error" class="image-slot">
<img <img
src="/static/images/default-category-cover.png" src="/static/images/default-category-cover.png"
@ -326,7 +327,7 @@ export default {
document_count: '-', document_count: '-',
user_count: '-', user_count: '-',
}, },
carouselHeight: '360px', carouselIndexes: [0], // 跑马灯index用于跑马灯图片的懒加载
} }
}, },
head() { head() {
@ -352,7 +353,6 @@ export default {
...mapGetters('setting', ['settings']), ...mapGetters('setting', ['settings']),
}, },
async created() { async created() {
this.carouselHeight = this.isMobile ? '250px' : '360px'
await Promise.all([ await Promise.all([
this.getRecommendDocuments(), this.getRecommendDocuments(),
this.listBanner(), this.listBanner(),
@ -431,6 +431,13 @@ export default {
// 跳转到登录页面,先串通页面 // 跳转到登录页面,先串通页面
this.$router.push('/login') this.$router.push('/login')
}, },
changeCarousel(index){
let carouselIndexes = this.carouselIndexes
if (carouselIndexes.indexOf(index) === -1) {
carouselIndexes.push(index)
}
this.carouselIndexes = carouselIndexes
}
}, },
} }
</script> </script>
@ -649,6 +656,11 @@ export default {
.card-body-left { .card-body-left {
width: 180px; width: 180px;
padding-right: 20px; padding-right: 20px;
.category-cover{
height: 145px;
width: 180px;
overflow: hidden;
}
.image-slot { .image-slot {
height: 145px; height: 145px;
overflow: hidden; overflow: hidden;

@ -80,7 +80,7 @@ export default {
icon: 'el-icon-magic-stick', icon: 'el-icon-magic-stick',
}, },
{ {
label: '', label: '',
value: '/me/document', value: '/me/document',
icon: 'el-icon-document', icon: 'el-icon-document',
}, },

@ -70,62 +70,57 @@
<em></em> <em></em>
</div> </div>
</el-upload> </el-upload>
<el-table <vxe-table
v-if="fileList.length > 0" v-if="fileList.length > 0"
:data="fileList" :data="fileList"
style="width: 100%" style="width: 100%"
max-height="480" max-height="480"
stripe
border="inner"
:column-config="{resizable: true}"
> >
<el-table-column prop="title" label="#" width="50"> <vxe-column type="seq" width="60"></vxe-column>
<template slot-scope="scope"> <vxe-column field="title" title="文件" min-width="180">
{{ scope.$index + 1 }} <template #default="{row}">
</template> <el-input v-model="row.title" :disabled="loading">
</el-table-column>
<el-table-column prop="title" label="文件" min-width="180">
<template slot-scope="scope">
<el-input v-model="scope.row.title" :disabled="loading">
<template slot="append">{{ <template slot="append">{{
scope.row.ext row.ext
}}</template></el-input }}</template></el-input
> >
<div v-if="scope.row.error"> <div v-if="row.error">
<el-progress <el-progress
:key="scope.row.name" :key="row.name"
:percentage="scope.row.percentage" :percentage="row.percentage"
status="exception" status="exception"
></el-progress> ></el-progress>
<small class="el-link el-link--danger error-tips">{{ <small class="el-link el-link--danger error-tips">{{
scope.row.error row.error
}}</small> }}</small>
</div> </div>
<el-progress <el-progress
v-else-if="scope.row.percentage > 0" v-else-if="row.percentage > 0"
:percentage="scope.row.percentage" :percentage="row.percentage"
></el-progress> ></el-progress>
</template> </template>
</el-table-column> </vxe-column>
<el-table-column prop="size" label="大小" width="100"> <vxe-column field="size" title="大小" width="100" sortable>
<template slot-scope="scope"> <template #default="{row}">
{{ formatBytes(scope.row.size) }} <span>{{ formatBytes(row.size) }}</span>
</template> </template>
</el-table-column> </vxe-column>
<el-table-column <vxe-column field="price" :title="`售价(${settings.system.credit_name || '魔豆'})`" :width="130" sortable>
prop="price" <template #default="{row}">
:label="`售价(${settings.system.credit_name || '魔豆'})`"
width="130"
>
<template slot-scope="scope">
<el-input-number <el-input-number
v-model="scope.row.price" v-model="row.price"
:min="0" :min="0"
:step="1" :step="1"
:disabled="loading" :disabled="loading"
controls-position="right" controls-position="right"
></el-input-number> ></el-input-number>
</template> </template>
</el-table-column> </vxe-column>
<el-table-column label="操作" width="100" fixed="right"> <vxe-column width="100" fixed="right">
<template slot="header"> <template #header>
(<el-button (<el-button
type="text" type="text"
size="mini" size="mini"
@ -134,19 +129,19 @@
></el-button ></el-button
>) >)
</template> </template>
<template slot-scope="scope"> <template #default="{rowIndex}">
<el-button <el-button
size="mini" size="mini"
type="text" type="text"
icon="el-icon-delete" icon="el-icon-delete"
:disabled="loading" :disabled="loading"
@click="handleRemove(scope.$index)" @click="handleRemove(rowIndex)"
> >
</el-button> </el-button>
</template> </template>
</el-table-column> </vxe-column>
</el-table> </vxe-table>
</el-form-item> </el-form-item>
<el-form-item style="margin-bottom: 0"> <el-form-item style="margin-bottom: 0">
<el-button <el-button
@ -538,6 +533,16 @@ export default {
</script> </script>
<style lang="scss"> <style lang="scss">
.page-upload { .page-upload {
.vxe-table{
.el-input-number{
width: 100%;
}
.vxe-header--column{
.vxe-cell{
white-space: normal;
}
}
}
.el-table { .el-table {
.el-input-number { .el-input-number {
width: 120px; width: 120px;

@ -4,6 +4,11 @@ import hotkeys from 'hotkeys-js'
import 'viewerjs/dist/viewer.css' import 'viewerjs/dist/viewer.css'
import VueViewer from 'v-viewer' import VueViewer from 'v-viewer'
import VXETable from 'vxe-table'
import 'vxe-table/lib/style.css'
Vue.use(VXETable)
// import locale from 'element-ui/lib/locale/lang/en' // import locale from 'element-ui/lib/locale/lang/en'
// Vue.use(Element, { locale }) // Vue.use(Element, { locale })
Vue.use(VueViewer, { Vue.use(VueViewer, {

Loading…
Cancel
Save