diff --git a/docs/generated/http/full.md b/docs/generated/http/full.md index 487f54a35837..653e21892677 100644 --- a/docs/generated/http/full.md +++ b/docs/generated/http/full.md @@ -1811,6 +1811,7 @@ ActiveQuery represents a query in flight on some Session. | phase | [ActiveQuery.Phase](#cockroach.server.serverpb.ListSessionsResponse-cockroach.server.serverpb.ActiveQuery.Phase) | | phase stores the current phase of execution for this query. | [reserved](#support-status) | | progress | [float](#cockroach.server.serverpb.ListSessionsResponse-float) | | progress is an estimate of the fraction of this query that has been processed. | [reserved](#support-status) | | sql_no_constants | [string](#cockroach.server.serverpb.ListSessionsResponse-string) | | The SQL statement fingerprint, compatible with StatementStatisticsKey. | [reserved](#support-status) | +| sql_summary | [string](#cockroach.server.serverpb.ListSessionsResponse-string) | | A summarized version of the sql query. | [reserved](#support-status) | @@ -1939,6 +1940,7 @@ ActiveQuery represents a query in flight on some Session. | phase | [ActiveQuery.Phase](#cockroach.server.serverpb.ListSessionsResponse-cockroach.server.serverpb.ActiveQuery.Phase) | | phase stores the current phase of execution for this query. | [reserved](#support-status) | | progress | [float](#cockroach.server.serverpb.ListSessionsResponse-float) | | progress is an estimate of the fraction of this query that has been processed. | [reserved](#support-status) | | sql_no_constants | [string](#cockroach.server.serverpb.ListSessionsResponse-string) | | The SQL statement fingerprint, compatible with StatementStatisticsKey. | [reserved](#support-status) | +| sql_summary | [string](#cockroach.server.serverpb.ListSessionsResponse-string) | | A summarized version of the sql query. | [reserved](#support-status) | diff --git a/docs/generated/swagger/spec.json b/docs/generated/swagger/spec.json index 24881f59d395..d3565b7c8179 100644 --- a/docs/generated/swagger/spec.json +++ b/docs/generated/swagger/spec.json @@ -623,6 +623,11 @@ "type": "string", "x-go-name": "SqlNoConstants" }, + "sql_summary": { + "description": "A summarized version of the sql query.", + "type": "string", + "x-go-name": "SqlSummary" + }, "start": { "description": "Start timestamp of this query.", "type": "string", diff --git a/pkg/server/serverpb/status.pb.go b/pkg/server/serverpb/status.pb.go index 2c3ee2df59cf..9e0d3f805975 100644 --- a/pkg/server/serverpb/status.pb.go +++ b/pkg/server/serverpb/status.pb.go @@ -2566,6 +2566,8 @@ type ActiveQuery struct { Progress float32 `protobuf:"fixed32,6,opt,name=progress,proto3" json:"progress,omitempty"` // The SQL statement fingerprint, compatible with StatementStatisticsKey. SqlNoConstants string `protobuf:"bytes,8,opt,name=sql_no_constants,json=sqlNoConstants,proto3" json:"sql_no_constants,omitempty"` + // A summarized version of the sql query. + SqlSummary string `protobuf:"bytes,9,opt,name=sql_summary,json=sqlSummary,proto3" json:"sql_summary,omitempty"` } func (m *ActiveQuery) Reset() { *m = ActiveQuery{} } @@ -4801,14 +4803,14 @@ func init() { func init() { proto.RegisterFile("server/serverpb/status.proto", fileDescriptor_07f09f8b91174efc) } var fileDescriptor_07f09f8b91174efc = []byte{ - // 8041 bytes of a gzipped FileDescriptorProto + // 8061 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x7d, 0x6d, 0x6c, 0x1b, 0x49, 0x96, 0x98, 0x5b, 0x24, 0x25, 0xf2, 0x51, 0x1f, 0x74, 0xe9, 0xc3, 0x34, 0xed, 0x91, 0x3c, 0x3d, 0x33, 0x1e, 0xdb, 0x33, 0x43, 0xcd, 0xd8, 0xe3, 0xf9, 0xda, 0xdd, 0xb9, 0xd5, 0xd7, 0xd8, 0xb2, 0x65, 0xd9, 0x6e, 0x49, 0x3b, 0x8b, 0xd9, 0xcb, 0x31, 0x2d, 0x76, 0x89, 0x6e, 0xab, 0xd9, 0x4d, 0x75, 0x37, 0x35, 0xe2, 0x4e, 0x66, 0x6f, 0xb3, 0xf9, 0xb8, 0xcd, 0xdd, 0x65, 0xef, 0xf6, 0x92, - 0x0d, 0x36, 0x48, 0x90, 0x5c, 0xf6, 0xc7, 0xdd, 0xe1, 0x82, 0x1c, 0xee, 0x10, 0x24, 0x48, 0x7e, - 0xe4, 0x03, 0xf9, 0x71, 0xd9, 0x20, 0x40, 0xb0, 0x40, 0xf2, 0x63, 0x91, 0x20, 0xba, 0x44, 0x1b, + 0x0d, 0x36, 0x48, 0x90, 0x5c, 0xf6, 0xc7, 0x5d, 0x70, 0x41, 0x0e, 0x77, 0x08, 0x12, 0x24, 0x3f, + 0xf2, 0x81, 0xfc, 0xb8, 0xec, 0x21, 0x40, 0xb0, 0x40, 0xf2, 0x63, 0x91, 0x20, 0xba, 0x44, 0x1b, 0x24, 0x41, 0xf2, 0x2b, 0x48, 0x7e, 0x2d, 0x70, 0x41, 0x50, 0xaf, 0xaa, 0x9a, 0xd5, 0x24, 0xd5, 0x24, 0xed, 0xf1, 0xec, 0x01, 0xf9, 0x31, 0x63, 0xf6, 0xab, 0x57, 0xaf, 0x5e, 0xbd, 0x7a, 0xf5, 0xea, 0x55, 0xbd, 0x57, 0x25, 0xb8, 0x18, 0x50, 0xff, 0x90, 0xfa, 0x8b, 0xfc, 0x9f, 0xc6, 0xee, @@ -4842,7 +4844,7 @@ var fileDescriptor_07f09f8b91174efc = []byte{ 0x20, 0x23, 0xe3, 0x08, 0xbc, 0xc7, 0x61, 0x84, 0x40, 0x9a, 0xcd, 0x91, 0x62, 0xea, 0x92, 0x76, 0x65, 0xdc, 0xc0, 0xdf, 0xc4, 0x80, 0xd1, 0x3d, 0x9b, 0x3a, 0x56, 0x50, 0x4c, 0x5f, 0x4a, 0x5d, 0xc9, 0x5f, 0x7f, 0x73, 0x38, 0x6e, 0x3e, 0xc0, 0xba, 0xcb, 0xe9, 0x1f, 0x1e, 0x2f, 0x9c, 0x31, - 0x04, 0xa5, 0xd2, 0xdf, 0x1f, 0x81, 0x51, 0x5e, 0x40, 0xe6, 0x60, 0xd4, 0x0e, 0x82, 0x26, 0xf5, + 0x04, 0xa5, 0xd2, 0x3f, 0x18, 0x81, 0x51, 0x5e, 0x40, 0xe6, 0x60, 0xd4, 0x0e, 0x82, 0x26, 0xf5, 0xa5, 0x64, 0xf8, 0x17, 0x29, 0xc2, 0x58, 0xd0, 0xdc, 0x7d, 0x4c, 0xab, 0xa1, 0xe0, 0x54, 0x7e, 0x92, 0xe7, 0x00, 0x0e, 0x4d, 0xc7, 0xb6, 0x2a, 0x7b, 0xbe, 0x57, 0x47, 0x56, 0x53, 0x46, 0x0e, 0x21, 0x1f, 0xf8, 0x5e, 0x9d, 0x2c, 0x40, 0x9e, 0x17, 0x37, 0xdd, 0xd0, 0x76, 0x8a, 0x69, 0x2c, @@ -4872,15 +4874,15 @@ var fileDescriptor_07f09f8b91174efc = []byte{ 0x5e, 0x80, 0xad, 0x87, 0x1b, 0x4b, 0xbc, 0xa6, 0x01, 0xc1, 0x81, 0x23, 0x7e, 0xeb, 0x93, 0x30, 0xce, 0x04, 0x26, 0xb5, 0x41, 0xff, 0xdb, 0x29, 0x98, 0x10, 0x00, 0x31, 0x38, 0xb7, 0x21, 0xc3, 0x44, 0x29, 0x75, 0xf0, 0xd5, 0x1e, 0xec, 0xf3, 0xa5, 0x4b, 0xae, 0xc7, 0x38, 0x02, 0x5b, 0xf8, - 0x21, 0x7a, 0xc1, 0x09, 0x90, 0x7f, 0xaa, 0xc1, 0xb4, 0x5c, 0x94, 0x2a, 0xbb, 0xad, 0x8a, 0x1c, + 0x21, 0x7a, 0xc1, 0x09, 0x90, 0x7f, 0xa6, 0xc1, 0xb4, 0x5c, 0x94, 0x2a, 0xbb, 0xad, 0x8a, 0x1c, 0xf3, 0x11, 0x24, 0xfc, 0x7e, 0x82, 0x5c, 0x62, 0x1c, 0x95, 0x37, 0x04, 0x8d, 0xe5, 0x16, 0x8e, 0xb5, 0xb5, 0xe6, 0x86, 0x7e, 0x6b, 0xf9, 0xbe, 0xe8, 0x69, 0xa1, 0xa3, 0x78, 0xf5, 0x5b, 0x7f, 0xf4, 0x64, 0x1a, 0x54, 0x70, 0x3a, 0xda, 0x29, 0x7d, 0x4b, 0x83, 0xd9, 0x9e, 0x8d, 0x93, 0x02, 0xa4, 0x98, 0xf5, 0x41, 0xed, 0x35, 0xd8, 0x4f, 0xb2, 0x05, 0x99, 0x43, 0xd3, 0x69, 0x72, 0x3b, 0x1f, 0x5f, 0x43, 0xf6, 0x0f, 0xcb, 0x72, 0xe1, 0x2e, 0x47, 0x8b, 0x74, 0x7b, 0xe1, 0xc6, 0xf6, - 0x65, 0x33, 0x5c, 0x8e, 0x06, 0xa7, 0xf5, 0xde, 0xc8, 0x3b, 0x9a, 0xfe, 0xbb, 0x29, 0x98, 0x8d, + 0x65, 0x33, 0x5c, 0x8e, 0x06, 0xa7, 0xf5, 0xde, 0xc8, 0x3b, 0x9a, 0xfe, 0x3b, 0x29, 0x98, 0x8d, 0xc9, 0x63, 0xed, 0x28, 0xa4, 0xbe, 0x6b, 0x3a, 0x64, 0x25, 0x3e, 0x52, 0x2f, 0xf7, 0x11, 0xa8, - 0xac, 0x1f, 0x1f, 0xa4, 0x3f, 0x4c, 0x1c, 0xa4, 0x0f, 0x06, 0x1d, 0x24, 0xc9, 0xd4, 0xff, 0xe7, + 0xac, 0x1f, 0x1f, 0xa4, 0x3f, 0x48, 0x1c, 0xa4, 0x0f, 0x06, 0x1d, 0x24, 0xc9, 0xd4, 0xff, 0xe7, 0x83, 0x75, 0x0b, 0xb2, 0x1b, 0x5e, 0xd5, 0x74, 0xec, 0xb0, 0x45, 0xbe, 0x00, 0x99, 0xd0, 0xa6, 0xbe, 0x1c, 0x9e, 0x85, 0x04, 0x51, 0x6e, 0xdb, 0x54, 0x1a, 0x22, 0x5e, 0x47, 0x2f, 0x43, 0x9a, 0x01, 0x55, 0xde, 0x73, 0x9c, 0xf7, 0x19, 0x95, 0xf7, 0x9c, 0x68, 0x5c, 0xff, 0x15, 0x0d, 0xc6, @@ -4903,7 +4905,7 @@ var fileDescriptor_07f09f8b91174efc = []byte{ 0x7e, 0x13, 0xf5, 0x86, 0x41, 0xae, 0xdf, 0x44, 0xc8, 0xcd, 0xd7, 0x51, 0x17, 0x18, 0xe4, 0x26, 0xc7, 0x79, 0xfb, 0x26, 0x8e, 0x2f, 0x83, 0xbc, 0xcd, 0x71, 0xde, 0x7d, 0x1d, 0x47, 0x89, 0x41, 0xde, 0x7d, 0x9d, 0xb9, 0xf2, 0x8d, 0x7b, 0xe6, 0x11, 0x0a, 0x5b, 0x33, 0xf0, 0xb7, 0xfe, 0x0f, - 0x46, 0x60, 0x6a, 0x2b, 0xf4, 0x7c, 0x75, 0x1e, 0xfc, 0x02, 0x64, 0xd9, 0xbe, 0x51, 0x99, 0x08, + 0x47, 0x60, 0x6a, 0x2b, 0xf4, 0x7c, 0x75, 0x1e, 0xfc, 0x02, 0x64, 0xd9, 0xbe, 0x51, 0x99, 0x08, 0x2b, 0x27, 0xc7, 0x0b, 0x63, 0x88, 0x86, 0x33, 0xe1, 0xcd, 0xa1, 0x66, 0x82, 0xa8, 0x67, 0x8c, 0x21, 0xd1, 0x75, 0xab, 0xad, 0xcb, 0x23, 0x43, 0xeb, 0xf2, 0x0a, 0xa4, 0xd9, 0x84, 0x12, 0xb3, 0xe0, 0x6a, 0x1f, 0xd3, 0xdf, 0xee, 0x93, 0xa0, 0x82, 0x95, 0xc9, 0x32, 0x64, 0xab, 0x66, 0xc3, @@ -4934,7 +4936,7 @@ var fileDescriptor_07f09f8b91174efc = []byte{ 0xa2, 0x26, 0x35, 0xdd, 0x51, 0x59, 0x7e, 0x8b, 0x89, 0x2b, 0xe8, 0x94, 0xe6, 0x61, 0x94, 0x17, 0x30, 0xb9, 0x7f, 0xdd, 0x73, 0xc5, 0xe6, 0x24, 0x67, 0xf0, 0x8f, 0x52, 0x1d, 0xc6, 0xd5, 0x8a, 0x3d, 0x46, 0xfb, 0x56, 0x5c, 0x1a, 0x6f, 0x0c, 0xcd, 0x92, 0x2a, 0x87, 0xcb, 0x90, 0xe7, 0x22, - 0xeb, 0x73, 0x2c, 0xf8, 0xfb, 0x69, 0xc8, 0x19, 0xe6, 0x5e, 0xc8, 0x6c, 0x05, 0x25, 0xaf, 0x02, + 0xeb, 0x73, 0x2c, 0xf8, 0x7b, 0x69, 0xc8, 0x19, 0xe6, 0x5e, 0xc8, 0x6c, 0x05, 0x25, 0xaf, 0x02, 0xf8, 0xb4, 0xe1, 0xd8, 0x55, 0x53, 0x62, 0xa6, 0x97, 0x27, 0x4e, 0x8e, 0x17, 0x72, 0x06, 0x87, 0xb2, 0xc9, 0x29, 0x10, 0xd6, 0x2d, 0xf2, 0x16, 0xc0, 0x23, 0xd3, 0xb7, 0xd0, 0x54, 0x49, 0xae, 0xcf, 0x96, 0xf9, 0xf9, 0x68, 0xf9, 0xb6, 0xe9, 0x5b, 0x48, 0x54, 0x5a, 0xdc, 0x47, 0x12, 0xc0, @@ -5009,18 +5011,18 @@ var fileDescriptor_07f09f8b91174efc = []byte{ 0xc0, 0xb6, 0x6f, 0x56, 0xe9, 0xda, 0x21, 0xb3, 0x97, 0xef, 0x40, 0x3a, 0xb4, 0xeb, 0x54, 0x38, 0x16, 0xa5, 0x32, 0xcf, 0x95, 0x28, 0xcb, 0x5c, 0x89, 0xf2, 0xb6, 0x4c, 0xa6, 0x58, 0xce, 0x32, 0x22, 0xbf, 0xfe, 0x47, 0x0b, 0x9a, 0x81, 0x35, 0xd8, 0x04, 0x8c, 0xa7, 0x25, 0xc8, 0x4f, 0xfd, - 0xf7, 0x35, 0x98, 0x5a, 0x72, 0x1c, 0xaf, 0x6a, 0x86, 0x9e, 0xbf, 0xea, 0xb7, 0x8c, 0xa6, 0xcb, + 0xf7, 0x34, 0x98, 0x5a, 0x72, 0x1c, 0xaf, 0x6a, 0x86, 0x9e, 0xbf, 0xea, 0xb7, 0x8c, 0xa6, 0xcb, 0x94, 0x42, 0xce, 0x05, 0xbe, 0x2b, 0xe6, 0x4a, 0x21, 0x34, 0xfa, 0x89, 0x67, 0xc2, 0x98, 0x98, 0x09, 0xe4, 0x4b, 0x30, 0x4a, 0x59, 0x87, 0xe4, 0xb9, 0x5c, 0x92, 0x8b, 0xd4, 0xee, 0xbe, 0x21, 0x2a, 0xe9, 0xd7, 0x61, 0x36, 0xe2, 0x18, 0x69, 0xcb, 0x51, 0x3a, 0xdf, 0xc9, 0x77, 0xd4, 0xa4, - 0xfe, 0x8f, 0x35, 0x98, 0xeb, 0xac, 0xd4, 0x3b, 0x38, 0x9d, 0xfa, 0x2c, 0x03, 0x15, 0x2b, 0x30, + 0xfe, 0x4f, 0x34, 0x98, 0xeb, 0xac, 0xd4, 0x3b, 0x38, 0x9d, 0xfa, 0x2c, 0x03, 0x15, 0x2b, 0x30, 0x66, 0xf9, 0xad, 0x8a, 0xdf, 0x74, 0x85, 0xbe, 0x27, 0x69, 0x42, 0xc7, 0x30, 0x18, 0xa3, 0x16, 0xfe, 0xab, 0x7f, 0x47, 0x83, 0x42, 0x9b, 0xf7, 0x3f, 0x01, 0x86, 0xec, 0x23, 0x38, 0xab, 0xf0, 0x23, 0xc4, 0xb8, 0x06, 0x59, 0xd1, 0xd5, 0x41, 0xb4, 0xbe, 0xb3, 0xaf, 0x63, 0xbc, 0xaf, 0x81, 0xae, 0xc3, 0xf8, 0x9d, 0xad, 0xfb, 0x9b, 0x11, 0x59, 0x99, 0x31, 0xa3, 0xb5, 0x33, 0x66, 0xf4, 0x3a, 0x4c, 0x44, 0x61, 0x48, 0xe6, 0x9d, 0xb1, 0x65, 0x1e, 0xdd, 0x34, 0x21, 0x0a, 0xfe, 0xc1, 0xaa, 0x56, 0x3d, 0x8b, 0x6b, 0x7c, 0xc6, 0xc0, 0xdf, 0xea, 0x44, 0x48, 0xc5, 0x26, 0x02, 0x2b, - 0xb1, 0x78, 0xda, 0x02, 0xe6, 0xe1, 0xe4, 0x0c, 0xf9, 0xa9, 0xff, 0x73, 0x0d, 0xf2, 0x1b, 0x5e, + 0xb1, 0x78, 0xda, 0x02, 0xe6, 0xe1, 0xe4, 0x0c, 0xf9, 0xa9, 0xff, 0x0b, 0x0d, 0xf2, 0x1b, 0x5e, 0xad, 0xff, 0x1a, 0xc2, 0xbc, 0x0d, 0x7a, 0x48, 0x1d, 0x19, 0xa9, 0xc3, 0x8f, 0xe8, 0xa4, 0xb5, 0x82, 0x73, 0x97, 0xb7, 0xca, 0xb7, 0x1a, 0x6c, 0xbe, 0x32, 0xa5, 0x65, 0x5b, 0x0b, 0x2c, 0xe4, 0xa7, 0x00, 0x6c, 0xab, 0x81, 0x45, 0x05, 0x48, 0xd5, 0xcd, 0x23, 0x5c, 0x10, 0x73, 0x06, 0xfb, @@ -5048,7 +5050,7 @@ var fileDescriptor_07f09f8b91174efc = []byte{ 0xf8, 0xf6, 0x6d, 0x63, 0x6d, 0x69, 0x75, 0xc5, 0x58, 0x5b, 0xda, 0x5e, 0x2b, 0xa4, 0x08, 0xc0, 0xe8, 0xd2, 0xc6, 0xc6, 0xfd, 0x95, 0xad, 0x42, 0x9a, 0xe4, 0x20, 0xb3, 0xbc, 0x71, 0x7f, 0xe5, 0x6e, 0x21, 0xc3, 0x7e, 0xde, 0xdb, 0xd9, 0x5e, 0xfb, 0x6a, 0x61, 0x54, 0xbf, 0x0a, 0x93, 0xe2, - 0x20, 0xbd, 0xef, 0xec, 0xfb, 0x7b, 0xe8, 0x07, 0xef, 0x85, 0x68, 0xca, 0xd9, 0x12, 0xf5, 0x4c, + 0x20, 0xbd, 0xef, 0xec, 0xfb, 0xfb, 0xe8, 0x07, 0xef, 0x85, 0x68, 0xca, 0xd9, 0x12, 0xf5, 0x4c, 0xa3, 0xf3, 0x5f, 0x86, 0x0c, 0x2e, 0x15, 0x03, 0x9d, 0x5c, 0x74, 0x9c, 0x36, 0x60, 0x45, 0xfd, 0x1a, 0xf3, 0x94, 0x05, 0xbb, 0xdc, 0xc2, 0x2b, 0x76, 0x5b, 0x8b, 0x3b, 0x30, 0xdf, 0x1c, 0x81, 0xa9, 0x08, 0x59, 0x6c, 0x3b, 0x9f, 0xb5, 0x03, 0x73, 0x0b, 0x46, 0x71, 0x89, 0x91, 0x0e, 0xcc, @@ -5058,253 +5060,254 @@ var fileDescriptor_07f09f8b91174efc = []byte{ 0x69, 0x57, 0xcc, 0xe6, 0xef, 0x68, 0x1d, 0x9b, 0x9a, 0x77, 0xfa, 0x74, 0x2a, 0x56, 0x9d, 0x37, 0x23, 0xce, 0xa9, 0xbf, 0x28, 0x82, 0x57, 0x4f, 0xc6, 0xa8, 0xe0, 0xe2, 0x33, 0x1b, 0xac, 0x12, 0x85, 0xbc, 0xc2, 0x9d, 0x7a, 0xd6, 0x9c, 0xe2, 0x5b, 0xdf, 0x2f, 0xc7, 0xcf, 0x9a, 0xaf, 0x0d, - 0xd2, 0x50, 0x77, 0x4a, 0xd1, 0xbf, 0x4a, 0xc3, 0xd8, 0xf6, 0x91, 0x8b, 0xdb, 0xb3, 0x87, 0x30, - 0x22, 0x54, 0x78, 0x7c, 0x79, 0x89, 0x31, 0xf3, 0xef, 0x07, 0x9d, 0x9b, 0x3c, 0xe5, 0xbb, 0x69, - 0x5b, 0xe5, 0x9d, 0x9d, 0x75, 0x36, 0xf2, 0x23, 0xeb, 0xab, 0xc6, 0x88, 0x6d, 0x91, 0xf7, 0x70, - 0x6b, 0xe2, 0x87, 0x82, 0xc9, 0xc1, 0x76, 0x11, 0xbc, 0x0a, 0xdb, 0x84, 0x87, 0x47, 0x6e, 0xc5, - 0x12, 0xe1, 0x68, 0xdb, 0x73, 0x85, 0x3f, 0x33, 0x19, 0x1e, 0xb9, 0xab, 0x6d, 0x28, 0x79, 0x0b, - 0xce, 0xb9, 0xcd, 0x3a, 0x3f, 0xc0, 0xac, 0xb3, 0x75, 0xa9, 0x42, 0x8f, 0x68, 0xb5, 0x29, 0xcf, - 0xa8, 0x33, 0xc6, 0xac, 0xdb, 0xac, 0x6f, 0x45, 0xa5, 0x6b, 0xa2, 0x90, 0x2c, 0x40, 0x9e, 0xd5, - 0xf3, 0x29, 0xf7, 0x4a, 0xf0, 0x8c, 0xd1, 0x00, 0xb7, 0x59, 0x37, 0x38, 0x84, 0x5c, 0x81, 0x02, - 0x43, 0x30, 0x9b, 0xa1, 0x17, 0x61, 0x71, 0x6b, 0x3c, 0xe9, 0x36, 0xeb, 0x4b, 0xcd, 0xd0, 0x93, - 0x98, 0x5f, 0x86, 0xac, 0x45, 0x4d, 0xcb, 0xb1, 0x5d, 0x7e, 0x94, 0x37, 0x68, 0x57, 0xa3, 0x5a, - 0x18, 0x1c, 0xac, 0x37, 0x1c, 0xbb, 0x6a, 0x87, 0xe2, 0xc0, 0x3c, 0xfa, 0x66, 0x8c, 0x9a, 0xcc, - 0x85, 0xad, 0xec, 0xb6, 0x42, 0xca, 0x8f, 0xf1, 0x52, 0x06, 0x20, 0x68, 0x99, 0x41, 0xc8, 0x65, - 0x98, 0xaa, 0x9b, 0x47, 0x15, 0x15, 0x09, 0x10, 0x69, 0xa2, 0x6e, 0x1e, 0x2d, 0xb5, 0xf1, 0x2e, - 0x40, 0x0e, 0x4f, 0xba, 0x70, 0x09, 0xce, 0xf3, 0x56, 0x18, 0x00, 0x97, 0xe0, 0x17, 0x60, 0xc2, - 0x0e, 0xc4, 0x59, 0xa3, 0x5d, 0x35, 0x1d, 0x8c, 0xa5, 0x66, 0x8d, 0x71, 0x3b, 0xb8, 0x1d, 0xc1, - 0x70, 0xb9, 0xf5, 0x6d, 0xcf, 0xb7, 0xc3, 0x16, 0x1e, 0xdb, 0xb1, 0xe5, 0x56, 0x7c, 0xeb, 0xbf, - 0x93, 0x82, 0x3c, 0xc6, 0x0b, 0xe9, 0xc3, 0x26, 0xf5, 0x5b, 0x64, 0x2e, 0xd2, 0xa7, 0xdc, 0xf2, - 0xa8, 0xa2, 0x14, 0x5f, 0x83, 0x51, 0x36, 0xb0, 0xb6, 0x85, 0xa2, 0x1a, 0x5f, 0x5e, 0x7d, 0x3a, - 0x5d, 0xcb, 0x30, 0xfd, 0x5d, 0x35, 0x32, 0xe1, 0x91, 0xbb, 0x6e, 0xb1, 0x89, 0x12, 0x1c, 0x48, - 0xa7, 0x98, 0xfd, 0x6c, 0xeb, 0x60, 0x6a, 0x78, 0x1d, 0x7c, 0x09, 0x26, 0xed, 0xa0, 0x62, 0xd9, - 0x81, 0xc8, 0x69, 0x91, 0x51, 0x8f, 0x09, 0x3b, 0x58, 0x6d, 0x03, 0xc9, 0x32, 0x64, 0x1a, 0x8f, - 0x64, 0x20, 0x63, 0xb2, 0x67, 0x56, 0x6b, 0xb4, 0x17, 0x69, 0x0b, 0xa8, 0xfc, 0x80, 0xd5, 0x31, - 0x78, 0x55, 0x2e, 0xd9, 0x28, 0xda, 0xa6, 0x5d, 0x19, 0x51, 0x62, 0x66, 0x57, 0xa0, 0x10, 0x1c, - 0x38, 0x15, 0xd7, 0xab, 0x54, 0x3d, 0x37, 0x08, 0x4d, 0xe6, 0x8b, 0x65, 0xf9, 0x5c, 0x08, 0x0e, - 0x9c, 0x4d, 0x6f, 0x45, 0x42, 0xf5, 0x97, 0x20, 0x83, 0x54, 0xd9, 0x9a, 0xff, 0xc0, 0x58, 0x7b, - 0xb0, 0x64, 0xac, 0x6f, 0xde, 0x2a, 0x9c, 0x61, 0x9f, 0x6b, 0x5f, 0x5d, 0x5b, 0x61, 0x2e, 0xc0, - 0xad, 0x82, 0xa6, 0xbf, 0x01, 0xd3, 0xcc, 0x33, 0xde, 0xa2, 0x41, 0xa0, 0xc4, 0x71, 0x19, 0x0f, - 0xcd, 0x80, 0xfa, 0x8a, 0x83, 0x18, 0x7d, 0xeb, 0xff, 0x37, 0x0d, 0x63, 0x02, 0xff, 0x99, 0x2e, - 0xe8, 0x2a, 0x0f, 0x23, 0x71, 0x1e, 0xd8, 0x70, 0x54, 0x1d, 0x9b, 0xba, 0x61, 0x94, 0xc7, 0xc5, - 0x2d, 0xc2, 0x04, 0x87, 0xca, 0x74, 0xb0, 0xab, 0x50, 0xc0, 0x18, 0x66, 0x15, 0x2f, 0x73, 0xf0, - 0x94, 0x30, 0xbe, 0xdb, 0x99, 0x52, 0xe0, 0x22, 0x2d, 0x6c, 0x12, 0xf3, 0x0e, 0x68, 0x45, 0x44, - 0x77, 0x44, 0x8a, 0xc9, 0xe5, 0xc1, 0x86, 0x50, 0xe6, 0x82, 0x98, 0x11, 0x88, 0x59, 0x83, 0x48, - 0xe3, 0x46, 0x87, 0xd7, 0xb8, 0x6b, 0x70, 0xd6, 0x31, 0x83, 0xb0, 0xa2, 0x70, 0xd5, 0x12, 0x63, - 0x3d, 0xc5, 0x0a, 0xba, 0x27, 0x58, 0x0e, 0x27, 0x91, 0x3a, 0xc1, 0x3a, 0xec, 0x05, 0x0c, 0x62, - 0x2f, 0xf2, 0xbd, 0xec, 0xc5, 0x12, 0x80, 0xe0, 0x23, 0x3c, 0x72, 0xd1, 0x1e, 0x24, 0x67, 0x0d, - 0x8a, 0x95, 0xc4, 0xc8, 0xf1, 0x5a, 0xdb, 0x47, 0x2e, 0x59, 0x86, 0xf9, 0xae, 0xfe, 0xc4, 0x15, - 0x99, 0x9b, 0x91, 0x52, 0x47, 0xe7, 0x14, 0xa5, 0xbe, 0x93, 0xce, 0x8e, 0x15, 0xb2, 0xfa, 0x5f, - 0xd2, 0xe0, 0xac, 0xaa, 0xb4, 0xdc, 0x57, 0x7b, 0x96, 0xaa, 0x78, 0xfa, 0x41, 0xd6, 0xef, 0x68, - 0x30, 0x13, 0x9f, 0x40, 0xc2, 0x21, 0x59, 0x85, 0x6c, 0x20, 0x60, 0xc2, 0x23, 0x49, 0x92, 0x97, - 0xa8, 0x2e, 0x03, 0x2d, 0xb2, 0x26, 0xb9, 0xd3, 0xe1, 0x45, 0x24, 0x19, 0x94, 0x2e, 0x91, 0xc4, - 0x1d, 0x09, 0xfd, 0x00, 0xc8, 0x8a, 0xe9, 0x56, 0xa9, 0x83, 0x62, 0xed, 0xbb, 0x79, 0xb9, 0x0c, - 0x59, 0x3e, 0x46, 0x36, 0x0f, 0x65, 0xe6, 0x96, 0xf3, 0xcc, 0x9b, 0xc5, 0xca, 0xcc, 0x2b, 0xc5, - 0xc2, 0x8e, 0x69, 0x9a, 0xea, 0x30, 0x15, 0xb7, 0x60, 0x3a, 0xd6, 0xa4, 0x90, 0x0d, 0xdb, 0x49, - 0x22, 0x98, 0x5a, 0x22, 0x7e, 0x1d, 0x7d, 0xb7, 0x0f, 0x55, 0x46, 0x94, 0x43, 0x15, 0xbd, 0x05, - 0x33, 0x9c, 0x90, 0xe8, 0x60, 0x5f, 0xee, 0x5f, 0x05, 0x10, 0x42, 0x94, 0xfc, 0x8f, 0xf3, 0xe4, - 0x0a, 0x41, 0x60, 0x7d, 0xd5, 0xc8, 0x09, 0x84, 0x3e, 0x7d, 0x58, 0x87, 0xd9, 0x8e, 0xa6, 0x9f, - 0xb8, 0x17, 0xcf, 0xc1, 0x05, 0x36, 0x48, 0x2b, 0xd1, 0xcd, 0x41, 0x3c, 0x61, 0x8c, 0x92, 0x67, - 0xa4, 0x5e, 0x47, 0x99, 0x3c, 0x3f, 0x43, 0xbd, 0xfe, 0x47, 0x1a, 0x5c, 0xec, 0xcd, 0xab, 0xe8, - 0xfd, 0x46, 0x74, 0x9a, 0xca, 0xcf, 0x85, 0x63, 0xbb, 0xdb, 0x03, 0xa7, 0xac, 0xde, 0x95, 0x2c, - 0x6f, 0x51, 0xdf, 0x36, 0x1d, 0xfb, 0xeb, 0xd4, 0x32, 0x68, 0x8d, 0x2d, 0x97, 0xad, 0x48, 0x37, - 0x91, 0xc6, 0xd0, 0x7a, 0x1e, 0x13, 0x51, 0x87, 0x9e, 0x9f, 0x87, 0x73, 0x0c, 0x85, 0x2d, 0xcb, - 0x5b, 0x0f, 0x37, 0x3e, 0x70, 0xbc, 0x8f, 0x23, 0x09, 0xff, 0xd7, 0x14, 0x10, 0x01, 0x37, 0x68, - 0xdd, 0x0b, 0x29, 0x96, 0x92, 0x3d, 0x18, 0xdb, 0x73, 0xbc, 0x8f, 0x2b, 0x91, 0xd3, 0x7b, 0x4f, - 0x38, 0x22, 0x5f, 0x18, 0x48, 0xb8, 0x1d, 0xf7, 0x3e, 0xcb, 0x8c, 0x28, 0x3a, 0x24, 0xa3, 0xfc, - 0x97, 0x31, 0xca, 0xa8, 0xaf, 0x5b, 0x64, 0x13, 0x32, 0xb6, 0xbb, 0xe7, 0xc9, 0x4e, 0x26, 0x25, - 0xd1, 0x74, 0x73, 0xa9, 0x66, 0x54, 0x72, 0x32, 0xa5, 0xff, 0xa3, 0x41, 0x1a, 0x1d, 0xf6, 0x67, - 0xa9, 0x23, 0xcb, 0x90, 0x8b, 0xae, 0x4b, 0x0e, 0xe5, 0xbd, 0xb7, 0xab, 0x31, 0x65, 0x11, 0x11, - 0x5e, 0x1e, 0x22, 0x79, 0x73, 0xb8, 0x9e, 0x8b, 0xdd, 0x8a, 0xa0, 0xa1, 0x3f, 0x0f, 0xa3, 0x62, - 0xc7, 0x9d, 0x87, 0x31, 0x63, 0x67, 0x73, 0x93, 0x7b, 0x36, 0x00, 0xa3, 0x0f, 0x77, 0xd6, 0x76, - 0xd6, 0x56, 0x0b, 0x9a, 0xfe, 0x07, 0x1a, 0x14, 0xbb, 0x95, 0x40, 0xa8, 0xee, 0x3a, 0x64, 0xd8, - 0x80, 0x0c, 0x72, 0xfd, 0xad, 0x9b, 0x99, 0xe8, 0x38, 0x10, 0x35, 0xe7, 0xb3, 0xd4, 0xdb, 0xff, - 0xa0, 0x41, 0x61, 0xab, 0x61, 0xba, 0xb1, 0x10, 0xd0, 0x0b, 0x1d, 0x06, 0x6e, 0x19, 0xda, 0x23, - 0x1b, 0x0d, 0x91, 0xa1, 0x26, 0x91, 0x70, 0x5b, 0x77, 0xf3, 0xa7, 0xc7, 0x0b, 0x6f, 0x0c, 0xb7, - 0x81, 0xbd, 0x4b, 0x5b, 0x4a, 0xee, 0xc9, 0x66, 0x3b, 0xf7, 0x24, 0xf5, 0x34, 0x14, 0x45, 0xca, - 0x0a, 0x33, 0x28, 0x67, 0x95, 0xde, 0x89, 0xa1, 0x58, 0x80, 0x3c, 0x3f, 0x2f, 0xa8, 0x7a, 0x4d, - 0x37, 0x14, 0x67, 0xe6, 0x80, 0xa0, 0x15, 0x06, 0x21, 0x6f, 0xc2, 0x9c, 0xd9, 0x68, 0xf8, 0xde, - 0x91, 0x5d, 0x37, 0x43, 0xca, 0x1c, 0xf0, 0x7d, 0xe1, 0xa7, 0xf0, 0x84, 0xb6, 0x19, 0xa5, 0x74, - 0xd5, 0x0e, 0xf6, 0xb9, 0xbb, 0xb2, 0x01, 0x79, 0x91, 0x38, 0x2a, 0xc2, 0x61, 0x5d, 0x29, 0x31, - 0x9d, 0x71, 0xb9, 0x7b, 0x5f, 0x59, 0x59, 0x41, 0xd6, 0xe4, 0x0d, 0x39, 0x9e, 0x5d, 0x8a, 0xe1, - 0xb0, 0x2f, 0xc0, 0x8c, 0xc8, 0x84, 0x88, 0x47, 0x75, 0x07, 0x19, 0x1b, 0xfd, 0xfb, 0x13, 0x30, - 0xdb, 0x51, 0xbb, 0x3b, 0x02, 0x94, 0xfd, 0xac, 0x27, 0xed, 0x1f, 0x6a, 0x30, 0x2d, 0xb3, 0x35, - 0xd4, 0xeb, 0x56, 0xb9, 0xbe, 0xd7, 0xad, 0x7a, 0xf2, 0x5a, 0x8e, 0x32, 0x41, 0x7a, 0x5f, 0xb7, - 0xea, 0x28, 0x7e, 0xf2, 0xeb, 0x56, 0x8d, 0x8e, 0x76, 0x4a, 0xff, 0x26, 0xc7, 0x53, 0xd8, 0xa3, - 0xf4, 0xb7, 0xae, 0x84, 0x19, 0xad, 0x47, 0xc2, 0xcc, 0x9f, 0xd3, 0x60, 0x56, 0xc9, 0x88, 0xab, - 0x74, 0x86, 0xa6, 0xee, 0x9f, 0x1c, 0x2f, 0x4c, 0xef, 0xb4, 0x11, 0x9e, 0xfa, 0x78, 0x6a, 0xba, - 0xd9, 0x49, 0xcc, 0x0a, 0xc8, 0xef, 0x69, 0x70, 0x59, 0x49, 0xa7, 0xeb, 0xca, 0xc6, 0x53, 0xd8, - 0x4a, 0x21, 0x5b, 0x3f, 0x7f, 0x72, 0xbc, 0x70, 0xa9, 0x9d, 0x6b, 0x17, 0xcf, 0xcf, 0x7b, 0x6a, - 0x1e, 0x2f, 0xf9, 0x89, 0x94, 0xad, 0x80, 0x7c, 0x5b, 0x83, 0x62, 0x3c, 0x05, 0x50, 0x61, 0x31, - 0x8d, 0x2c, 0x3e, 0x38, 0x39, 0x5e, 0x98, 0xd9, 0x54, 0x12, 0x02, 0x9f, 0x9a, 0xad, 0x19, 0xb7, - 0x8b, 0x9a, 0x15, 0x90, 0x23, 0x20, 0x32, 0x29, 0x50, 0xe1, 0x21, 0x83, 0x3c, 0xdc, 0x3d, 0x39, - 0x5e, 0x98, 0xda, 0xe4, 0x29, 0x82, 0x4f, 0xdd, 0xfc, 0x94, 0xab, 0x12, 0xb2, 0x02, 0xf2, 0x6b, - 0x1a, 0x9c, 0xef, 0x48, 0x65, 0x54, 0x38, 0x18, 0x45, 0x0e, 0xb6, 0x4e, 0x8e, 0x17, 0xce, 0xed, - 0xc4, 0x91, 0x9e, 0x9a, 0x93, 0x73, 0xcd, 0x5e, 0x04, 0xad, 0x80, 0xfc, 0xaa, 0x06, 0xc5, 0x78, - 0xce, 0xa4, 0xc2, 0x50, 0x0e, 0x19, 0x32, 0x4e, 0x8e, 0x17, 0xe6, 0xee, 0x1f, 0x7e, 0xa6, 0xfc, - 0xcc, 0x79, 0x87, 0x3d, 0xd9, 0xf9, 0x2d, 0x0d, 0xf4, 0xd3, 0xb2, 0x32, 0x15, 0xc6, 0xc6, 0x90, - 0xb1, 0x8f, 0x4e, 0x8e, 0x17, 0xe6, 0x1f, 0xf6, 0xcc, 0xd1, 0x7c, 0x6a, 0x06, 0xe7, 0x0f, 0x12, - 0xe8, 0x5a, 0x01, 0xf9, 0x0d, 0x0d, 0x2e, 0x76, 0x27, 0x81, 0x2a, 0x2c, 0x66, 0xdb, 0x83, 0x69, - 0xc4, 0x53, 0x42, 0x9f, 0x7e, 0x30, 0xfd, 0x5e, 0x04, 0xad, 0x00, 0xef, 0x8f, 0xf6, 0xb4, 0xa6, - 0xfd, 0xee, 0x8f, 0xe6, 0x13, 0x1f, 0x8c, 0xe8, 0x6d, 0xb6, 0x55, 0xcb, 0xa9, 0x1c, 0xf6, 0xde, - 0x49, 0x67, 0xb5, 0x42, 0x56, 0x7f, 0x1b, 0x0a, 0xb7, 0xbd, 0xf0, 0x09, 0xd6, 0xb4, 0x5f, 0x1e, - 0x83, 0xb3, 0x4a, 0xcd, 0xcf, 0xe1, 0xba, 0xfd, 0xbf, 0xd4, 0x60, 0xf6, 0x91, 0x17, 0xf2, 0xb1, - 0xeb, 0x71, 0x81, 0x78, 0x25, 0x41, 0x34, 0x5d, 0x9c, 0xb6, 0x21, 0xf1, 0xe5, 0xec, 0x81, 0x58, - 0xce, 0xce, 0x76, 0x96, 0x3f, 0xf1, 0x7a, 0x76, 0xf6, 0x51, 0x67, 0x4b, 0xa5, 0x43, 0xc8, 0x4a, - 0xf2, 0xe4, 0x8b, 0xb1, 0xeb, 0x58, 0xbd, 0xae, 0x3d, 0x22, 0xde, 0x29, 0xf7, 0xb0, 0x7a, 0xa7, - 0x28, 0x8f, 0xf4, 0x4e, 0x51, 0x2e, 0xfd, 0x6b, 0x0d, 0x26, 0x30, 0x4f, 0x2a, 0x1a, 0xaf, 0x67, - 0x9d, 0x84, 0xf5, 0x11, 0x40, 0x7b, 0xc8, 0xc4, 0x38, 0xdd, 0x7c, 0xa2, 0x71, 0x8a, 0x6e, 0x35, - 0x48, 0x8c, 0xd2, 0x2f, 0x69, 0x1d, 0x37, 0xdb, 0x06, 0x72, 0x0b, 0x0c, 0xb6, 0x0d, 0xf1, 0xfc, - 0x88, 0x9b, 0xf7, 0x86, 0xe2, 0x26, 0x26, 0x3d, 0x43, 0x50, 0x2a, 0xfd, 0x22, 0xcc, 0xf5, 0x56, - 0xa7, 0x1e, 0xf3, 0xf9, 0x7e, 0x7c, 0x3e, 0xbf, 0x3b, 0x54, 0xf3, 0x6a, 0x77, 0xd5, 0xc0, 0xcd, - 0x55, 0x18, 0x1f, 0x34, 0x1d, 0xe9, 0xb7, 0x33, 0x22, 0x31, 0xf1, 0x73, 0x99, 0xb3, 0x6a, 0x38, - 0x74, 0xe4, 0x19, 0x84, 0x43, 0xff, 0x85, 0x06, 0x33, 0xbe, 0xe8, 0x48, 0xcc, 0x24, 0xf0, 0xa8, - 0xe6, 0xcf, 0xf5, 0x0b, 0x00, 0x2b, 0x17, 0x7a, 0x04, 0x91, 0x53, 0xcc, 0x41, 0x67, 0xf9, 0x93, - 0x9b, 0x03, 0xbf, 0xb3, 0xa5, 0xd2, 0x77, 0x3b, 0x15, 0xb9, 0x04, 0x59, 0x89, 0x25, 0x4f, 0x95, - 0xfc, 0x53, 0x95, 0xbc, 0xd7, 0x63, 0x3f, 0x5f, 0x96, 0x87, 0x0c, 0xa9, 0xa1, 0x93, 0x3b, 0xc5, - 0xb1, 0xc2, 0x27, 0x30, 0xd7, 0x5b, 0x24, 0x3d, 0x54, 0xfa, 0x6e, 0x5c, 0xa5, 0x6f, 0x0e, 0x2c, - 0xf4, 0x53, 0xd4, 0x59, 0x64, 0xc2, 0xbc, 0x06, 0x64, 0xb5, 0xfd, 0x50, 0x57, 0xdf, 0x4c, 0x83, - 0x2b, 0xc2, 0xb6, 0xf5, 0xc7, 0xfc, 0x83, 0x11, 0x18, 0x17, 0xb7, 0x77, 0xf9, 0x9b, 0x4c, 0xcf, - 0xda, 0x0a, 0xbe, 0x02, 0x67, 0xa9, 0x5b, 0xf5, 0x5b, 0x18, 0xa1, 0x94, 0x79, 0xee, 0xb8, 0x47, - 0x37, 0x0a, 0xed, 0x02, 0x71, 0x9e, 0xb1, 0x20, 0xf7, 0xad, 0x3c, 0x33, 0x85, 0x6f, 0x71, 0xf9, - 0x56, 0x14, 0x93, 0x57, 0xda, 0x08, 0x7c, 0x0f, 0x9c, 0x56, 0x10, 0xf8, 0xce, 0xf7, 0x0a, 0x14, - 0xc4, 0x01, 0xfb, 0x3e, 0x6d, 0x09, 0x32, 0xfc, 0x1a, 0x93, 0x08, 0x6f, 0xdc, 0xa5, 0x2d, 0x4e, - 0x2a, 0x8e, 0xc9, 0xe9, 0x8d, 0x76, 0x60, 0x22, 0x4d, 0xfd, 0x43, 0x98, 0x94, 0xd2, 0x8d, 0xb2, - 0xee, 0xa4, 0x21, 0xed, 0xff, 0x26, 0x88, 0x2a, 0x6d, 0x79, 0xe2, 0xc1, 0x2b, 0xeb, 0xdf, 0xd6, - 0xe0, 0x6c, 0x3b, 0x1c, 0x3b, 0xd4, 0x91, 0x07, 0x26, 0x23, 0xd5, 0x77, 0x6d, 0x97, 0x5a, 0x32, - 0x85, 0x48, 0x7e, 0x93, 0x92, 0x1a, 0xe7, 0x4b, 0x61, 0x9b, 0x51, 0x54, 0x65, 0x0e, 0x52, 0xd4, - 0xe5, 0xc1, 0x3b, 0x59, 0xc2, 0x00, 0xfa, 0xff, 0xc8, 0x01, 0x51, 0x59, 0x11, 0x1d, 0x6d, 0x60, - 0x16, 0x9d, 0x80, 0x8a, 0xce, 0xde, 0x49, 0xce, 0xb6, 0xea, 0x20, 0x51, 0x5e, 0xf1, 0x1c, 0x87, - 0x56, 0x43, 0x6a, 0x45, 0x65, 0x5d, 0xb7, 0x21, 0x94, 0x36, 0xc8, 0x0a, 0x00, 0x86, 0x49, 0x7c, - 0x1a, 0xd0, 0xe1, 0x22, 0x95, 0x39, 0x56, 0xcf, 0x60, 0xd5, 0xc8, 0xdb, 0x50, 0x94, 0x8f, 0x64, - 0x54, 0xcc, 0x46, 0x03, 0x03, 0x5f, 0x95, 0x86, 0x4f, 0xf7, 0xec, 0x23, 0x11, 0xff, 0x9a, 0x95, - 0xe5, 0x4b, 0x8d, 0xc6, 0xa6, 0x59, 0xa7, 0x0f, 0xb0, 0x90, 0x7c, 0x03, 0xc6, 0xf1, 0x3a, 0x1e, - 0xd3, 0x00, 0xcf, 0x95, 0x31, 0xb0, 0xed, 0xe1, 0x7a, 0xbc, 0x26, 0x5e, 0xb8, 0x8a, 0x7a, 0xbe, - 0xdd, 0x26, 0xd9, 0xd5, 0xf7, 0x58, 0x7b, 0xa5, 0xff, 0x36, 0x02, 0xf3, 0xb2, 0x7a, 0x0f, 0x79, - 0xf1, 0x1b, 0x03, 0x59, 0xa6, 0xb0, 0x51, 0x7a, 0x66, 0xc7, 0xc1, 0xce, 0x81, 0x53, 0xee, 0x5d, - 0x51, 0xe6, 0x12, 0xee, 0xd3, 0xd6, 0xaa, 0x19, 0x9a, 0xea, 0xd2, 0x37, 0xf2, 0x59, 0x2f, 0x7d, - 0xeb, 0x30, 0x61, 0xd6, 0x6a, 0x3e, 0xad, 0xe1, 0x66, 0x2d, 0x0c, 0x86, 0x1a, 0xc7, 0xf1, 0x76, - 0xd5, 0xed, 0x80, 0x7c, 0x05, 0x66, 0xe4, 0x37, 0x06, 0x33, 0xd8, 0xb0, 0x1d, 0x8a, 0xb7, 0x50, - 0xf2, 0xd7, 0xcf, 0x77, 0x51, 0x5c, 0x15, 0x2f, 0xd7, 0x71, 0x82, 0xdf, 0x67, 0x04, 0xa7, 0x15, - 0x02, 0xeb, 0xa2, 0x7e, 0xe9, 0x6f, 0x8d, 0xc0, 0xc5, 0x24, 0xd5, 0x24, 0x56, 0xdb, 0xd6, 0xe7, - 0xaf, 0x6f, 0x3c, 0x99, 0x06, 0x24, 0x8e, 0x04, 0xae, 0x1f, 0x5f, 0xc5, 0xc8, 0x25, 0x1a, 0xba, - 0xe5, 0xdb, 0x3c, 0x72, 0xf9, 0xd3, 0xe3, 0x85, 0xf7, 0x87, 0xb4, 0xb9, 0xf5, 0xf0, 0x03, 0xdb, - 0xad, 0x51, 0xbf, 0xe1, 0xdb, 0x6e, 0x28, 0x62, 0x9f, 0xef, 0xcb, 0x64, 0xf8, 0x91, 0xee, 0x68, - 0x65, 0x6f, 0x25, 0x89, 0x25, 0xc1, 0x97, 0x7e, 0xac, 0xc1, 0xe5, 0xc1, 0x34, 0x99, 0x18, 0xdc, - 0x4a, 0x04, 0xaa, 0x52, 0xbe, 0xd6, 0xd1, 0xde, 0x40, 0x93, 0x21, 0x87, 0x64, 0x9e, 0xb5, 0x7a, - 0xea, 0xdb, 0x30, 0xbf, 0x22, 0x8c, 0x65, 0x7b, 0xf0, 0x62, 0xc7, 0xce, 0x91, 0x09, 0xd5, 0x4e, - 0x35, 0xa1, 0x23, 0x9d, 0x26, 0xf4, 0xdb, 0x23, 0x50, 0x8a, 0xc8, 0xc5, 0x56, 0xef, 0x86, 0xe7, - 0x87, 0x64, 0x32, 0x4a, 0x02, 0x49, 0xe1, 0xf8, 0x5c, 0x84, 0x5c, 0xd5, 0xab, 0x37, 0x1c, 0x1a, - 0x46, 0x26, 0xbc, 0x0d, 0x20, 0x37, 0x60, 0x36, 0x32, 0x8a, 0x95, 0xbd, 0xf6, 0xe0, 0x8a, 0xf0, - 0xdc, 0x4c, 0x54, 0xa8, 0x0c, 0x3c, 0x79, 0x1f, 0x8a, 0xed, 0x4a, 0xca, 0x43, 0x9f, 0x4c, 0x88, - 0xaa, 0xc5, 0x9f, 0x0b, 0x7a, 0xb0, 0x89, 0x09, 0x76, 0xe3, 0x3e, 0x17, 0x00, 0x7f, 0x80, 0x22, - 0x33, 0xc4, 0xac, 0xcd, 0x47, 0x35, 0x97, 0x42, 0xfd, 0x17, 0xe0, 0xe5, 0x15, 0x9f, 0x9a, 0x21, - 0x3d, 0x5d, 0x1e, 0x52, 0xd2, 0xa7, 0x76, 0x54, 0x3b, 0xbd, 0xa3, 0x7a, 0x0b, 0xae, 0xf4, 0xa7, - 0x2f, 0x96, 0xb0, 0x7b, 0x30, 0xea, 0x23, 0x44, 0x28, 0xe6, 0xcd, 0x41, 0xa6, 0x72, 0x37, 0x39, - 0x41, 0x44, 0x7f, 0x11, 0xf4, 0xd3, 0xb1, 0xa2, 0x40, 0xdb, 0x9f, 0x81, 0x17, 0x12, 0xb1, 0x04, - 0x6f, 0x3b, 0x30, 0xc6, 0xc9, 0xca, 0xb5, 0xf5, 0xc9, 0x98, 0x93, 0xa6, 0x5d, 0xd0, 0xd2, 0x7f, - 0x57, 0x83, 0x99, 0x5e, 0xd8, 0x5d, 0x3a, 0x78, 0xaa, 0xf0, 0x47, 0x12, 0xb4, 0xec, 0x16, 0x8c, - 0x57, 0xe5, 0x64, 0x96, 0xaf, 0x98, 0x0c, 0xac, 0x25, 0x51, 0xcd, 0x25, 0x99, 0xf4, 0xfd, 0x21, - 0x5c, 0xe8, 0xdd, 0x33, 0xae, 0x1f, 0xef, 0x24, 0xe8, 0x34, 0xef, 0xc8, 0x29, 0xda, 0xac, 0x1f, - 0xc0, 0xc5, 0xde, 0x84, 0xa3, 0x77, 0x19, 0xf2, 0x0a, 0x3d, 0x61, 0x26, 0x17, 0x87, 0x1d, 0x00, - 0x95, 0x86, 0x7e, 0x03, 0x8a, 0x77, 0xbc, 0x5d, 0x19, 0xe3, 0x15, 0x61, 0xbb, 0x7e, 0x2e, 0xf9, - 0xff, 0xd4, 0xe0, 0x7c, 0x8f, 0x5a, 0x9f, 0xc3, 0x0e, 0xf5, 0x6b, 0x30, 0xee, 0x37, 0x5d, 0xd7, - 0x76, 0x6b, 0x95, 0xc7, 0xde, 0xae, 0x3c, 0x15, 0x48, 0xca, 0x1c, 0x3d, 0x95, 0x4f, 0x2c, 0xc9, - 0x0b, 0x6a, 0x77, 0xbc, 0xdd, 0xa0, 0x34, 0x0b, 0xa9, 0x3b, 0xde, 0x6e, 0xa7, 0xca, 0xe9, 0x57, - 0xa1, 0x70, 0xc7, 0xdb, 0x8d, 0x8b, 0x66, 0x16, 0x46, 0x1f, 0x7b, 0xbb, 0xed, 0x11, 0xcd, 0x3c, - 0xf6, 0x76, 0xd7, 0x2d, 0x7d, 0x0d, 0xce, 0x2a, 0xa8, 0x42, 0x1e, 0xaf, 0x43, 0xea, 0xb1, 0xb7, - 0x2b, 0xe6, 0xf2, 0x7c, 0xc7, 0x22, 0x83, 0xef, 0x2d, 0xf3, 0xb7, 0x97, 0x91, 0x21, 0x86, 0xaa, - 0x7b, 0x30, 0x83, 0x5e, 0xe1, 0xd6, 0xc3, 0x8d, 0xe1, 0x43, 0x8b, 0xd7, 0x61, 0x16, 0x3d, 0xd1, - 0x4a, 0x83, 0xfa, 0x81, 0x8d, 0x86, 0xb1, 0xbd, 0xaa, 0x66, 0x8d, 0x69, 0x2c, 0x7c, 0x20, 0xcb, - 0x78, 0xbc, 0xec, 0x1c, 0xcc, 0x76, 0x34, 0xc8, 0x79, 0xd7, 0x97, 0xe1, 0xc2, 0xba, 0x6b, 0xd1, - 0x23, 0x7c, 0xf7, 0xb4, 0xbd, 0xf8, 0x0d, 0x75, 0xf6, 0xe8, 0xc3, 0xc5, 0xde, 0x34, 0x84, 0x7c, - 0xc4, 0x5a, 0xcc, 0xa1, 0xbd, 0x1e, 0x97, 0x54, 0xd7, 0xe2, 0x5e, 0x94, 0x54, 0x9f, 0x9c, 0x43, - 0xae, 0x5d, 0x01, 0x68, 0x5f, 0xa3, 0x20, 0x33, 0x50, 0x88, 0x92, 0xe8, 0x2b, 0x5b, 0xdb, 0x4b, - 0x2b, 0x77, 0xb7, 0x0a, 0x67, 0xf4, 0x74, 0x56, 0x2b, 0x68, 0xd7, 0x5e, 0x84, 0xac, 0xbc, 0x96, - 0xa0, 0xe4, 0xdf, 0x4f, 0x02, 0x44, 0x35, 0xb6, 0x0a, 0xda, 0xf5, 0xbf, 0xf6, 0x66, 0x14, 0xc1, - 0xfe, 0xbe, 0x06, 0xe3, 0xea, 0x53, 0xad, 0xa4, 0x3c, 0xd8, 0x63, 0xac, 0x52, 0x68, 0xa5, 0xc5, - 0x81, 0xf1, 0xc5, 0x20, 0xbc, 0xfc, 0xad, 0x7f, 0xfb, 0x5f, 0xfe, 0xca, 0xc8, 0xf3, 0x64, 0x61, - 0x51, 0xec, 0x46, 0x17, 0xd5, 0x97, 0x5c, 0x17, 0x3f, 0x11, 0x43, 0xf0, 0x29, 0xf9, 0xf3, 0x1a, - 0x8c, 0xc9, 0x5d, 0x72, 0x52, 0xf6, 0x72, 0xfc, 0xe1, 0xd7, 0xd2, 0xb5, 0x41, 0x50, 0x05, 0x2f, - 0x3a, 0xf2, 0x72, 0x91, 0x94, 0x22, 0x5e, 0xc4, 0xed, 0x27, 0x85, 0x8d, 0x5d, 0x18, 0x13, 0x2f, - 0xb0, 0x24, 0x72, 0x11, 0x7f, 0x88, 0x26, 0x91, 0x8b, 0x8e, 0x07, 0x5d, 0xf4, 0x33, 0xc4, 0x87, - 0x0c, 0x3e, 0x33, 0x49, 0x5e, 0xee, 0xff, 0x10, 0x25, 0xa7, 0x7f, 0x65, 0xd0, 0x17, 0x2b, 0xf5, - 0x39, 0xec, 0x63, 0x81, 0x4c, 0x46, 0x7d, 0xe4, 0x2f, 0x62, 0x7e, 0x03, 0xd2, 0x78, 0x27, 0xe2, - 0x72, 0xdf, 0x87, 0x78, 0x78, 0x8b, 0x43, 0xbd, 0x90, 0xaa, 0x5f, 0xc2, 0x56, 0x4b, 0xa4, 0x18, - 0x6f, 0x55, 0x91, 0xeb, 0x2f, 0xc2, 0x18, 0x32, 0xba, 0xb3, 0x3e, 0x78, 0xaf, 0x5f, 0x1f, 0xf6, - 0x9d, 0x4e, 0xfd, 0x3c, 0xf2, 0x31, 0x4d, 0xce, 0xc6, 0xf9, 0xa8, 0x34, 0x6d, 0xf2, 0x0d, 0xc0, - 0xb9, 0xbd, 0xb3, 0x3e, 0xb0, 0x08, 0x06, 0x7d, 0x7a, 0x54, 0x7f, 0x01, 0x5b, 0x7d, 0x8e, 0x5c, - 0xe8, 0x6a, 0x55, 0x11, 0xc0, 0xa7, 0xfc, 0x31, 0x1e, 0xbc, 0x08, 0x40, 0x5e, 0x19, 0xec, 0xba, - 0xc0, 0xe9, 0x43, 0x71, 0xea, 0xdd, 0x02, 0x7d, 0x16, 0x99, 0x99, 0x22, 0x13, 0x11, 0x33, 0xbe, - 0xb9, 0x17, 0x92, 0x6f, 0x6a, 0x30, 0xca, 0x8f, 0x78, 0x49, 0xdf, 0x87, 0x18, 0xa2, 0x01, 0xb8, - 0x3a, 0x00, 0xa6, 0x68, 0xf6, 0x79, 0x6c, 0xf6, 0x02, 0x39, 0xaf, 0x34, 0xcb, 0x10, 0x14, 0x09, - 0x04, 0x30, 0xca, 0x2f, 0x71, 0x27, 0x72, 0x10, 0xbb, 0xe7, 0x5d, 0x52, 0xef, 0xca, 0x89, 0x87, - 0xff, 0xd7, 0xdd, 0x3d, 0x4f, 0xa8, 0x5d, 0x77, 0xa3, 0xe2, 0x6f, 0x04, 0xb4, 0x1b, 0xfd, 0xab, - 0x1a, 0xe4, 0x95, 0xdb, 0xc7, 0xe4, 0xb5, 0xc1, 0x6e, 0x29, 0xcb, 0xf6, 0xcb, 0x83, 0xa2, 0x0b, - 0x31, 0x5c, 0x46, 0x8e, 0x2e, 0x91, 0xf9, 0x88, 0x23, 0x9e, 0xf3, 0x81, 0xab, 0x98, 0xc2, 0xd6, - 0x77, 0x35, 0xc8, 0x45, 0xd7, 0x43, 0x13, 0xd5, 0xa1, 0xf3, 0x52, 0x6c, 0xa2, 0x3a, 0x74, 0xdd, - 0x58, 0xd5, 0xaf, 0x22, 0x43, 0x2f, 0x90, 0xe7, 0x23, 0x86, 0x4c, 0x89, 0x83, 0x5a, 0xaa, 0xf0, - 0xf4, 0x03, 0x0d, 0x26, 0xe3, 0xd7, 0x87, 0xc9, 0xeb, 0x03, 0xb5, 0xa5, 0xc4, 0x03, 0x4a, 0x6f, - 0x0c, 0x51, 0x43, 0xb0, 0xf8, 0x0a, 0xb2, 0xf8, 0x12, 0x79, 0xa1, 0x07, 0x8b, 0xa8, 0x44, 0x8b, - 0x9f, 0xc8, 0x93, 0xfd, 0x4f, 0xc9, 0x2f, 0x6b, 0x30, 0xae, 0xa6, 0x9e, 0x26, 0xae, 0x60, 0x3d, - 0x72, 0xcd, 0x13, 0x57, 0xb0, 0x5e, 0xa9, 0xb5, 0x3d, 0x6c, 0x4a, 0x94, 0x2f, 0xfb, 0x3d, 0x91, - 0x42, 0x89, 0xcf, 0x85, 0x7e, 0x7e, 0x1c, 0x2d, 0x20, 0x47, 0xe7, 0xc9, 0xb9, 0x88, 0x23, 0x7c, - 0x98, 0xb4, 0x12, 0xf1, 0xf5, 0x7d, 0x0d, 0xf2, 0x4a, 0x26, 0x6c, 0xa2, 0xd2, 0x77, 0x27, 0xe9, - 0x26, 0x2a, 0x7d, 0x8f, 0x04, 0x5b, 0xfd, 0x1a, 0xf2, 0xf3, 0xa2, 0xae, 0xac, 0xf1, 0x88, 0xc5, - 0xb3, 0xae, 0xdb, 0x1a, 0xf6, 0x9e, 0x76, 0x8d, 0xfc, 0x75, 0x0d, 0x0a, 0x9c, 0x06, 0x0a, 0xed, - 0x73, 0xe1, 0x4f, 0x4c, 0x4a, 0xfd, 0x42, 0x27, 0x7f, 0x5c, 0x6c, 0xc8, 0x25, 0xe3, 0xed, 0xef, - 0x8a, 0xec, 0xea, 0xce, 0x2c, 0x54, 0xf2, 0x56, 0x9f, 0x11, 0x3a, 0x25, 0xc5, 0xb6, 0xf4, 0xf6, - 0xd0, 0xf5, 0x4e, 0xf5, 0x54, 0xda, 0x09, 0xae, 0x15, 0x91, 0xc4, 0xfa, 0x0f, 0x35, 0x38, 0x1f, - 0x29, 0xdf, 0xcf, 0x9e, 0xe5, 0x2b, 0xc8, 0xb2, 0x4e, 0x2e, 0x75, 0x28, 0x65, 0x37, 0xe3, 0x7f, - 0x43, 0x83, 0x42, 0x67, 0xb6, 0x24, 0xb9, 0xde, 0xa7, 0xdd, 0x1e, 0xf9, 0xb5, 0xa5, 0x1b, 0x43, - 0xd5, 0x11, 0x7c, 0xce, 0x23, 0x9f, 0x45, 0x32, 0xd7, 0x76, 0x02, 0xed, 0x20, 0x0c, 0x0e, 0x9c, - 0x0a, 0xcf, 0xb1, 0xfc, 0x2d, 0x7c, 0x71, 0x5b, 0x88, 0xf5, 0x67, 0xc3, 0xe2, 0x8b, 0xc8, 0xe2, - 0x3c, 0xb9, 0xd8, 0x21, 0xca, 0x38, 0xa3, 0xbf, 0xa9, 0xc1, 0x44, 0x2c, 0x55, 0x9c, 0x2c, 0xf6, - 0x9d, 0x17, 0xf1, 0x7c, 0xf6, 0x44, 0x07, 0xab, 0x67, 0x16, 0xba, 0xfe, 0x2a, 0xb2, 0x76, 0x59, - 0x7f, 0xbe, 0x73, 0x2a, 0x09, 0xdb, 0x13, 0x9f, 0xec, 0x7f, 0x47, 0x93, 0x97, 0x00, 0x54, 0x0b, - 0xf9, 0x79, 0xf0, 0x29, 0xb4, 0x51, 0x7f, 0xae, 0xf7, 0x94, 0x17, 0xdc, 0x32, 0x1e, 0xbf, 0xa9, - 0x41, 0x2e, 0xca, 0x14, 0x4d, 0x5c, 0x89, 0x3b, 0xb3, 0x65, 0x13, 0x57, 0xe2, 0xae, 0xe4, 0x53, - 0xbd, 0x88, 0x2c, 0x11, 0xbd, 0xed, 0x98, 0x05, 0x0d, 0x13, 0x59, 0xf8, 0x06, 0xee, 0xcf, 0xaa, - 0xfb, 0xc9, 0xae, 0x59, 0xec, 0xae, 0x7e, 0xa2, 0x73, 0xaa, 0xbe, 0x2d, 0xd1, 0xc3, 0x47, 0x0a, - 0x90, 0x90, 0xb2, 0xf0, 0xff, 0x59, 0x0d, 0xc6, 0xc4, 0x95, 0xf0, 0xc4, 0x4d, 0x4f, 0xfc, 0xda, - 0xf8, 0xe0, 0x2c, 0x74, 0x5b, 0xb3, 0x06, 0xa7, 0xd4, 0xc1, 0x83, 0xb8, 0xe9, 0x9d, 0xc8, 0x43, - 0xfc, 0x36, 0xf8, 0xd3, 0xf0, 0x20, 0x9e, 0xe5, 0x55, 0x78, 0xf8, 0x0b, 0x1a, 0x64, 0xe5, 0xc5, - 0x7d, 0x92, 0xb4, 0xa5, 0xeb, 0x78, 0x7b, 0xa0, 0xf4, 0xca, 0x40, 0xb8, 0x82, 0x93, 0xee, 0xbd, - 0x12, 0xc6, 0x4d, 0xe3, 0x3e, 0xeb, 0xb8, 0xfa, 0x90, 0x44, 0xb2, 0x47, 0xd1, 0xfd, 0x42, 0x45, - 0xb2, 0x47, 0xd1, 0xe3, 0x85, 0x8a, 0x1e, 0x3b, 0x18, 0xc7, 0xab, 0x75, 0xb2, 0xf5, 0x6b, 0x1a, - 0x8c, 0x89, 0xda, 0x89, 0x43, 0x14, 0x7f, 0xb1, 0xa2, 0xf4, 0x5a, 0x32, 0x6a, 0xc7, 0x7b, 0x1d, - 0xd2, 0x99, 0x20, 0x7a, 0x02, 0x2b, 0x8b, 0x9f, 0x30, 0xc0, 0xa7, 0x6c, 0x53, 0xbb, 0xe1, 0xd5, - 0x82, 0xc4, 0x1d, 0x9d, 0xf2, 0xa8, 0xc9, 0xb0, 0xac, 0xf4, 0xf2, 0xb3, 0x6a, 0xaa, 0x44, 0x7e, - 0x43, 0xc3, 0xb7, 0x39, 0xdb, 0xa9, 0x70, 0x89, 0xa6, 0xad, 0x57, 0x56, 0x77, 0xa2, 0x69, 0xeb, - 0x99, 0x65, 0xd7, 0x63, 0x01, 0x13, 0x69, 0xcc, 0xe2, 0x2a, 0xf8, 0xb7, 0x34, 0xc8, 0x45, 0xf9, - 0x3c, 0x89, 0x06, 0xad, 0x33, 0x1d, 0x2f, 0xd1, 0xa0, 0x75, 0xa5, 0x08, 0xe9, 0x25, 0x64, 0x64, - 0x86, 0x90, 0x88, 0x91, 0x47, 0x5e, 0x28, 0x98, 0xf8, 0x14, 0x32, 0x7c, 0x07, 0xf1, 0x72, 0xff, - 0x14, 0x8d, 0xfe, 0x47, 0x1c, 0xf1, 0xfd, 0xc2, 0x29, 0x5b, 0x4d, 0x75, 0x97, 0xf0, 0x03, 0x0d, - 0xf2, 0xea, 0x49, 0x7c, 0xf2, 0xa5, 0x8b, 0xce, 0x53, 0xf0, 0xd2, 0x17, 0xbb, 0xd1, 0xd5, 0x3f, - 0xe4, 0x16, 0xfb, 0x13, 0x6f, 0x4a, 0x7d, 0x1e, 0x1e, 0xe8, 0xb1, 0x07, 0x54, 0xff, 0x3e, 0x5c, - 0x5b, 0x7b, 0xd8, 0x96, 0x9c, 0x67, 0x3a, 0xf4, 0xb1, 0xfb, 0x4a, 0xaa, 0x49, 0xe2, 0x96, 0x3c, - 0x9e, 0x36, 0xd1, 0xd3, 0xf2, 0x33, 0x04, 0x85, 0x85, 0xbf, 0xa8, 0xe1, 0x59, 0xa3, 0xcc, 0x06, - 0x78, 0x75, 0xc0, 0xb8, 0x6b, 0xff, 0xd9, 0xd4, 0x1d, 0xa5, 0xd5, 0x2f, 0x20, 0x3b, 0xb3, 0x64, - 0x5a, 0x5d, 0x88, 0x64, 0xcb, 0x3f, 0xd0, 0x60, 0xae, 0x2b, 0x48, 0xc8, 0x97, 0xe4, 0xa4, 0xbc, - 0xb5, 0xe4, 0xb8, 0xe2, 0xb0, 0x1c, 0x76, 0xcf, 0x2c, 0x99, 0xe4, 0x11, 0x84, 0xf5, 0x30, 0x20, - 0x3f, 0xd2, 0xe0, 0x52, 0xbf, 0x40, 0x18, 0x59, 0x4e, 0x62, 0x77, 0xb0, 0x28, 0x5d, 0x69, 0xe5, - 0xa9, 0x68, 0xc4, 0x6d, 0xba, 0x5e, 0x54, 0xe4, 0x5d, 0x0f, 0x99, 0x2a, 0x8a, 0xc0, 0x15, 0x73, - 0x3d, 0xfe, 0x99, 0x76, 0x5a, 0xd8, 0x06, 0x39, 0x09, 0xc8, 0x97, 0x9e, 0x28, 0x44, 0x16, 0x8d, - 0xc0, 0xfb, 0x4f, 0x5a, 0xfd, 0xd4, 0xc5, 0xb2, 0xa3, 0x13, 0xe4, 0x9f, 0x9c, 0x16, 0x7d, 0x7b, - 0x6b, 0xe8, 0xa6, 0xfb, 0xef, 0x80, 0x92, 0x22, 0x5c, 0xfa, 0x9b, 0xc8, 0x6b, 0x99, 0xbc, 0xda, - 0xc5, 0xeb, 0xe2, 0x27, 0xa7, 0x05, 0xd5, 0x3e, 0x25, 0xbf, 0xad, 0x61, 0xdc, 0x25, 0x1e, 0xe7, - 0x21, 0x37, 0x86, 0x8b, 0x0a, 0x71, 0xce, 0xdf, 0x7c, 0x92, 0x50, 0x52, 0x8f, 0x13, 0xfa, 0xc7, - 0xde, 0x6e, 0xc5, 0x17, 0xc8, 0x71, 0xf7, 0x28, 0x17, 0x45, 0x88, 0x12, 0x17, 0x96, 0xce, 0x90, - 0x53, 0xe2, 0xc2, 0xd2, 0x15, 0x74, 0xd2, 0x9f, 0x43, 0x8e, 0xce, 0x91, 0x59, 0x95, 0xa3, 0xc5, - 0x4f, 0x78, 0xd0, 0xea, 0x53, 0xf2, 0x3d, 0x0d, 0x9f, 0x46, 0x6b, 0x47, 0x7c, 0x12, 0x57, 0xdd, - 0x5e, 0xc1, 0xa8, 0xc4, 0x55, 0xb7, 0x77, 0x30, 0x49, 0x18, 0x53, 0xbd, 0x6d, 0x1b, 0x30, 0x16, - 0x15, 0x1c, 0x38, 0x78, 0xb4, 0xc7, 0xe6, 0xd2, 0xef, 0x69, 0x30, 0xd3, 0x2b, 0xc4, 0x93, 0xa8, - 0x89, 0x09, 0x11, 0xaa, 0x44, 0x4d, 0x4c, 0x8a, 0x4a, 0xe9, 0x2f, 0x21, 0xb3, 0x0b, 0xa4, 0xbd, - 0xfb, 0xc1, 0xbf, 0x6c, 0x8a, 0x7f, 0x18, 0xb0, 0x1d, 0x68, 0x5a, 0xbe, 0xf6, 0xc3, 0xff, 0x3c, - 0x7f, 0xe6, 0x87, 0x27, 0xf3, 0xda, 0x8f, 0x4e, 0xe6, 0xb5, 0x1f, 0x9f, 0xcc, 0x6b, 0xff, 0xe9, - 0x64, 0x5e, 0xfb, 0xf5, 0x9f, 0xcc, 0x9f, 0xf9, 0xd1, 0x4f, 0xe6, 0xcf, 0xfc, 0xf8, 0x27, 0xf3, - 0x67, 0x3e, 0xca, 0xca, 0xf6, 0x76, 0x47, 0x31, 0xd0, 0x7c, 0xe3, 0xff, 0x05, 0x00, 0x00, 0xff, - 0xff, 0x21, 0xd1, 0x43, 0x5e, 0xd1, 0x75, 0x00, 0x00, + 0xd2, 0x50, 0x77, 0x4a, 0xd1, 0x1f, 0xa6, 0x61, 0x6c, 0xfb, 0xc8, 0xc5, 0xed, 0xd9, 0x43, 0x18, + 0x11, 0x2a, 0x3c, 0xbe, 0xbc, 0xc4, 0x98, 0xf9, 0xf7, 0x83, 0xce, 0x4d, 0x9e, 0xf2, 0xdd, 0xb4, + 0xad, 0xf2, 0xce, 0xce, 0x3a, 0x1b, 0xf9, 0x91, 0xf5, 0x55, 0x63, 0xc4, 0xb6, 0xc8, 0x7b, 0xb8, + 0x35, 0xf1, 0x43, 0xc1, 0xe4, 0x60, 0xbb, 0x08, 0x5e, 0x85, 0x6d, 0xc2, 0xc3, 0x23, 0xb7, 0x62, + 0x89, 0x70, 0xb4, 0xed, 0xb9, 0xc2, 0x9f, 0x99, 0x0c, 0x8f, 0xdc, 0xd5, 0x36, 0x94, 0xbc, 0x05, + 0xe7, 0xdc, 0x66, 0x9d, 0x1f, 0x60, 0xd6, 0xd9, 0xba, 0x54, 0xa1, 0x47, 0xb4, 0xda, 0x94, 0x67, + 0xd4, 0x19, 0x63, 0xd6, 0x6d, 0xd6, 0xb7, 0xa2, 0xd2, 0x35, 0x51, 0x48, 0x16, 0x20, 0xcf, 0xea, + 0xf9, 0x94, 0x7b, 0x25, 0x78, 0xc6, 0x68, 0x80, 0xdb, 0xac, 0x1b, 0x1c, 0x42, 0xae, 0x40, 0x81, + 0x21, 0x98, 0xcd, 0xd0, 0x8b, 0xb0, 0xb8, 0x35, 0x9e, 0x74, 0x9b, 0xf5, 0xa5, 0x66, 0xe8, 0x49, + 0xcc, 0x2f, 0x43, 0xd6, 0xa2, 0xa6, 0xe5, 0xd8, 0x2e, 0x3f, 0xca, 0x1b, 0xb4, 0xab, 0x51, 0x2d, + 0x0c, 0x0e, 0xd6, 0x1b, 0x8e, 0x5d, 0xb5, 0x43, 0x71, 0x60, 0x1e, 0x7d, 0x33, 0x46, 0x4d, 0xe6, + 0xc2, 0x56, 0x76, 0x5b, 0x21, 0xe5, 0xc7, 0x78, 0x29, 0x03, 0x10, 0xb4, 0xcc, 0x20, 0xe4, 0x32, + 0x4c, 0xd5, 0xcd, 0xa3, 0x8a, 0x8a, 0x04, 0x88, 0x34, 0x51, 0x37, 0x8f, 0x96, 0xda, 0x78, 0x17, + 0x20, 0x87, 0x27, 0x5d, 0xb8, 0x04, 0xe7, 0x79, 0x2b, 0x0c, 0x80, 0x4b, 0xf0, 0x0b, 0x30, 0x61, + 0x07, 0xe2, 0xac, 0xd1, 0xae, 0x9a, 0x0e, 0xc6, 0x52, 0xb3, 0xc6, 0xb8, 0x1d, 0xdc, 0x8e, 0x60, + 0xb8, 0xdc, 0xfa, 0xb6, 0xe7, 0xdb, 0x61, 0x0b, 0x8f, 0xed, 0xd8, 0x72, 0x2b, 0xbe, 0xf5, 0x3f, + 0x4c, 0x41, 0x1e, 0xe3, 0x85, 0xf4, 0x61, 0x93, 0xfa, 0x2d, 0x32, 0x17, 0xe9, 0x53, 0x6e, 0x79, + 0x54, 0x51, 0x8a, 0xaf, 0xc1, 0x28, 0x1b, 0x58, 0xdb, 0x42, 0x51, 0x8d, 0x2f, 0xaf, 0x3e, 0x9d, + 0xae, 0x65, 0x98, 0xfe, 0xae, 0x1a, 0x99, 0xf0, 0xc8, 0x5d, 0xb7, 0xd8, 0x44, 0x09, 0x0e, 0xa4, + 0x53, 0xcc, 0x7e, 0xb6, 0x75, 0x30, 0x35, 0xbc, 0x0e, 0xbe, 0x04, 0x93, 0x76, 0x50, 0xb1, 0xec, + 0x40, 0xe4, 0xb4, 0xc8, 0xa8, 0xc7, 0x84, 0x1d, 0xac, 0xb6, 0x81, 0x64, 0x19, 0x32, 0x8d, 0x47, + 0x32, 0x90, 0x31, 0xd9, 0x33, 0xab, 0x35, 0xda, 0x8b, 0xb4, 0x05, 0x54, 0x7e, 0xc0, 0xea, 0x18, + 0xbc, 0x2a, 0x97, 0x6c, 0x14, 0x6d, 0xd3, 0xae, 0x8c, 0x28, 0x31, 0xb3, 0x2b, 0x50, 0x08, 0x0e, + 0x9c, 0x8a, 0xeb, 0x55, 0xaa, 0x9e, 0x1b, 0x84, 0x26, 0xf3, 0xc5, 0xb2, 0x7c, 0x2e, 0x04, 0x07, + 0xce, 0xa6, 0xb7, 0x22, 0xa1, 0x98, 0x52, 0x7d, 0xe0, 0x54, 0x82, 0x66, 0xbd, 0x6e, 0xfa, 0x2d, + 0x91, 0x08, 0x05, 0xc1, 0x81, 0xb3, 0xc5, 0x21, 0xfa, 0x4b, 0x90, 0xc1, 0x66, 0x99, 0x53, 0xf0, + 0xc0, 0x58, 0x7b, 0xb0, 0x64, 0xac, 0x6f, 0xde, 0x2a, 0x9c, 0x61, 0x9f, 0x6b, 0x5f, 0x5d, 0x5b, + 0x61, 0x3e, 0xc2, 0xad, 0x82, 0xa6, 0xbf, 0x01, 0xd3, 0xcc, 0x75, 0xde, 0xa2, 0x41, 0xa0, 0x04, + 0x7a, 0x19, 0x93, 0xcd, 0x80, 0xfa, 0x8a, 0x07, 0x19, 0x7d, 0xeb, 0xff, 0x37, 0x0d, 0x63, 0x02, + 0xff, 0x99, 0xae, 0xf8, 0x2a, 0x0f, 0x23, 0x71, 0x1e, 0xd8, 0x78, 0x55, 0x1d, 0x9b, 0xba, 0x61, + 0x94, 0xe8, 0xc5, 0x4d, 0xc6, 0x04, 0x87, 0xca, 0x7c, 0xb1, 0xab, 0x50, 0xc0, 0x20, 0x67, 0x15, + 0x6f, 0x7b, 0xf0, 0x9c, 0x31, 0xbe, 0x1d, 0x9a, 0x52, 0xe0, 0x22, 0x6f, 0x6c, 0x12, 0x13, 0x13, + 0x68, 0x45, 0x84, 0x7f, 0x44, 0x0e, 0xca, 0xe5, 0xc1, 0xc6, 0x58, 0x26, 0x8b, 0x98, 0x11, 0x88, + 0x99, 0x8b, 0x48, 0x25, 0x47, 0x87, 0x57, 0xc9, 0x6b, 0x70, 0xd6, 0x31, 0x83, 0xb0, 0xa2, 0x70, + 0xd5, 0x12, 0xca, 0x30, 0xc5, 0x0a, 0xba, 0x67, 0x60, 0x0e, 0x67, 0x99, 0x3a, 0x03, 0x3b, 0x0c, + 0x0a, 0x0c, 0x62, 0x50, 0xf2, 0xbd, 0x0c, 0xca, 0x12, 0x80, 0xe0, 0x23, 0x3c, 0x72, 0xd1, 0x60, + 0x24, 0xa7, 0x15, 0x8a, 0xa5, 0xc6, 0xc8, 0xf1, 0x5a, 0xdb, 0x47, 0x2e, 0x59, 0x86, 0xf9, 0xae, + 0xfe, 0xc4, 0x35, 0x9d, 0xdb, 0x99, 0x52, 0x47, 0xe7, 0x14, 0xad, 0xbf, 0x93, 0xce, 0x8e, 0x15, + 0xb2, 0xfa, 0x5f, 0xd2, 0xe0, 0xac, 0xaa, 0xb4, 0xdc, 0x99, 0x7b, 0x96, 0xaa, 0x78, 0xfa, 0x49, + 0xd7, 0xdf, 0xd5, 0x60, 0x26, 0x3e, 0x81, 0x84, 0xc7, 0xb2, 0x0a, 0xd9, 0x40, 0xc0, 0x84, 0xcb, + 0x92, 0x24, 0x2f, 0x51, 0x5d, 0x46, 0x62, 0x64, 0x4d, 0x72, 0xa7, 0xc3, 0xcd, 0x48, 0xb2, 0x38, + 0x5d, 0x22, 0x89, 0x7b, 0x1a, 0xfa, 0x01, 0x90, 0x15, 0xd3, 0xad, 0x52, 0x07, 0xc5, 0xda, 0x77, + 0x77, 0x73, 0x19, 0xb2, 0x7c, 0x8c, 0x6c, 0x1e, 0xeb, 0xcc, 0x2d, 0xe7, 0x99, 0xbb, 0x8b, 0x95, + 0x99, 0xdb, 0x8a, 0x85, 0x1d, 0xd3, 0x34, 0xd5, 0x61, 0x2a, 0x6e, 0xc1, 0x74, 0xac, 0x49, 0x21, + 0x1b, 0xb6, 0xd5, 0x44, 0x30, 0xb5, 0x44, 0x80, 0x3b, 0xfa, 0x6e, 0x9f, 0xba, 0x8c, 0x28, 0xa7, + 0x2e, 0x7a, 0x0b, 0x66, 0x38, 0x21, 0xd1, 0xc1, 0xbe, 0xdc, 0xbf, 0x0a, 0x20, 0x84, 0x28, 0xf9, + 0x1f, 0xe7, 0xd9, 0x17, 0x82, 0xc0, 0xfa, 0xaa, 0x91, 0x13, 0x08, 0x7d, 0xfa, 0xb0, 0x0e, 0xb3, + 0x1d, 0x4d, 0x3f, 0x71, 0x2f, 0x9e, 0x83, 0x0b, 0x6c, 0x90, 0x56, 0xa2, 0xab, 0x85, 0x78, 0x04, + 0x19, 0x65, 0xd7, 0x48, 0xbd, 0x8e, 0x52, 0x7d, 0x7e, 0x86, 0x7a, 0xfd, 0x8f, 0x35, 0xb8, 0xd8, + 0x9b, 0x57, 0xd1, 0xfb, 0x8d, 0xe8, 0xb8, 0x95, 0x1f, 0x1c, 0xc7, 0xb6, 0xbf, 0x07, 0x4e, 0x59, + 0xbd, 0x4c, 0x59, 0xde, 0xa2, 0xbe, 0x6d, 0x3a, 0xf6, 0xd7, 0xa9, 0x65, 0xd0, 0x1a, 0x5b, 0x4f, + 0x5b, 0x91, 0x6e, 0x22, 0x8d, 0xa1, 0xf5, 0x3c, 0x26, 0xa2, 0x0e, 0x3d, 0x3f, 0x0f, 0xe7, 0x18, + 0x0a, 0x5b, 0xb7, 0xb7, 0x1e, 0x6e, 0x7c, 0xe0, 0x78, 0x1f, 0x47, 0x12, 0xfe, 0xaf, 0x29, 0x20, + 0x02, 0x6e, 0xd0, 0xba, 0x17, 0x52, 0x2c, 0x25, 0x7b, 0x30, 0xb6, 0xe7, 0x78, 0x1f, 0x57, 0x22, + 0xaf, 0xf8, 0x9e, 0xf0, 0x54, 0xbe, 0x30, 0x90, 0x70, 0x3b, 0x2e, 0x86, 0x96, 0x19, 0x51, 0xf4, + 0x58, 0x46, 0xf9, 0x2f, 0x63, 0x94, 0x51, 0x5f, 0xb7, 0xc8, 0x26, 0x64, 0x6c, 0x77, 0xcf, 0x93, + 0x9d, 0x4c, 0xca, 0xb2, 0xe9, 0xe6, 0x52, 0x4d, 0xb9, 0xe4, 0x64, 0x4a, 0xff, 0x47, 0x83, 0x34, + 0x7a, 0xf4, 0xcf, 0x52, 0x47, 0x96, 0x21, 0x17, 0xdd, 0xa7, 0x1c, 0xca, 0xbd, 0x6f, 0x57, 0x63, + 0xca, 0x22, 0x42, 0xc0, 0x3c, 0x86, 0xf2, 0xe6, 0x70, 0x3d, 0x17, 0xdb, 0x19, 0x41, 0x43, 0x7f, + 0x1e, 0x46, 0xc5, 0x96, 0x3c, 0x0f, 0x63, 0xc6, 0xce, 0xe6, 0x26, 0xf7, 0x6c, 0x00, 0x46, 0x1f, + 0xee, 0xac, 0xed, 0xac, 0xad, 0x16, 0x34, 0xfd, 0xf7, 0x35, 0x28, 0x76, 0x2b, 0x81, 0x50, 0xdd, + 0x75, 0xc8, 0xb0, 0x01, 0x19, 0xe4, 0x7e, 0x5c, 0x37, 0x33, 0xd1, 0x79, 0x21, 0x6a, 0xce, 0x67, + 0xa9, 0xb7, 0xff, 0x41, 0x83, 0xc2, 0x56, 0xc3, 0x74, 0x63, 0x31, 0xa2, 0x17, 0x3a, 0x0c, 0xdc, + 0x32, 0xb4, 0x47, 0x36, 0x1a, 0x22, 0x43, 0xcd, 0x32, 0xe1, 0xb6, 0xee, 0xe6, 0x4f, 0x8f, 0x17, + 0xde, 0x18, 0x6e, 0x87, 0x7b, 0x97, 0xb6, 0x94, 0xe4, 0x94, 0xcd, 0x76, 0x72, 0x4a, 0xea, 0x69, + 0x28, 0x8a, 0x9c, 0x16, 0x66, 0x50, 0xce, 0x2a, 0xbd, 0x13, 0x43, 0xb1, 0x00, 0x79, 0x7e, 0xa0, + 0x50, 0xf5, 0x9a, 0x6e, 0x28, 0x0e, 0xd5, 0x01, 0x41, 0x2b, 0x0c, 0x42, 0xde, 0x84, 0x39, 0xb3, + 0xd1, 0xf0, 0xbd, 0x23, 0xbb, 0x6e, 0x86, 0x94, 0x79, 0xe8, 0xfb, 0xc2, 0x4f, 0xe1, 0x19, 0x6f, + 0x33, 0x4a, 0xe9, 0xaa, 0x1d, 0xec, 0x73, 0x77, 0x65, 0x03, 0xf2, 0x22, 0xb3, 0x54, 0xc4, 0xcb, + 0xba, 0x72, 0x66, 0x3a, 0x03, 0x77, 0xf7, 0xbe, 0xb2, 0xb2, 0x82, 0xac, 0xc9, 0x2b, 0x74, 0x3c, + 0xfd, 0x14, 0xe3, 0x65, 0x5f, 0x80, 0x19, 0x91, 0x2a, 0x11, 0x0f, 0xfb, 0x0e, 0x32, 0x36, 0xfa, + 0xf7, 0x27, 0x60, 0xb6, 0xa3, 0x76, 0x77, 0x88, 0x28, 0xfb, 0x59, 0x4f, 0xda, 0x3f, 0xd0, 0x60, + 0x5a, 0xa6, 0x73, 0xa8, 0xf7, 0xb1, 0x72, 0x7d, 0xef, 0x63, 0xf5, 0xe4, 0xb5, 0x1c, 0xa5, 0x8a, + 0xf4, 0xbe, 0x8f, 0xd5, 0x51, 0xfc, 0xe4, 0xf7, 0xb1, 0x1a, 0x1d, 0xed, 0x94, 0xfe, 0x4d, 0x8e, + 0xe7, 0xb8, 0x47, 0xf9, 0x71, 0x5d, 0x19, 0x35, 0x5a, 0x8f, 0x8c, 0x9a, 0x3f, 0xa7, 0xc1, 0xac, + 0x92, 0x32, 0x57, 0xe9, 0x8c, 0x5d, 0xdd, 0x3f, 0x39, 0x5e, 0x98, 0xde, 0x69, 0x23, 0x3c, 0xf5, + 0xf9, 0xd5, 0x74, 0xb3, 0x93, 0x98, 0x15, 0x90, 0xdf, 0xd5, 0xe0, 0xb2, 0x92, 0x6f, 0xd7, 0x95, + 0xae, 0xa7, 0xb0, 0x95, 0x42, 0xb6, 0x7e, 0xfe, 0xe4, 0x78, 0xe1, 0x52, 0x3b, 0x19, 0x2f, 0x9e, + 0xc0, 0xf7, 0xd4, 0x3c, 0x5e, 0xf2, 0x13, 0x29, 0x5b, 0x01, 0xf9, 0xb6, 0x06, 0xc5, 0x78, 0x8e, + 0xa0, 0xc2, 0x62, 0x1a, 0x59, 0x7c, 0x70, 0x72, 0xbc, 0x30, 0xb3, 0xa9, 0x64, 0x0c, 0x3e, 0x35, + 0x5b, 0x33, 0x6e, 0x17, 0x35, 0x2b, 0x20, 0x47, 0x40, 0x64, 0xd6, 0xa0, 0xc2, 0x43, 0x06, 0x79, + 0xb8, 0x7b, 0x72, 0xbc, 0x30, 0xb5, 0xc9, 0x73, 0x08, 0x9f, 0xba, 0xf9, 0x29, 0x57, 0x25, 0x64, + 0x05, 0xe4, 0xd7, 0x34, 0x38, 0xdf, 0x91, 0xeb, 0xa8, 0x70, 0x30, 0x8a, 0x1c, 0x6c, 0x9d, 0x1c, + 0x2f, 0x9c, 0xdb, 0x89, 0x23, 0x3d, 0x35, 0x27, 0xe7, 0x9a, 0xbd, 0x08, 0x5a, 0x01, 0xf9, 0x55, + 0x0d, 0x8a, 0xf1, 0xa4, 0x4a, 0x85, 0xa1, 0x1c, 0x32, 0x64, 0x9c, 0x1c, 0x2f, 0xcc, 0xdd, 0x3f, + 0xfc, 0x4c, 0xf9, 0x99, 0xf3, 0x0e, 0x7b, 0xb2, 0xf3, 0x5b, 0x1a, 0xe8, 0xa7, 0xa5, 0x6d, 0x2a, + 0x8c, 0x8d, 0x21, 0x63, 0x1f, 0x9d, 0x1c, 0x2f, 0xcc, 0x3f, 0xec, 0x99, 0xc4, 0xf9, 0xd4, 0x0c, + 0xce, 0x1f, 0x24, 0xd0, 0xb5, 0x02, 0xf2, 0x1b, 0x1a, 0x5c, 0xec, 0xce, 0x12, 0x55, 0x58, 0xcc, + 0xb6, 0x07, 0xd3, 0x88, 0xe7, 0x8c, 0x3e, 0xfd, 0x60, 0xfa, 0xbd, 0x08, 0x5a, 0x01, 0x5e, 0x30, + 0xed, 0x69, 0x4d, 0xfb, 0x5d, 0x30, 0xcd, 0x27, 0xbe, 0x28, 0xd1, 0xdb, 0x6c, 0xab, 0x96, 0x53, + 0x39, 0x0d, 0xbe, 0x93, 0xce, 0x6a, 0x85, 0xac, 0xfe, 0x36, 0x14, 0x6e, 0x7b, 0xe1, 0x13, 0xac, + 0x69, 0xbf, 0x3c, 0x06, 0x67, 0x95, 0x9a, 0x9f, 0xc3, 0x7d, 0xfc, 0x7f, 0xa5, 0xc1, 0xec, 0x23, + 0x2f, 0xe4, 0x63, 0xd7, 0xe3, 0x86, 0xf1, 0x4a, 0x82, 0x68, 0xba, 0x38, 0x6d, 0x43, 0xe2, 0xcb, + 0xd9, 0x03, 0xb1, 0x9c, 0x9d, 0xed, 0x2c, 0x7f, 0xe2, 0xf5, 0xec, 0xec, 0xa3, 0xce, 0x96, 0x4a, + 0x87, 0x90, 0x95, 0xe4, 0xc9, 0x17, 0x63, 0xf7, 0xb5, 0x7a, 0xdd, 0x8b, 0x44, 0xbc, 0x53, 0x2e, + 0x6a, 0xf5, 0xce, 0x61, 0x1e, 0xe9, 0x9d, 0xc3, 0x5c, 0xfa, 0xd7, 0x1a, 0x4c, 0x60, 0x22, 0x55, + 0x34, 0x5e, 0xcf, 0x3a, 0x4b, 0xeb, 0x23, 0x80, 0xf6, 0x90, 0x89, 0x71, 0xba, 0xf9, 0x44, 0xe3, + 0x14, 0x5d, 0x7b, 0x90, 0x18, 0xa5, 0x5f, 0xd2, 0x3a, 0xae, 0xbe, 0x0d, 0xe4, 0x16, 0x18, 0x6c, + 0x1b, 0xe2, 0xf9, 0x11, 0x37, 0xef, 0x0d, 0xc5, 0x4d, 0x4c, 0x7a, 0x86, 0xa0, 0x54, 0xfa, 0x45, + 0x98, 0xeb, 0xad, 0x4e, 0x3d, 0xe6, 0xf3, 0xfd, 0xf8, 0x7c, 0x7e, 0x77, 0xa8, 0xe6, 0xd5, 0xee, + 0xaa, 0x91, 0x9d, 0xab, 0x30, 0x3e, 0x68, 0xbe, 0xd2, 0x6f, 0x67, 0x44, 0xe6, 0xe2, 0xe7, 0x32, + 0x67, 0xd5, 0x78, 0xe9, 0xc8, 0x33, 0x88, 0x97, 0xfe, 0x4b, 0x0d, 0x66, 0x7c, 0xd1, 0x91, 0x98, + 0x49, 0xe0, 0x61, 0xcf, 0x9f, 0xeb, 0x17, 0x21, 0x56, 0x6e, 0xfc, 0x08, 0x22, 0xa7, 0x98, 0x83, + 0xce, 0xf2, 0x27, 0x37, 0x07, 0x7e, 0x67, 0x4b, 0xa5, 0xef, 0x76, 0x2a, 0x72, 0x09, 0xb2, 0x12, + 0x4b, 0x9e, 0x2a, 0xf9, 0xa7, 0x2a, 0x79, 0xaf, 0xd7, 0x80, 0xbe, 0x2c, 0x0f, 0x19, 0x52, 0x43, + 0x67, 0x7f, 0x8a, 0x63, 0x85, 0x4f, 0x60, 0xae, 0xb7, 0x48, 0x7a, 0xa8, 0xf4, 0xdd, 0xb8, 0x4a, + 0xdf, 0x1c, 0x58, 0xe8, 0xa7, 0xa8, 0xb3, 0x48, 0x95, 0x79, 0x0d, 0xc8, 0x6a, 0xfb, 0x25, 0xaf, + 0xbe, 0xa9, 0x08, 0x57, 0x84, 0x6d, 0xeb, 0x8f, 0xf9, 0xfb, 0x23, 0x30, 0x2e, 0xae, 0xf7, 0xf2, + 0x47, 0x9b, 0x9e, 0xb5, 0x15, 0x7c, 0x05, 0xce, 0x52, 0xb7, 0xea, 0xb7, 0x30, 0x84, 0x29, 0x13, + 0xe1, 0x71, 0x8f, 0x6e, 0x14, 0xda, 0x05, 0xe2, 0x3c, 0x63, 0x41, 0xee, 0x5b, 0x79, 0xea, 0x0a, + 0xdf, 0xe2, 0xf2, 0xad, 0x28, 0x66, 0xb7, 0xb4, 0x11, 0xf8, 0x1e, 0x38, 0xad, 0x20, 0xf0, 0x9d, + 0xef, 0x15, 0x28, 0x88, 0x03, 0xf6, 0x7d, 0xda, 0x12, 0x64, 0xf8, 0x3d, 0x27, 0x11, 0xde, 0xb8, + 0x4b, 0x5b, 0x9c, 0x54, 0x1c, 0x93, 0xd3, 0x1b, 0xed, 0xc0, 0x44, 0x9a, 0xfa, 0x87, 0x30, 0x29, + 0xa5, 0x1b, 0xa5, 0xe5, 0x49, 0x43, 0xda, 0xff, 0xd1, 0x10, 0x55, 0xda, 0xf2, 0xc4, 0x83, 0x57, + 0xd6, 0xbf, 0xad, 0xc1, 0xd9, 0x76, 0xbc, 0x76, 0xa8, 0x23, 0x0f, 0xcc, 0x56, 0xaa, 0xef, 0xda, + 0x2e, 0xb5, 0x64, 0x8e, 0x91, 0xfc, 0x26, 0x25, 0x35, 0x10, 0x98, 0xc2, 0x36, 0xa3, 0xa8, 0xca, + 0x1c, 0xa4, 0xa8, 0xcb, 0xa3, 0x7b, 0xb2, 0x84, 0x01, 0xf4, 0xff, 0x91, 0x03, 0xa2, 0xb2, 0x22, + 0x3a, 0xda, 0xc0, 0x34, 0x3b, 0x01, 0x15, 0x9d, 0xbd, 0x93, 0x9c, 0x8e, 0xd5, 0x41, 0xa2, 0xbc, + 0xe2, 0x39, 0x0e, 0xad, 0x86, 0xd4, 0x8a, 0xca, 0xba, 0xae, 0x4b, 0x28, 0x6d, 0x90, 0x15, 0x00, + 0x0c, 0x93, 0xf8, 0x34, 0xa0, 0xc3, 0x85, 0x32, 0x73, 0xac, 0x9e, 0xc1, 0xaa, 0x91, 0xb7, 0xa1, + 0x28, 0x5f, 0xd1, 0xa8, 0x98, 0x8d, 0x06, 0x06, 0xbe, 0x2a, 0x0d, 0x9f, 0xee, 0xd9, 0x47, 0x22, + 0xfe, 0x35, 0x2b, 0xcb, 0x97, 0x1a, 0x8d, 0x4d, 0xb3, 0x4e, 0x1f, 0x60, 0x21, 0xf9, 0x06, 0x8c, + 0xe3, 0x7d, 0x3d, 0xa6, 0x01, 0x9e, 0x2b, 0x63, 0x60, 0xdb, 0xc3, 0xf5, 0x78, 0x4d, 0x3c, 0x81, + 0x15, 0xf5, 0x7c, 0xbb, 0x4d, 0xb2, 0xab, 0xef, 0xb1, 0xf6, 0x4a, 0xff, 0x6d, 0x04, 0xe6, 0x65, + 0xf5, 0x1e, 0xf2, 0xe2, 0x57, 0x0a, 0xb2, 0x4c, 0x61, 0xa3, 0xfc, 0xcd, 0x8e, 0x83, 0x9d, 0x03, + 0xa7, 0xdc, 0xbb, 0xa2, 0x4c, 0x36, 0xdc, 0xa7, 0xad, 0x55, 0x33, 0x34, 0xd5, 0xa5, 0x6f, 0xe4, + 0xb3, 0x5e, 0xfa, 0xd6, 0x61, 0xc2, 0xac, 0xd5, 0x7c, 0x5a, 0xc3, 0xcd, 0x5a, 0x18, 0x0c, 0x35, + 0x8e, 0xe3, 0xed, 0xaa, 0xdb, 0x01, 0xf9, 0x0a, 0xcc, 0xc8, 0x6f, 0x0c, 0x66, 0xb0, 0x61, 0x3b, + 0x14, 0x8f, 0xa5, 0xe4, 0xaf, 0x9f, 0xef, 0xa2, 0xb8, 0x2a, 0x9e, 0xb6, 0xe3, 0x04, 0xbf, 0xcf, + 0x08, 0x4e, 0x2b, 0x04, 0xd6, 0x45, 0xfd, 0xd2, 0xdf, 0x1a, 0x81, 0x8b, 0x49, 0xaa, 0x49, 0xac, + 0xb6, 0xad, 0xcf, 0x5f, 0xdf, 0x78, 0x32, 0x0d, 0x48, 0x1c, 0x09, 0x5c, 0x3f, 0xbe, 0x8a, 0x91, + 0x4b, 0x34, 0x74, 0xcb, 0xb7, 0x79, 0xe4, 0xf2, 0xa7, 0xc7, 0x0b, 0xef, 0x0f, 0x69, 0x73, 0xeb, + 0xe1, 0x07, 0xb6, 0x5b, 0xa3, 0x7e, 0xc3, 0xb7, 0xdd, 0x50, 0xc4, 0x3e, 0xdf, 0x97, 0xd9, 0xf2, + 0x23, 0xdd, 0xd1, 0xca, 0xde, 0x4a, 0x12, 0xcb, 0x92, 0x2f, 0xfd, 0x58, 0x83, 0xcb, 0x83, 0x69, + 0x32, 0x31, 0xb8, 0x95, 0x08, 0x54, 0xa5, 0x7c, 0xad, 0xa3, 0xbd, 0x81, 0x26, 0x43, 0x0e, 0xc9, + 0x3c, 0x6b, 0xf5, 0xd4, 0xb7, 0x61, 0x7e, 0x45, 0x18, 0xcb, 0xf6, 0xe0, 0xc5, 0x8e, 0x9d, 0x23, + 0x13, 0xaa, 0x9d, 0x6a, 0x42, 0x47, 0x3a, 0x4d, 0xe8, 0xb7, 0x47, 0xa0, 0x14, 0x91, 0x8b, 0xad, + 0xde, 0x0d, 0xcf, 0x0f, 0xc9, 0x64, 0x94, 0x25, 0x92, 0xc2, 0xf1, 0xb9, 0x08, 0xb9, 0xaa, 0x57, + 0x6f, 0x38, 0x34, 0x8c, 0x4c, 0x78, 0x1b, 0x40, 0x6e, 0xc0, 0x6c, 0x64, 0x14, 0x2b, 0x7b, 0xed, + 0xc1, 0x15, 0xe1, 0xb9, 0x99, 0xa8, 0x50, 0x19, 0x78, 0xf2, 0x3e, 0x14, 0xdb, 0x95, 0x94, 0x97, + 0x40, 0x99, 0x10, 0x55, 0x8b, 0x3f, 0x17, 0xf4, 0x60, 0x13, 0x33, 0xf0, 0xc6, 0x7d, 0x2e, 0x00, + 0xfe, 0x42, 0x45, 0x66, 0x88, 0x59, 0x9b, 0x8f, 0x6a, 0x2e, 0x85, 0xfa, 0x2f, 0xc0, 0xcb, 0x2b, + 0x3e, 0x35, 0x43, 0x7a, 0xba, 0x3c, 0xa4, 0xa4, 0x4f, 0xed, 0xa8, 0x76, 0x7a, 0x47, 0xf5, 0x16, + 0x5c, 0xe9, 0x4f, 0x5f, 0x2c, 0x61, 0xf7, 0x60, 0xd4, 0x47, 0x88, 0x50, 0xcc, 0x9b, 0x83, 0x4c, + 0xe5, 0x6e, 0x72, 0x82, 0x88, 0xfe, 0x22, 0xe8, 0xa7, 0x63, 0x45, 0x81, 0xb6, 0x3f, 0x03, 0x2f, + 0x24, 0x62, 0x09, 0xde, 0x76, 0x60, 0x8c, 0x93, 0x95, 0x6b, 0xeb, 0x93, 0x31, 0x27, 0x4d, 0xbb, + 0xa0, 0xa5, 0xff, 0x8e, 0x06, 0x33, 0xbd, 0xb0, 0xbb, 0x74, 0xf0, 0x54, 0xe1, 0x8f, 0x24, 0x68, + 0xd9, 0x2d, 0x18, 0xaf, 0xca, 0xc9, 0x2c, 0x9f, 0x39, 0x19, 0x58, 0x4b, 0xa2, 0x9a, 0x4b, 0x32, + 0x2b, 0xfc, 0x43, 0xb8, 0xd0, 0xbb, 0x67, 0x5c, 0x3f, 0xde, 0x49, 0xd0, 0x69, 0xde, 0x91, 0x53, + 0xb4, 0x59, 0x3f, 0x80, 0x8b, 0xbd, 0x09, 0x47, 0x0f, 0x37, 0xe4, 0x15, 0x7a, 0xc2, 0x4c, 0x2e, + 0x0e, 0x3b, 0x00, 0x2a, 0x0d, 0xfd, 0x06, 0x14, 0xef, 0x78, 0xbb, 0x32, 0xc6, 0x2b, 0xc2, 0x76, + 0xfd, 0x5c, 0xf2, 0xff, 0xa9, 0xc1, 0xf9, 0x1e, 0xb5, 0x3e, 0x87, 0x1d, 0xea, 0xd7, 0x60, 0xdc, + 0x6f, 0xba, 0xae, 0xed, 0xd6, 0x2a, 0x8f, 0xbd, 0x5d, 0x79, 0x2a, 0x90, 0x94, 0x5a, 0x7a, 0x2a, + 0x9f, 0x58, 0x92, 0x17, 0xd4, 0xee, 0x78, 0xbb, 0x41, 0x69, 0x16, 0x52, 0x77, 0xbc, 0xdd, 0x4e, + 0x95, 0xd3, 0xaf, 0x42, 0xe1, 0x8e, 0xb7, 0x1b, 0x17, 0xcd, 0x2c, 0x8c, 0x3e, 0xf6, 0x76, 0xdb, + 0x23, 0x9a, 0x79, 0xec, 0xed, 0xae, 0x5b, 0xfa, 0x1a, 0x9c, 0x55, 0x50, 0x85, 0x3c, 0x5e, 0x87, + 0xd4, 0x63, 0x6f, 0x57, 0xcc, 0xe5, 0xf9, 0x8e, 0x45, 0x06, 0x1f, 0x64, 0xe6, 0x8f, 0x33, 0x23, + 0x43, 0x0c, 0x55, 0xf7, 0x60, 0x06, 0xbd, 0xc2, 0xad, 0x87, 0x1b, 0xc3, 0x87, 0x16, 0xaf, 0xc3, + 0x2c, 0x7a, 0xa2, 0x95, 0x06, 0xf5, 0x03, 0x1b, 0x0d, 0x63, 0x7b, 0x55, 0xcd, 0x1a, 0xd3, 0x58, + 0xf8, 0x40, 0x96, 0xf1, 0x78, 0xd9, 0x39, 0x98, 0xed, 0x68, 0x90, 0xf3, 0xae, 0x2f, 0xc3, 0x85, + 0x75, 0xd7, 0xa2, 0x47, 0xf8, 0x30, 0x6a, 0x7b, 0xf1, 0x1b, 0xea, 0xec, 0xd1, 0x87, 0x8b, 0xbd, + 0x69, 0x08, 0xf9, 0x88, 0xb5, 0x98, 0x43, 0x7b, 0xbd, 0x3e, 0xa9, 0xae, 0xc5, 0xbd, 0x28, 0xa9, + 0x3e, 0x39, 0x87, 0x5c, 0xbb, 0x02, 0xd0, 0xbe, 0x67, 0x41, 0x66, 0xa0, 0x10, 0x65, 0xd9, 0x57, + 0xb6, 0xb6, 0x97, 0x56, 0xee, 0x6e, 0x15, 0xce, 0xe8, 0xe9, 0xac, 0x56, 0xd0, 0xae, 0xbd, 0x08, + 0x59, 0x79, 0x6f, 0x41, 0x49, 0xd0, 0x9f, 0x04, 0x88, 0x6a, 0x6c, 0x15, 0xb4, 0xeb, 0x7f, 0xed, + 0xcd, 0x28, 0x82, 0xfd, 0x7d, 0x0d, 0xc6, 0xd5, 0xb7, 0x5c, 0x49, 0x79, 0xb0, 0xd7, 0x5a, 0xa5, + 0xd0, 0x4a, 0x8b, 0x03, 0xe3, 0x8b, 0x41, 0x78, 0xf9, 0x5b, 0xff, 0xf6, 0xbf, 0xfc, 0x95, 0x91, + 0xe7, 0xc9, 0xc2, 0xa2, 0xd8, 0x8d, 0x2e, 0xaa, 0x4f, 0xbd, 0x2e, 0x7e, 0x22, 0x86, 0xe0, 0x53, + 0xf2, 0xe7, 0x35, 0x18, 0x93, 0xbb, 0xe4, 0xa4, 0xf4, 0xe6, 0xf8, 0xcb, 0xb0, 0xa5, 0x6b, 0x83, + 0xa0, 0x0a, 0x5e, 0x74, 0xe4, 0xe5, 0x22, 0x29, 0x45, 0xbc, 0x88, 0xeb, 0x51, 0x0a, 0x1b, 0xbb, + 0x30, 0x26, 0x9e, 0x68, 0x49, 0xe4, 0x22, 0xfe, 0x52, 0x4d, 0x22, 0x17, 0x1d, 0x2f, 0xbe, 0xe8, + 0x67, 0x88, 0x0f, 0x19, 0x7c, 0x87, 0x92, 0xbc, 0xdc, 0xff, 0xa5, 0x4a, 0x4e, 0xff, 0xca, 0xa0, + 0x4f, 0x5a, 0xea, 0x73, 0xd8, 0xc7, 0x02, 0x99, 0x8c, 0xfa, 0xc8, 0x9f, 0xcc, 0xfc, 0x06, 0xa4, + 0xf1, 0xd2, 0xc4, 0xe5, 0xbe, 0x2f, 0xf5, 0xf0, 0x16, 0x87, 0x7a, 0x42, 0x55, 0xbf, 0x84, 0xad, + 0x96, 0x48, 0x31, 0xde, 0xaa, 0x22, 0xd7, 0x5f, 0x84, 0x31, 0x64, 0x74, 0x67, 0x7d, 0xf0, 0x5e, + 0xbf, 0x3e, 0xec, 0x43, 0x9e, 0xfa, 0x79, 0xe4, 0x63, 0x9a, 0x9c, 0x8d, 0xf3, 0x51, 0x69, 0xda, + 0xe4, 0x1b, 0x80, 0x73, 0x7b, 0x67, 0x7d, 0x60, 0x11, 0x0c, 0xfa, 0x36, 0xa9, 0xfe, 0x02, 0xb6, + 0xfa, 0x1c, 0xb9, 0xd0, 0xd5, 0xaa, 0x22, 0x80, 0x4f, 0xf9, 0x6b, 0x3d, 0x78, 0x53, 0x80, 0xbc, + 0x32, 0xd8, 0x7d, 0x82, 0xd3, 0x87, 0xe2, 0xd4, 0xcb, 0x07, 0xfa, 0x2c, 0x32, 0x33, 0x45, 0x26, + 0x22, 0x66, 0x7c, 0x73, 0x2f, 0x24, 0xdf, 0xd4, 0x60, 0x94, 0x1f, 0xf1, 0x92, 0xbe, 0x2f, 0x35, + 0x44, 0x03, 0x70, 0x75, 0x00, 0x4c, 0xd1, 0xec, 0xf3, 0xd8, 0xec, 0x05, 0x72, 0x5e, 0x69, 0x96, + 0x21, 0x28, 0x12, 0x08, 0x60, 0x94, 0xdf, 0xf2, 0x4e, 0xe4, 0x20, 0x76, 0x11, 0xbc, 0xa4, 0x5e, + 0xa6, 0x13, 0x7f, 0x19, 0x60, 0xdd, 0xdd, 0xf3, 0x84, 0xda, 0x75, 0x37, 0x2a, 0xfe, 0x88, 0x40, + 0xbb, 0xd1, 0xbf, 0xaa, 0x41, 0x5e, 0xb9, 0x9e, 0x4c, 0x5e, 0x1b, 0xec, 0x1a, 0xb3, 0x6c, 0xbf, + 0x3c, 0x28, 0xba, 0x10, 0xc3, 0x65, 0xe4, 0xe8, 0x12, 0x99, 0x8f, 0x38, 0xe2, 0x39, 0x1f, 0xb8, + 0x8a, 0x29, 0x6c, 0x7d, 0x57, 0x83, 0x5c, 0x74, 0x7f, 0x34, 0x51, 0x1d, 0x3a, 0x6f, 0xcd, 0x26, + 0xaa, 0x43, 0xd7, 0x95, 0x56, 0xfd, 0x2a, 0x32, 0xf4, 0x02, 0x79, 0x3e, 0x62, 0xc8, 0x94, 0x38, + 0xa8, 0xa5, 0x0a, 0x4f, 0x3f, 0xd0, 0x60, 0x32, 0x7e, 0xbf, 0x98, 0xbc, 0x3e, 0x50, 0x5b, 0x4a, + 0x3c, 0xa0, 0xf4, 0xc6, 0x10, 0x35, 0x04, 0x8b, 0xaf, 0x20, 0x8b, 0x2f, 0x91, 0x17, 0x7a, 0xb0, + 0x88, 0x4a, 0xb4, 0xf8, 0x89, 0x3c, 0xd9, 0xff, 0x94, 0xfc, 0xb2, 0x06, 0xe3, 0x6a, 0xea, 0x69, + 0xe2, 0x0a, 0xd6, 0x23, 0xd7, 0x3c, 0x71, 0x05, 0xeb, 0x95, 0x5a, 0xdb, 0xc3, 0xa6, 0x44, 0xf9, + 0xb2, 0xdf, 0x13, 0x29, 0x94, 0xf8, 0x9e, 0xe8, 0xe7, 0xc7, 0xd1, 0x02, 0x72, 0x74, 0x9e, 0x9c, + 0x8b, 0x38, 0xc2, 0x97, 0x4b, 0x2b, 0x11, 0x5f, 0xdf, 0xd7, 0x20, 0xaf, 0x64, 0xc2, 0x26, 0x2a, + 0x7d, 0x77, 0x92, 0x6e, 0xa2, 0xd2, 0xf7, 0x48, 0xb0, 0xd5, 0xaf, 0x21, 0x3f, 0x2f, 0xea, 0xca, + 0x1a, 0x8f, 0x58, 0x3c, 0xeb, 0xba, 0xad, 0x61, 0xef, 0x69, 0xd7, 0xc8, 0x5f, 0xd7, 0xa0, 0xc0, + 0x69, 0xa0, 0xd0, 0x3e, 0x17, 0xfe, 0xc4, 0xa4, 0xd4, 0x2f, 0x74, 0xf2, 0xc7, 0xc5, 0x86, 0x5c, + 0x32, 0xde, 0xfe, 0x9e, 0xc8, 0xae, 0xee, 0xcc, 0x42, 0x25, 0x6f, 0xf5, 0x19, 0xa1, 0x53, 0x52, + 0x6c, 0x4b, 0x6f, 0x0f, 0x5d, 0xef, 0x54, 0x4f, 0xa5, 0x9d, 0xe0, 0x5a, 0x11, 0x49, 0xac, 0xff, + 0x48, 0x83, 0xf3, 0x91, 0xf2, 0xfd, 0xec, 0x59, 0xbe, 0x82, 0x2c, 0xeb, 0xe4, 0x52, 0x87, 0x52, + 0x76, 0x33, 0xfe, 0x37, 0x34, 0x28, 0x74, 0x66, 0x4b, 0x92, 0xeb, 0x7d, 0xda, 0xed, 0x91, 0x5f, + 0x5b, 0xba, 0x31, 0x54, 0x1d, 0xc1, 0xe7, 0x3c, 0xf2, 0x59, 0x24, 0x73, 0x6d, 0x27, 0xd0, 0x0e, + 0xc2, 0xe0, 0xc0, 0xa9, 0xf0, 0x1c, 0xcb, 0xdf, 0xc2, 0x27, 0xb9, 0x85, 0x58, 0x7f, 0x36, 0x2c, + 0xbe, 0x88, 0x2c, 0xce, 0x93, 0x8b, 0x1d, 0xa2, 0x8c, 0x33, 0xfa, 0x9b, 0x1a, 0x4c, 0xc4, 0x52, + 0xc5, 0xc9, 0x62, 0xdf, 0x79, 0x11, 0xcf, 0x67, 0x4f, 0x74, 0xb0, 0x7a, 0x66, 0xa1, 0xeb, 0xaf, + 0x22, 0x6b, 0x97, 0xf5, 0xe7, 0x3b, 0xa7, 0x92, 0xb0, 0x3d, 0xf1, 0xc9, 0xfe, 0x77, 0x34, 0x79, + 0x09, 0x40, 0xb5, 0x90, 0x9f, 0x07, 0x9f, 0x42, 0x1b, 0xf5, 0xe7, 0x7a, 0x4f, 0x79, 0xc1, 0x2d, + 0xe3, 0xf1, 0x9b, 0x1a, 0xe4, 0xa2, 0x4c, 0xd1, 0xc4, 0x95, 0xb8, 0x33, 0x5b, 0x36, 0x71, 0x25, + 0xee, 0x4a, 0x3e, 0xd5, 0x8b, 0xc8, 0x12, 0xd1, 0xdb, 0x8e, 0x59, 0xd0, 0x30, 0x91, 0x85, 0x6f, + 0xe0, 0xfe, 0xac, 0xba, 0x9f, 0xec, 0x9a, 0xc5, 0x2e, 0xf3, 0x27, 0x3a, 0xa7, 0xea, 0xe3, 0x13, + 0x3d, 0x7c, 0xa4, 0x00, 0x09, 0x29, 0x0b, 0xff, 0x9f, 0xd5, 0x60, 0x4c, 0xdc, 0x19, 0x4f, 0xdc, + 0xf4, 0xc4, 0xef, 0x95, 0x0f, 0xce, 0x42, 0xb7, 0x35, 0x6b, 0x70, 0x4a, 0x1d, 0x3c, 0x88, 0xab, + 0xe0, 0x89, 0x3c, 0xc4, 0xaf, 0x8b, 0x3f, 0x0d, 0x0f, 0xe2, 0xdd, 0x5e, 0x85, 0x87, 0xbf, 0xa0, + 0x41, 0x56, 0xde, 0xec, 0x27, 0x49, 0x5b, 0xba, 0x8e, 0xc7, 0x09, 0x4a, 0xaf, 0x0c, 0x84, 0x2b, + 0x38, 0xe9, 0xde, 0x2b, 0x61, 0xdc, 0x34, 0xee, 0xb3, 0x8e, 0xab, 0x2f, 0x4d, 0x24, 0x7b, 0x14, + 0xdd, 0x4f, 0x58, 0x24, 0x7b, 0x14, 0x3d, 0x9e, 0xb0, 0xe8, 0xb1, 0x83, 0x71, 0xbc, 0x5a, 0x27, + 0x5b, 0xbf, 0xa6, 0xc1, 0x98, 0xa8, 0x9d, 0x38, 0x44, 0xf1, 0x27, 0x2d, 0x4a, 0xaf, 0x25, 0xa3, + 0x76, 0x3c, 0xe8, 0x21, 0x9d, 0x09, 0xa2, 0x27, 0xb0, 0xb2, 0xf8, 0x09, 0x03, 0x7c, 0xca, 0x36, + 0xb5, 0x1b, 0x5e, 0x2d, 0x48, 0xdc, 0xd1, 0x29, 0xaf, 0x9e, 0x0c, 0xcb, 0x4a, 0x2f, 0x3f, 0xab, + 0xa6, 0x4a, 0xe4, 0x37, 0x34, 0x7c, 0xbc, 0xb3, 0x9d, 0x0a, 0x97, 0x68, 0xda, 0x7a, 0x65, 0x75, + 0x27, 0x9a, 0xb6, 0x9e, 0x59, 0x76, 0x3d, 0x16, 0x30, 0x91, 0xc6, 0x2c, 0xee, 0x8a, 0x7f, 0x4b, + 0x83, 0x5c, 0x94, 0xcf, 0x93, 0x68, 0xd0, 0x3a, 0xd3, 0xf1, 0x12, 0x0d, 0x5a, 0x57, 0x8a, 0x90, + 0x5e, 0x42, 0x46, 0x66, 0x08, 0x89, 0x18, 0x79, 0xe4, 0x85, 0x82, 0x89, 0x4f, 0x21, 0xc3, 0x77, + 0x10, 0x2f, 0xf7, 0x4f, 0xd1, 0xe8, 0x7f, 0xc4, 0x11, 0xdf, 0x2f, 0x9c, 0xb2, 0xd5, 0x54, 0x77, + 0x09, 0x3f, 0xd0, 0x20, 0xaf, 0x9e, 0xc4, 0x27, 0x5f, 0xba, 0xe8, 0x3c, 0x05, 0x2f, 0x7d, 0xb1, + 0x1b, 0x5d, 0xfd, 0x4b, 0x6f, 0xb1, 0xbf, 0x01, 0xa7, 0xd4, 0xe7, 0xe1, 0x81, 0x1e, 0x7b, 0x40, + 0xf5, 0x0f, 0xc8, 0xb5, 0xb5, 0x87, 0x6d, 0xc9, 0x79, 0xa6, 0x43, 0x1f, 0xbb, 0xaf, 0xa4, 0x9a, + 0x24, 0x6e, 0xc9, 0xe3, 0x69, 0x13, 0x3d, 0x2d, 0x3f, 0x43, 0x50, 0x58, 0xf8, 0x8b, 0x1a, 0x9e, + 0x35, 0xca, 0x6c, 0x80, 0x57, 0x07, 0x8c, 0xbb, 0xf6, 0x9f, 0x4d, 0xdd, 0x51, 0x5a, 0xfd, 0x02, + 0xb2, 0x33, 0x4b, 0xa6, 0xd5, 0x85, 0x48, 0xb6, 0xfc, 0x03, 0x0d, 0xe6, 0xba, 0x82, 0x84, 0x7c, + 0x49, 0x4e, 0xca, 0x5b, 0x4b, 0x8e, 0x2b, 0x0e, 0xcb, 0x61, 0xf7, 0xcc, 0x92, 0x49, 0x1e, 0x41, + 0x58, 0x0f, 0x03, 0xf2, 0x23, 0x0d, 0x2e, 0xf5, 0x0b, 0x84, 0x91, 0xe5, 0x24, 0x76, 0x07, 0x8b, + 0xd2, 0x95, 0x56, 0x9e, 0x8a, 0x46, 0xdc, 0xa6, 0xeb, 0x45, 0x45, 0xde, 0xf5, 0x90, 0xa9, 0xa2, + 0x08, 0x5c, 0x31, 0xd7, 0xe3, 0x9f, 0x6b, 0xa7, 0x85, 0x6d, 0x90, 0x93, 0x80, 0x7c, 0xe9, 0x89, + 0x42, 0x64, 0xd1, 0x08, 0xbc, 0xff, 0xa4, 0xd5, 0x4f, 0x5d, 0x2c, 0x3b, 0x3a, 0x41, 0xfe, 0xe9, + 0x69, 0xd1, 0xb7, 0xb7, 0x86, 0x6e, 0xba, 0xff, 0x0e, 0x28, 0x29, 0xc2, 0xa5, 0xbf, 0x89, 0xbc, + 0x96, 0xc9, 0xab, 0x5d, 0xbc, 0x2e, 0x7e, 0x72, 0x5a, 0x50, 0xed, 0x53, 0xf2, 0xdb, 0x1a, 0xc6, + 0x5d, 0xe2, 0x71, 0x1e, 0x72, 0x63, 0xb8, 0xa8, 0x10, 0xe7, 0xfc, 0xcd, 0x27, 0x09, 0x25, 0xf5, + 0x38, 0xa1, 0x7f, 0xec, 0xed, 0x56, 0x7c, 0x81, 0x1c, 0x77, 0x8f, 0x72, 0x51, 0x84, 0x28, 0x71, + 0x61, 0xe9, 0x0c, 0x39, 0x25, 0x2e, 0x2c, 0x5d, 0x41, 0x27, 0xfd, 0x39, 0xe4, 0xe8, 0x1c, 0x99, + 0x55, 0x39, 0x5a, 0xfc, 0x84, 0x07, 0xad, 0x3e, 0x25, 0xdf, 0xd3, 0xf0, 0xed, 0xb4, 0x76, 0xc4, + 0x27, 0x71, 0xd5, 0xed, 0x15, 0x8c, 0x4a, 0x5c, 0x75, 0x7b, 0x07, 0x93, 0x84, 0x31, 0xd5, 0xdb, + 0xb6, 0x01, 0x63, 0x51, 0xc1, 0x81, 0x83, 0x47, 0x7b, 0x6c, 0x2e, 0xfd, 0xae, 0x06, 0x33, 0xbd, + 0x42, 0x3c, 0x89, 0x9a, 0x98, 0x10, 0xa1, 0x4a, 0xd4, 0xc4, 0xa4, 0xa8, 0x94, 0xfe, 0x12, 0x32, + 0xbb, 0x40, 0xda, 0xbb, 0x1f, 0xfc, 0xd3, 0xa7, 0xf8, 0x97, 0x03, 0xdb, 0x81, 0xa6, 0xe5, 0x6b, + 0x3f, 0xfc, 0xcf, 0xf3, 0x67, 0x7e, 0x78, 0x32, 0xaf, 0xfd, 0xe8, 0x64, 0x5e, 0xfb, 0xf1, 0xc9, + 0xbc, 0xf6, 0x9f, 0x4e, 0xe6, 0xb5, 0x5f, 0xff, 0xc9, 0xfc, 0x99, 0x1f, 0xfd, 0x64, 0xfe, 0xcc, + 0x8f, 0x7f, 0x32, 0x7f, 0xe6, 0xa3, 0xac, 0x6c, 0x6f, 0x77, 0x14, 0x03, 0xcd, 0x37, 0xfe, 0x5f, + 0x00, 0x00, 0x00, 0xff, 0xff, 0x3e, 0xf2, 0xb9, 0x50, 0xf2, 0x75, 0x00, 0x00, } func (this *PrettySpan) Equal(that interface{}) bool { @@ -10360,6 +10363,13 @@ func (m *ActiveQuery) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.SqlSummary) > 0 { + i -= len(m.SqlSummary) + copy(dAtA[i:], m.SqlSummary) + i = encodeVarintStatus(dAtA, i, uint64(len(m.SqlSummary))) + i-- + dAtA[i] = 0x4a + } if len(m.SqlNoConstants) > 0 { i -= len(m.SqlNoConstants) copy(dAtA[i:], m.SqlNoConstants) @@ -14165,6 +14175,10 @@ func (m *ActiveQuery) Size() (n int) { if l > 0 { n += 1 + l + sovStatus(uint64(l)) } + l = len(m.SqlSummary) + if l > 0 { + n += 1 + l + sovStatus(uint64(l)) + } return n } @@ -24547,6 +24561,38 @@ func (m *ActiveQuery) Unmarshal(dAtA []byte) error { } m.SqlNoConstants = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SqlSummary", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStatus + } + 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 ErrInvalidLengthStatus + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthStatus + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SqlSummary = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipStatus(dAtA[iNdEx:]) diff --git a/pkg/server/serverpb/status.proto b/pkg/server/serverpb/status.proto index 59d74ddea0b6..32123c7d3ed2 100644 --- a/pkg/server/serverpb/status.proto +++ b/pkg/server/serverpb/status.proto @@ -747,6 +747,9 @@ message ActiveQuery { // The SQL statement fingerprint, compatible with StatementStatisticsKey. string sql_no_constants = 8; + + // A summarized version of the sql query. + string sql_summary = 9; } // Request object for ListSessions and ListLocalSessions. diff --git a/pkg/sql/conn_executor.go b/pkg/sql/conn_executor.go index 37e7482eba75..038cfee95415 100644 --- a/pkg/sql/conn_executor.go +++ b/pkg/sql/conn_executor.go @@ -2842,6 +2842,7 @@ func (ex *connExecutor) serialize() serverpb.Session { Start: query.start.UTC(), Sql: sql, SqlNoConstants: sqlNoConstants, + SqlSummary: formatStatementSummary(ast), IsDistributed: query.isDistributed, Phase: (serverpb.ActiveQuery_Phase)(query.phase), Progress: float32(progress), diff --git a/pkg/ui/workspaces/cluster-ui/src/sessions/sessionsTable.tsx b/pkg/ui/workspaces/cluster-ui/src/sessions/sessionsTable.tsx index 99e4a2d23cb7..1175a4d5a7e6 100644 --- a/pkg/ui/workspaces/cluster-ui/src/sessions/sessionsTable.tsx +++ b/pkg/ui/workspaces/cluster-ui/src/sessions/sessionsTable.tsx @@ -33,8 +33,7 @@ import { } from "src/dropdown/dropdown"; import { Button } from "src/button/button"; import { Tooltip } from "@cockroachlabs/ui-components"; -import { summarize } from "../util"; -import { shortStatement } from "../statementsTable"; +import { computeOrUseStmtSummary } from "../util"; const cx = classNames.bind(styles); @@ -94,6 +93,24 @@ const AgeLabel = (props: { start: Moment; thingName: string }) => { ); }; +const StatementTableCell = (props: { session: ISession }) => { + const { session } = props; + + if (!(session.active_queries?.length > 0)) { + return "N/A"; + } + const stmt = session.active_queries[0].sql; + const stmtSummary = session.active_queries[0].sql_summary; + const stmtCellText = computeOrUseStmtSummary(stmt, stmtSummary); + return ( +
+ {stmt}}> + {stmtCellText} + +
+ ); +}; + export function makeSessionsColumns( terminateSessionRef?: React.RefObject, terminateQueryRef?: React.RefObject, @@ -160,14 +177,7 @@ export function makeSessionsColumns( name: "statement", title: SessionTableTitle.statement, className: cx("cl-table__col-session", "code"), - cell: session => { - if (!(session.session.active_queries?.length > 0)) { - return "N/A"; - } - const stmt = session.session.active_queries[0].sql; - const summary = summarize(stmt); - return shortStatement(summary, stmt); - }, + cell: session => StatementTableCell({ session: session.session }), }, ]; diff --git a/pkg/ui/workspaces/cluster-ui/src/statementDetails/statementDetails.tsx b/pkg/ui/workspaces/cluster-ui/src/statementDetails/statementDetails.tsx index 56245594c557..099023c5aa5f 100644 --- a/pkg/ui/workspaces/cluster-ui/src/statementDetails/statementDetails.tsx +++ b/pkg/ui/workspaces/cluster-ui/src/statementDetails/statementDetails.tsx @@ -33,7 +33,6 @@ import { formatNumberForDisplay, calculateTotalWorkload, unique, - summarize, queryByName, aggregatedTsAttr, aggregationIntervalAttr, @@ -530,9 +529,6 @@ export class StatementDetails extends React.Component< unavailable ); - const summary = summarize(statement); - const showRowsWritten = - stats.sql_type === "TypeDML" && summary.statement !== "select"; // If the aggregatedTs is unset, we are aggregating over the whole date range. const aggregatedTs = queryByName(this.props.location, aggregatedTsAttr); @@ -616,19 +612,15 @@ export class StatementDetails extends React.Component< )} {unavailableTooltip} - {showRowsWritten && ( -
- Mean rows written - - {formatNumberForDisplay( - stats.rows_written?.mean, - formatTwoPlaces, - )} - -
- )} +
+ Mean rows written + + {formatNumberForDisplay( + stats.rows_written?.mean, + formatTwoPlaces, + )} + +
Max memory usage {statementSampled && ( @@ -908,10 +900,9 @@ export class StatementDetails extends React.Component< }, ].filter(function(r) { if ( - (r.name === "Network Bytes Sent" && - r.value && - r.value.mean === 0) || - (r.name === "Rows Written" && !showRowsWritten) + r.name === "Network Bytes Sent" && + r.value && + r.value.mean === 0 ) { // Omit if empty. return false; diff --git a/pkg/ui/workspaces/cluster-ui/src/statementsTable/statementsTableContent.tsx b/pkg/ui/workspaces/cluster-ui/src/statementsTable/statementsTableContent.tsx index 8aad0e689a72..6689758422cb 100644 --- a/pkg/ui/workspaces/cluster-ui/src/statementsTable/statementsTableContent.tsx +++ b/pkg/ui/workspaces/cluster-ui/src/statementsTable/statementsTableContent.tsx @@ -27,11 +27,10 @@ import { databaseAttr, aggregatedTsAttr, propsToQueryString, - summarize, TimestampToMoment, aggregationIntervalAttr, + computeOrUseStmtSummary, } from "src/util"; -import { shortStatement } from "./statementsTable"; import styles from "./statementsTableContent.module.scss"; import { cockroach } from "@cockroachlabs/crdb-protobuf-client"; import { Download } from "@cockroachlabs/icons"; @@ -185,14 +184,6 @@ export const StatementLink = ({ database, onClick, }: StatementLinkProps): React.ReactElement => { - const summary = summarize(statement); - // current statements that we support summaries for from the backend. - const summarizedStmts = new Set(["select", "insert", "upsert", "update"]); - const shortStmt = - statementSummary && summarizedStmts.has(summary.statement) - ? statementSummary - : shortStatement(summary, statement); - const onStatementClick = React.useCallback(() => { if (onClick) { onClick(statement); @@ -209,6 +200,8 @@ export const StatementLink = ({ database, }; + const summary = computeOrUseStmtSummary(statement, statementSummary); + return (
@@ -221,7 +214,7 @@ export const StatementLink = ({ } >
- {getHighlightedText(shortStmt, search, false, true)} + {getHighlightedText(summary, search, false, true)}
diff --git a/pkg/ui/workspaces/cluster-ui/src/transactionDetails/transactionDetails.tsx b/pkg/ui/workspaces/cluster-ui/src/transactionDetails/transactionDetails.tsx index e1a633897768..1ed9827c3dda 100644 --- a/pkg/ui/workspaces/cluster-ui/src/transactionDetails/transactionDetails.tsx +++ b/pkg/ui/workspaces/cluster-ui/src/transactionDetails/transactionDetails.tsx @@ -29,7 +29,7 @@ import { SqlBox } from "../sql"; import { aggregateStatements } from "../transactionsPage/utils"; import { Loading } from "../loading"; import { SummaryCard } from "../summaryCard"; -import { Bytes, Duration, formatNumberForDisplay } from "src/util"; +import { Bytes, Duration, formatNumberForDisplay, summarize } from "src/util"; import { UIConfigState } from "../store"; import SQLActivityError from "../sqlActivity/errorComponent"; diff --git a/pkg/ui/workspaces/cluster-ui/src/transactionsPage/utils.ts b/pkg/ui/workspaces/cluster-ui/src/transactionsPage/utils.ts index a6dc063dfcc1..ab6970f63ab1 100644 --- a/pkg/ui/workspaces/cluster-ui/src/transactionsPage/utils.ts +++ b/pkg/ui/workspaces/cluster-ui/src/transactionsPage/utils.ts @@ -28,6 +28,7 @@ import { addStatementStats, flattenStatementStats, DurationToNumber, + computeOrUseStmtSummary, } from "../util"; type Statement = protos.cockroach.server.serverpb.StatementsResponse.ICollectedStatementStatistics; @@ -80,6 +81,21 @@ export const statementFingerprintIdsToText = ( .join("\n"); }; +// Combine all statement summaries into a string. +export const statementFingerprintIdsToSummarizedText = ( + statementFingerprintIds: Long[], + statements: Statement[], +): string => { + return statementFingerprintIds + .map(s => { + const query = statements.find(stmt => stmt.id.eq(s))?.key.key_data.query; + const querySummary = statements.find(stmt => stmt.id.eq(s))?.key.key_data + .query_summary; + return computeOrUseStmtSummary(query, querySummary); + }) + .join("\n"); +}; + // Aggregate transaction statements from different nodes. export const aggregateStatements = ( statements: Statement[], diff --git a/pkg/ui/workspaces/cluster-ui/src/transactionsTable/transactionsCells/transactionsCells.tsx b/pkg/ui/workspaces/cluster-ui/src/transactionsTable/transactionsCells/transactionsCells.tsx index bd8e841ea2f8..09e65ae87985 100644 --- a/pkg/ui/workspaces/cluster-ui/src/transactionsTable/transactionsCells/transactionsCells.tsx +++ b/pkg/ui/workspaces/cluster-ui/src/transactionsTable/transactionsCells/transactionsCells.tsx @@ -8,19 +8,13 @@ // by the Apache License, Version 2.0, included in the file // licenses/APL.txt. -import * as protos from "@cockroachlabs/crdb-protobuf-client"; import React from "react"; import { getHighlightedText } from "src/highlightedText"; -import { Anchor } from "src/anchor"; import { Tooltip } from "@cockroachlabs/ui-components"; -import { summarize } from "src/util/sql/summarize"; -import { shortStatement } from "src/statementsTable/statementsTable"; -import { statementsSql } from "src/util"; import { limitText } from "../utils"; import classNames from "classnames/bind"; import statementsStyles from "../../statementsTable/statementsTableContent.module.scss"; import transactionsCellsStyles from "./transactionsCells.module.scss"; -import Long from "long"; const statementsCx = classNames.bind(statementsStyles); const ownCellStyles = classNames.bind(transactionsCellsStyles); @@ -28,38 +22,36 @@ const descriptionClassName = statementsCx("cl-table-link__description"); const textWrapper = ownCellStyles("text-wrapper"); const hoverAreaClassName = ownCellStyles("hover-area"); - -type TransactionStats = protos.cockroach.sql.ITransactionStatistics; - interface TextCellProps { transactionText: string; + transactionSummary: string; onClick: () => void; search: string; } export const textCell = ({ transactionText, + transactionSummary, onClick, search, }: TextCellProps): React.ReactElement => { - const summary = summarize(transactionText); return (
- {getHighlightedText(transactionText, search, true)} + {getHighlightedText(transactionText, search, true /* hasDarkBkg */)} } >
{getHighlightedText( - limitText(shortStatement(summary, transactionText), 200), + limitText(transactionSummary, 200), search, - false, - true, + false /* hasDarkBkg */, + true /* isOriginalText */, )}
diff --git a/pkg/ui/workspaces/cluster-ui/src/transactionsTable/transactionsTable.tsx b/pkg/ui/workspaces/cluster-ui/src/transactionsTable/transactionsTable.tsx index d35266a1a05e..393c90c2038d 100644 --- a/pkg/ui/workspaces/cluster-ui/src/transactionsTable/transactionsTable.tsx +++ b/pkg/ui/workspaces/cluster-ui/src/transactionsTable/transactionsTable.tsx @@ -44,6 +44,7 @@ import { getStatementsByFingerprintIdAndTime, collectStatementsText, statementFingerprintIdsToText, + statementFingerprintIdsToSummarizedText, } from "../transactionsPage/utils"; import classNames from "classnames/bind"; import statsTablePageStyles from "src/statementsTable/statementsTableContent.module.scss"; @@ -130,6 +131,10 @@ export function makeTransactionsColumns( item.stats_data.statement_fingerprint_ids, statements, ), + transactionSummary: statementFingerprintIdsToSummarizedText( + item.stats_data.statement_fingerprint_ids, + statements, + ), onClick: () => handleDetails(item), search, }), diff --git a/pkg/ui/workspaces/cluster-ui/src/util/sql/summarize.spec.ts b/pkg/ui/workspaces/cluster-ui/src/util/sql/summarize.spec.ts new file mode 100644 index 000000000000..343a325aafd9 --- /dev/null +++ b/pkg/ui/workspaces/cluster-ui/src/util/sql/summarize.spec.ts @@ -0,0 +1,138 @@ +// Copyright 2021 The Cockroach Authors. +// +// Use of this software is governed by the Business Source License +// included in the file licenses/BSL.txt. +// +// As of the Change Date specified in that file, in accordance with +// the Business Source License, use of this software will be governed +// by the Apache License, Version 2.0, included in the file +// licenses/APL.txt. + +import { assert } from "chai"; +import { summarize, computeOrUseStmtSummary } from "./summarize"; + +describe("summarize", () => { + describe("summarize", () => { + it("correctly identifies simple statement keywords", () => { + const simpleStatements = [ + { + type: "update", + stmt: "UPDATE system.jobs SET progress = 'value' WHERE id = '12312'", + }, + { + type: "select", + stmt: "SELECT (SELECT job_id FROM system.jobs) FROM system.apps", + }, + { + type: "insert", + stmt: + "INSERT INTO system.table_statistics(\"tableID\", name) SELECT 'cockroach', app_names FROM system.apps", + }, + { + type: "upsert", + stmt: + 'UPSERT INTO system.reports_meta(id, "generated") VALUES ($1, $2)', + }, + { + type: "delete", + stmt: + 'DELETE FROM system.public.lease WHERE ("descID", version, "nodeID", expiration) = ($1, $2, __more2__)', + }, + { + type: "create", + stmt: "CREATE TABLE foo (x INT8)", + }, + { + type: "set", + stmt: "SET CLUSTER SETTING sql.defaults.distsql = 1;", + }, + ]; + + simpleStatements.forEach(s => + assert.equal(s.type, summarize(s.stmt).statement), + ); + }); + + it("correctly identifies more complicated statement keywords", () => { + const simpleStatements = [ + { + type: "update", + stmt: + "UPDATE system.jobs SET claim_session_id = _ WHERE claim_session_id IN (SELECT claim_session_id WHERE ((claim_session_id != $1) AND (status IN ('_', '_', __more3__))) AND (NOT crdb_internal.sql_liveness_is_alive(claim_session_id)) LIMIT $2)", + }, + { + type: "insert", + stmt: + 'INSERT INTO system.settings(name, value, "lastUpdated", "valueType") SELECT \'unique_pear\', value, "lastUpdated", "valueType" FROM system.settings JOIN system.internal_tables ON system.settings.id = system.internal_tables.id WHERE name = \'_\' ON CONFLICT (name) DO NOTHING', + }, + { + type: "select", + stmt: + "SELECT aggregated_ts, fingerprint_id, app_name, metadata, statistics, agg_interval FROM system.transaction_statistics AS OF SYSTEM TIME follower_read_timestamp() ORDER BY aggregated_ts, app_name, fingerprint_id", + }, + ]; + + simpleStatements.forEach(s => + assert.equal(s.type, summarize(s.stmt).statement), + ); + }); + }); + + describe("computeOrUseStmtSummary", () => { + it("returns the given statement summary for supported formats", () => { + const simpleStatements = [ + { + stmt: "UPDATE system.jobs SET progress = 'value' WHERE id = '12312'", + summary: "UPDATE system.jobs SET progress = '_' WHERE id = '_'", + }, + { + stmt: "SELECT (SELECT job_id FROM system.jobs) FROM system.apps", + summary: "SELECT (SELECT FROM sy...) FROM system.apps", + }, + { + stmt: + "INSERT INTO system.table_statistics(\"tableID\", name) SELECT 'cockroach', app_names FROM system.apps", + summary: + "INSERT INTO system.table_statistics SELECT '_', app_names FROM system.apps", + }, + { + stmt: + 'UPSERT INTO system.reports_meta(id, "generated") VALUES ($1, $2)', + summary: 'UPSERT INTO system.reports_meta(id, "generated")', + }, + ]; + + simpleStatements.forEach(s => + assert.equal(s.summary, computeOrUseStmtSummary(s.stmt, s.summary)), + ); + }); + + it("returns the regex statement summary for unsupported formats", () => { + const simpleStatements = [ + { + stmt: + 'DELETE FROM system.public.lease WHERE ("descID", version, "nodeID", expiration) = ($1, $2, __more2__)\n', + summary: + 'DELETE FROM system.public.lease WHERE ("descID", version, "nodeID", expiration) = ($1, $2, __more2__)\n', + expected: "DELETE FROM system.public.lease", + }, + { + stmt: + "CREATE TABLE crdb_internal.index_usage_statistics (table_id INT8 NOT NULL, index_id INT8 NOT NULL, total_reads INT8 NOT NULL, last_read TIMESTAMPTZ NULL)", + summary: + "CREATE TABLE crdb_internal.index_usage_statistics (table_id INT8 NOT NULL, index_id INT8 NOT NULL, total_reads INT8 NOT NULL, last_read TIMESTAMPTZ NULL)", + expected: "CREATE TABLE crdb_internal.index_usage_statistics", + }, + { + stmt: "SET CLUSTER SETTING sql.defaults.distsql = 1", + summary: "SET CLUSTER SETTING sql.defaults.distsql = 1", + expected: "SET CLUSTER SETTING sql.defaults.distsql", + }, + ]; + + simpleStatements.forEach(s => + assert.equal(s.expected, computeOrUseStmtSummary(s.stmt, s.summary)), + ); + }); + }); +}); diff --git a/pkg/ui/workspaces/cluster-ui/src/util/sql/summarize.ts b/pkg/ui/workspaces/cluster-ui/src/util/sql/summarize.ts index 704c49843cf0..d62204d3170e 100644 --- a/pkg/ui/workspaces/cluster-ui/src/util/sql/summarize.ts +++ b/pkg/ui/workspaces/cluster-ui/src/util/sql/summarize.ts @@ -9,6 +9,7 @@ // licenses/APL.txt. import _ from "lodash"; +import { shortStatement } from "../../statementsTable"; export interface StatementSummary { statement?: string; @@ -55,3 +56,20 @@ export function summarize(statement: string): StatementSummary { error: "unimplemented", }; } + +// Check if a valid statement summary exists and is supported, or else +// compute summary using regex. +export function computeOrUseStmtSummary( + statement: string, + statementSummary: string, +): string { + // Statement summary computed with regex. + const regexSummary = summarize(statement); + + // Current statements that we support summaries for from the backend. + const summarizedStmts = new Set(["select", "insert", "upsert", "update"]); + + return statementSummary && summarizedStmts.has(regexSummary.statement) + ? statementSummary + : shortStatement(regexSummary, statement); +}