diff --git a/.changeset/tall-dogs-notice.md b/.changeset/tall-dogs-notice.md new file mode 100644 index 000000000..f2fca337b --- /dev/null +++ b/.changeset/tall-dogs-notice.md @@ -0,0 +1,5 @@ +--- +"@livekit/protocol": patch +--- + +Add redacted field options to egress fields diff --git a/egress/redact.go b/egress/redact.go index 3bf9a9560..5b599bdf2 100644 --- a/egress/redact.go +++ b/egress/redact.go @@ -24,6 +24,7 @@ func RedactUpload(req UploadRequest) { s3.AccessKey = utils.Redact(s3.AccessKey, "{access_key}") s3.Secret = utils.Redact(s3.Secret, "{secret}") s3.AssumeRoleExternalId = utils.Redact(s3.AssumeRoleExternalId, "{external_id}") + s3.SessionToken = utils.Redact(s3.AssumeRoleExternalId, "{session_token}") return } diff --git a/egress/redact_test.go b/egress/redact_test.go index 35fc44c3c..561e67276 100644 --- a/egress/redact_test.go +++ b/egress/redact_test.go @@ -30,6 +30,7 @@ var ( AccessKey: "ACCESS_KEY", Secret: "LONG_SECRET_STRING", AssumeRoleExternalId: "EXTERNAL_ID", + SessionToken: "SESSION_TOKEN", }, }, } @@ -68,6 +69,7 @@ func TestRedactUpload(t *testing.T) { require.Equal(t, "{access_key}", cl.(*livekit.EncodedFileOutput).Output.(*livekit.EncodedFileOutput_S3).S3.AccessKey) require.Equal(t, "{secret}", cl.(*livekit.EncodedFileOutput).Output.(*livekit.EncodedFileOutput_S3).S3.Secret) require.Equal(t, "{external_id}", cl.(*livekit.EncodedFileOutput).Output.(*livekit.EncodedFileOutput_S3).S3.AssumeRoleExternalId) + require.Equal(t, "{session_token}", cl.(*livekit.EncodedFileOutput).Output.(*livekit.EncodedFileOutput_S3).S3.SessionToken) cl = proto.Clone(image) RedactUpload(cl.(UploadRequest)) diff --git a/livekit/egress_test.go b/livekit/egress_test.go new file mode 100644 index 000000000..0d3d1b549 --- /dev/null +++ b/livekit/egress_test.go @@ -0,0 +1,59 @@ +// Copyright 2023 LiveKit, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package livekit + +import ( + "testing" + + "github.com/stretchr/testify/require" + "go.uber.org/zap/zapcore" + + "github.com/livekit/protocol/logger" + "github.com/livekit/protocol/logger/testutil" + "github.com/livekit/protocol/logger/zaputil" +) + +type TestEgressLogOutput struct { + testutil.TestLogOutput + S3 map[string]string +} + +func TestLoggerProto(t *testing.T) { + ws := &testutil.BufferedWriteSyncer{} + l, err := logger.NewZapLogger(&logger.Config{}, logger.WithTap(zaputil.NewWriteEnabler(ws, zapcore.DebugLevel))) + require.NoError(t, err) + + s3 := &S3Upload{ + AccessKey: "Field1", + Secret: "Field2", + AssumeRoleArn: "Field3", + SessionToken: "Field4", + Endpoint: "Field5", + } + + l.Debugw("foo", "s3", logger.Proto(s3)) + + var log TestEgressLogOutput + require.NoError(t, ws.Unmarshal(&log)) + + require.NotEqual(t, 0, log.TS) + require.NotEqual(t, "", log.Caller) + require.Equal(t, "foo", log.Msg) + require.Equal(t, "", log.S3["accessKey"]) + require.Equal(t, "", log.S3["secret"]) + require.Equal(t, "", log.S3["assumeRoleArn"]) + require.Equal(t, "", log.S3["sessionToken"]) + require.Equal(t, "Field5", log.S3["endpoint"]) +} diff --git a/livekit/livekit_egress.pb.go b/livekit/livekit_egress.pb.go index 887a86472..59317819b 100644 --- a/livekit/livekit_egress.pb.go +++ b/livekit/livekit_egress.pb.go @@ -21,6 +21,7 @@ package livekit import ( + _ "github.com/livekit/protocol/livekit/logger" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" @@ -3882,7 +3883,7 @@ var File_livekit_egress_proto protoreflect.FileDescriptor const file_livekit_egress_proto_rawDesc = "" + "\n" + - "\x14livekit_egress.proto\x12\alivekit\x1a\x14livekit_models.proto\"\xd5\x06\n" + + "\x14livekit_egress.proto\x12\alivekit\x1a\x14livekit_models.proto\x1a\x14logger/options.proto\"\xd5\x06\n" + "\x1aRoomCompositeEgressRequest\x12\x1b\n" + "\troom_name\x18\x01 \x01(\tR\broomName\x12\x16\n" + "\x06layout\x18\x02 \x01(\tR\x06layout\x12\x1d\n" + @@ -4006,13 +4007,13 @@ const file_livekit_egress_proto_rawDesc = "" + "\x05azure\x18\n" + " \x01(\v2\x18.livekit.AzureBlobUploadH\x00R\x05azure\x12/\n" + "\x06aliOSS\x18\v \x01(\v2\x15.livekit.AliOSSUploadH\x00R\x06aliOSSB\b\n" + - "\x06output\"\xac\x04\n" + - "\bS3Upload\x12\x1d\n" + + "\x06output\"\xc4\x04\n" + + "\bS3Upload\x12#\n" + "\n" + - "access_key\x18\x01 \x01(\tR\taccessKey\x12\x16\n" + - "\x06secret\x18\x02 \x01(\tR\x06secret\x12#\n" + - "\rsession_token\x18\v \x01(\tR\fsessionToken\x12&\n" + - "\x0fassume_role_arn\x18\f \x01(\tR\rassumeRoleArn\x125\n" + + "access_key\x18\x01 \x01(\tB\x04\x88\xb5\x18\x01R\taccessKey\x12\x1c\n" + + "\x06secret\x18\x02 \x01(\tB\x04\x88\xb5\x18\x01R\x06secret\x12)\n" + + "\rsession_token\x18\v \x01(\tB\x04\x88\xb5\x18\x01R\fsessionToken\x12,\n" + + "\x0fassume_role_arn\x18\f \x01(\tB\x04\x88\xb5\x18\x01R\rassumeRoleArn\x125\n" + "\x17assume_role_external_id\x18\r \x01(\tR\x14assumeRoleExternalId\x12\x16\n" + "\x06region\x18\x03 \x01(\tR\x06region\x12\x1a\n" + "\bendpoint\x18\x04 \x01(\tR\bendpoint\x12\x16\n" + @@ -4025,20 +4026,20 @@ const file_livekit_egress_proto_rawDesc = "" + " \x01(\v2\x14.livekit.ProxyConfigR\x05proxy\x1a;\n" + "\rMetadataEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + - "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"q\n" + - "\tGCPUpload\x12 \n" + - "\vcredentials\x18\x01 \x01(\tR\vcredentials\x12\x16\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"w\n" + + "\tGCPUpload\x12&\n" + + "\vcredentials\x18\x01 \x01(\tB\x04\x88\xb5\x18\x01R\vcredentials\x12\x16\n" + "\x06bucket\x18\x02 \x01(\tR\x06bucket\x12*\n" + - "\x05proxy\x18\x03 \x01(\v2\x14.livekit.ProxyConfigR\x05proxy\"|\n" + - "\x0fAzureBlobUpload\x12!\n" + - "\faccount_name\x18\x01 \x01(\tR\vaccountName\x12\x1f\n" + - "\vaccount_key\x18\x02 \x01(\tR\n" + + "\x05proxy\x18\x03 \x01(\v2\x14.livekit.ProxyConfigR\x05proxy\"\x88\x01\n" + + "\x0fAzureBlobUpload\x12'\n" + + "\faccount_name\x18\x01 \x01(\tB\x04\x88\xb5\x18\x01R\vaccountName\x12%\n" + + "\vaccount_key\x18\x02 \x01(\tB\x04\x88\xb5\x18\x01R\n" + "accountKey\x12%\n" + - "\x0econtainer_name\x18\x03 \x01(\tR\rcontainerName\"\x91\x01\n" + - "\fAliOSSUpload\x12\x1d\n" + + "\x0econtainer_name\x18\x03 \x01(\tR\rcontainerName\"\x9d\x01\n" + + "\fAliOSSUpload\x12#\n" + "\n" + - "access_key\x18\x01 \x01(\tR\taccessKey\x12\x16\n" + - "\x06secret\x18\x02 \x01(\tR\x06secret\x12\x16\n" + + "access_key\x18\x01 \x01(\tB\x04\x88\xb5\x18\x01R\taccessKey\x12\x1c\n" + + "\x06secret\x18\x02 \x01(\tB\x04\x88\xb5\x18\x01R\x06secret\x12\x16\n" + "\x06region\x18\x03 \x01(\tR\x06region\x12\x1a\n" + "\bendpoint\x18\x04 \x01(\tR\bendpoint\x12\x16\n" + "\x06bucket\x18\x05 \x01(\tR\x06bucket\"W\n" + diff --git a/livekit/livekit_egress.twirp.go b/livekit/livekit_egress.twirp.go index 11e395659..aab322766 100644 --- a/livekit/livekit_egress.twirp.go +++ b/livekit/livekit_egress.twirp.go @@ -2754,210 +2754,212 @@ func (s *egressServer) PathPrefix() string { } var twirpFileDescriptor1 = []byte{ - // 3278 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5a, 0xc9, 0x73, 0x1b, 0xc7, - 0xd5, 0xe7, 0x60, 0xc7, 0xc3, 0xc2, 0x61, 0x93, 0xa2, 0x20, 0xca, 0x9f, 0x25, 0x43, 0x5e, 0x64, - 0xda, 0xa6, 0xf8, 0x89, 0xb2, 0x2c, 0xcb, 0x9f, 0xfd, 0x05, 0x24, 0x87, 0x24, 0x6c, 0x90, 0x40, - 0x06, 0xa0, 0xe4, 0xe4, 0x32, 0x35, 0x04, 0x9a, 0xe4, 0x14, 0x81, 0x19, 0x78, 0xba, 0x41, 0x09, - 0xae, 0xfc, 0x01, 0x39, 0x66, 0xb9, 0xa5, 0x52, 0x95, 0x4b, 0x2a, 0x87, 0x94, 0xef, 0xf9, 0x1f, - 0x92, 0x43, 0x0e, 0xa9, 0xfc, 0x03, 0x39, 0x26, 0x95, 0xdc, 0x72, 0x4f, 0xf5, 0x32, 0x0b, 0x06, - 0x43, 0x8a, 0x8b, 0xaa, 0x72, 0x48, 0x6e, 0xd3, 0x6f, 0xc3, 0xeb, 0xee, 0x5f, 0xbf, 0xd7, 0xef, - 0x35, 0x60, 0xa1, 0x6f, 0x9d, 0xe2, 0x13, 0x8b, 0x1a, 0xf8, 0xc8, 0xc5, 0x84, 0xac, 0x0c, 0x5d, - 0x87, 0x3a, 0x28, 0x2b, 0xa9, 0x4b, 0x3e, 0x7b, 0xe0, 0xf4, 0x70, 0x5f, 0xb2, 0xab, 0x7f, 0xce, - 0xc0, 0x92, 0xee, 0x38, 0x83, 0x0d, 0x67, 0x30, 0x74, 0x88, 0x45, 0xb1, 0xc6, 0x95, 0x75, 0xfc, - 0xcd, 0x08, 0x13, 0x8a, 0x6e, 0x43, 0xde, 0x75, 0x9c, 0x81, 0x61, 0x9b, 0x03, 0x5c, 0x51, 0xee, - 0x2a, 0xf7, 0xf3, 0x7a, 0x8e, 0x11, 0xf6, 0xcc, 0x01, 0x46, 0x8b, 0x90, 0xe9, 0x9b, 0x63, 0x67, - 0x44, 0x2b, 0x09, 0xce, 0x91, 0x23, 0xf4, 0x3f, 0x00, 0xe6, 0xa8, 0x67, 0x39, 0x86, 0x63, 0xf7, - 0xc7, 0x95, 0xe4, 0x5d, 0xe5, 0x7e, 0x4e, 0xcf, 0x73, 0x4a, 0xd3, 0xee, 0x8f, 0xd1, 0x27, 0x50, - 0x14, 0xec, 0x81, 0xf5, 0xd2, 0xb2, 0x8f, 0x2a, 0xb3, 0x77, 0x95, 0xfb, 0xe5, 0x87, 0x0b, 0x2b, - 0xd2, 0xbf, 0x95, 0x1a, 0x63, 0xee, 0x72, 0x9e, 0x5e, 0x30, 0x83, 0x01, 0xb3, 0x7b, 0x6a, 0xf5, - 0xb0, 0xb4, 0x9b, 0x12, 0x76, 0x39, 0x85, 0xdb, 0x7d, 0x17, 0x66, 0xbb, 0x23, 0x42, 0x9d, 0x81, - 0x71, 0x60, 0x12, 0x6c, 0x8c, 0xdc, 0x7e, 0x25, 0xcd, 0xfd, 0x2a, 0x09, 0xf2, 0xba, 0x49, 0xf0, - 0xbe, 0xdb, 0x47, 0x8f, 0x20, 0x75, 0x68, 0xf5, 0x71, 0x25, 0x73, 0x57, 0xb9, 0x5f, 0x78, 0xb8, - 0xe4, 0xff, 0xae, 0x66, 0x77, 0x9d, 0x1e, 0xee, 0x6d, 0x59, 0x7d, 0xdc, 0x1c, 0xd1, 0xe1, 0x88, - 0xae, 0x27, 0x2a, 0xca, 0xce, 0x8c, 0xce, 0xa5, 0xd1, 0x1a, 0x64, 0x08, 0x75, 0xb1, 0x39, 0xa8, - 0x64, 0xb9, 0xde, 0x0d, 0x5f, 0xaf, 0xcd, 0xc9, 0x13, 0x2a, 0x52, 0x14, 0x7d, 0x01, 0x39, 0x82, - 0x8f, 0x06, 0xd8, 0xa6, 0xa4, 0x02, 0x5c, 0xed, 0x8d, 0x40, 0x4d, 0x30, 0x62, 0x7e, 0xd0, 0xd7, - 0x41, 0x4f, 0x20, 0x33, 0x74, 0x31, 0xc1, 0xb4, 0x92, 0xe3, 0x8b, 0xf4, 0xe6, 0xa4, 0xb3, 0x96, - 0x7d, 0xd4, 0x1c, 0x52, 0xcb, 0xb1, 0x49, 0x8b, 0x4b, 0xed, 0x28, 0xba, 0x94, 0x47, 0x8f, 0x21, - 0x67, 0xf6, 0x4e, 0x4d, 0xbb, 0x8b, 0x7b, 0x95, 0x3c, 0xff, 0xe5, 0xca, 0x59, 0xba, 0x3b, 0x8a, - 0xee, 0xcb, 0xa2, 0xcf, 0xa1, 0xc8, 0xa6, 0x6b, 0x38, 0xdc, 0x21, 0x52, 0x29, 0xdc, 0x4d, 0x9e, - 0xbf, 0x48, 0x7a, 0xe1, 0xd0, 0xff, 0x26, 0xe8, 0xff, 0xa0, 0x2c, 0xa6, 0xee, 0x1b, 0x28, 0x72, - 0x03, 0xf1, 0xab, 0xa5, 0x97, 0x48, 0x68, 0x44, 0x90, 0x06, 0xb3, 0x72, 0xea, 0xbe, 0x7a, 0x89, - 0xab, 0x9f, 0xbb, 0x6a, 0x7a, 0x59, 0x2a, 0x79, 0x66, 0x3e, 0x85, 0x92, 0x35, 0x30, 0x8f, 0x82, - 0x49, 0x94, 0xb9, 0x91, 0x00, 0x61, 0x75, 0xc6, 0x95, 0xca, 0x45, 0x2b, 0x18, 0x10, 0xf4, 0x10, - 0x72, 0x2f, 0xf0, 0xc1, 0xb1, 0xe3, 0x9c, 0x90, 0x8a, 0xca, 0xb5, 0x16, 0x7d, 0xad, 0xe7, 0x82, - 0xb1, 0xe1, 0xd8, 0x87, 0xd6, 0x91, 0xee, 0xcb, 0xad, 0xe7, 0x20, 0x23, 0x7e, 0x68, 0x3d, 0x0f, - 0x59, 0x47, 0xac, 0x69, 0xf5, 0x9f, 0x69, 0x50, 0x9f, 0xe3, 0x83, 0xc9, 0xd3, 0xa4, 0x42, 0x92, - 0xa1, 0x52, 0x9c, 0x23, 0xf6, 0x19, 0x39, 0x2a, 0x89, 0xe8, 0x51, 0x99, 0x44, 0x7c, 0x32, 0x8a, - 0xf8, 0x0f, 0x01, 0x99, 0x2f, 0x4c, 0x8b, 0x1a, 0x84, 0x9a, 0x2e, 0x35, 0x88, 0x75, 0x64, 0x9b, - 0xfd, 0x4a, 0x91, 0x8b, 0xa9, 0x9c, 0xd3, 0x66, 0x8c, 0x36, 0xa7, 0xfb, 0xb8, 0x4f, 0x5d, 0x11, - 0xf7, 0xe9, 0xab, 0xe1, 0x3e, 0x73, 0x2d, 0xdc, 0x67, 0xaf, 0x81, 0xfb, 0xdc, 0x35, 0x70, 0x9f, - 0xbf, 0x2e, 0xee, 0xe1, 0x7a, 0xb8, 0x2f, 0xbc, 0x0e, 0xdc, 0x97, 0xae, 0x84, 0xfb, 0xf2, 0x75, - 0x70, 0xff, 0x9b, 0x14, 0x54, 0x5a, 0xa6, 0x4b, 0xad, 0xae, 0x35, 0x34, 0x6d, 0x7a, 0x89, 0x6c, - 0xb2, 0x04, 0x39, 0xab, 0x87, 0x6d, 0x6a, 0xd1, 0xb1, 0xcc, 0x27, 0xfe, 0x18, 0xbd, 0x05, 0x45, - 0xd2, 0x75, 0x31, 0xb6, 0x0d, 0x72, 0x6c, 0xba, 0x58, 0x9e, 0x84, 0x82, 0xa0, 0xb5, 0x19, 0x29, - 0x04, 0x99, 0xd4, 0x85, 0x20, 0x33, 0x13, 0x0b, 0x99, 0xf4, 0x2b, 0x20, 0x33, 0x73, 0x0e, 0x64, - 0x32, 0xd7, 0x85, 0x4c, 0xf6, 0x7a, 0x90, 0xc9, 0xbd, 0x0e, 0xc8, 0xe4, 0xaf, 0x04, 0x19, 0xb8, - 0x20, 0x64, 0x42, 0x40, 0xf9, 0x5b, 0x1a, 0x6e, 0x77, 0x5c, 0xb3, 0x7b, 0x72, 0x95, 0x9b, 0xc7, - 0xdb, 0x50, 0x16, 0x61, 0x93, 0x32, 0x0b, 0x86, 0xd5, 0x93, 0x88, 0x11, 0x17, 0x0b, 0x6e, 0xb6, - 0xde, 0x63, 0x52, 0x22, 0x7a, 0xfa, 0x52, 0x49, 0x21, 0xc5, 0xa9, 0x9e, 0xd4, 0xbf, 0x29, 0x2c, - 0xe6, 0xae, 0x15, 0x16, 0x33, 0xd7, 0x08, 0x8b, 0xd9, 0xff, 0x5e, 0x07, 0xae, 0x82, 0xf1, 0xd9, - 0xeb, 0x84, 0xc5, 0xbf, 0x28, 0x80, 0x38, 0xe0, 0x2e, 0x01, 0xf2, 0x5b, 0x90, 0x8b, 0xc0, 0x3b, - 0x4b, 0x25, 0x66, 0x1f, 0x48, 0xcc, 0x26, 0xf9, 0x56, 0xde, 0xf2, 0x7d, 0xda, 0xb4, 0x5c, 0xdc, - 0xa5, 0xc1, 0x5a, 0xf8, 0x70, 0x7d, 0x07, 0x4a, 0x2f, 0xf0, 0x01, 0x71, 0xba, 0x27, 0x98, 0xf2, - 0x9b, 0x31, 0x43, 0x7b, 0x7e, 0x67, 0x46, 0x2f, 0xfa, 0x64, 0x76, 0x35, 0x0e, 0xcf, 0x37, 0x7d, - 0xd9, 0xf9, 0x56, 0xff, 0x90, 0x80, 0xb9, 0x29, 0x40, 0xa0, 0x8f, 0x21, 0xcf, 0x21, 0x44, 0xc7, - 0x43, 0x31, 0xc7, 0x72, 0x14, 0x7b, 0x42, 0xbc, 0x33, 0x1e, 0x62, 0x3d, 0x77, 0x28, 0xbf, 0x58, - 0x3a, 0x60, 0xdf, 0x43, 0x93, 0x1e, 0x7b, 0xe9, 0xc0, 0x1b, 0xa3, 0xf7, 0x41, 0xed, 0x59, 0xc4, - 0x3c, 0xe8, 0x63, 0x63, 0x60, 0xda, 0xd6, 0x21, 0x26, 0xe2, 0x44, 0xe4, 0xf4, 0x59, 0x49, 0xdf, - 0x95, 0x64, 0x74, 0x0f, 0x12, 0x64, 0x4d, 0xae, 0xd3, 0x5c, 0x00, 0x9b, 0xb5, 0xfd, 0x61, 0xdf, - 0x31, 0x7b, 0x3b, 0x33, 0x7a, 0x82, 0xac, 0xa1, 0x77, 0x21, 0x79, 0xd4, 0x1d, 0xca, 0x08, 0x80, - 0x7c, 0xa9, 0xed, 0x8d, 0x96, 0x2f, 0xc6, 0x04, 0xd0, 0x2a, 0xa4, 0xcd, 0x6f, 0x47, 0x2e, 0x9e, - 0x4a, 0x13, 0x35, 0x46, 0x5d, 0xef, 0x3b, 0x07, 0xbe, 0xbc, 0x10, 0x44, 0x0f, 0x20, 0x63, 0xf6, - 0xad, 0x66, 0xbb, 0x3d, 0x55, 0x35, 0xd4, 0x38, 0xd9, 0x97, 0x97, 0x62, 0xa1, 0xd5, 0xfc, 0x75, - 0x0a, 0xe6, 0x63, 0xe0, 0x8d, 0x9e, 0x42, 0x8e, 0x97, 0x6e, 0x5d, 0xa7, 0x2f, 0x97, 0xf3, 0xcd, - 0xf8, 0xe3, 0xd0, 0x92, 0x52, 0xba, 0x2f, 0x8f, 0xde, 0x83, 0x59, 0xb6, 0x88, 0x0c, 0x6e, 0xc6, - 0xd0, 0xc5, 0x87, 0xd6, 0x4b, 0xb9, 0xb6, 0x65, 0x8f, 0xdc, 0xe2, 0x54, 0x74, 0x0f, 0x4a, 0xc3, - 0xbe, 0x39, 0xee, 0x5b, 0x84, 0x0a, 0x70, 0xca, 0xc8, 0xe9, 0x11, 0x39, 0x40, 0x3f, 0x04, 0xc4, - 0x7e, 0xd8, 0x98, 0x94, 0x2c, 0x70, 0x49, 0x95, 0x71, 0x5a, 0x61, 0xe9, 0xf7, 0x41, 0xf5, 0x4e, - 0x73, 0x6f, 0xe4, 0x9a, 0xec, 0x5c, 0xf0, 0x15, 0x2f, 0xe9, 0xde, 0x29, 0xdf, 0x94, 0x64, 0x76, - 0xf0, 0x7d, 0x37, 0xc9, 0xe8, 0x90, 0xb9, 0x09, 0x7c, 0xa6, 0x67, 0x1c, 0xfc, 0x36, 0x97, 0x09, - 0x26, 0x21, 0xc6, 0xb1, 0x30, 0xc9, 0x9d, 0x07, 0x93, 0xf4, 0x85, 0x60, 0x92, 0xb9, 0x30, 0x4c, - 0xb2, 0x97, 0x87, 0x49, 0xfe, 0xb2, 0x30, 0xf9, 0x79, 0x02, 0xd4, 0xe8, 0xb1, 0x9f, 0x38, 0x3c, - 0xca, 0x05, 0x0e, 0x4f, 0xfa, 0xbc, 0x55, 0x49, 0x5c, 0x68, 0x55, 0x92, 0x17, 0x5e, 0x95, 0xd4, - 0xe5, 0x57, 0x25, 0x73, 0xd9, 0x55, 0xf9, 0x7b, 0x12, 0x0a, 0xa1, 0xb0, 0xce, 0x26, 0xdd, 0x35, - 0x87, 0x74, 0xe4, 0x62, 0xc3, 0xb2, 0x29, 0x76, 0x4f, 0x4d, 0x71, 0x78, 0x4a, 0xfa, 0xac, 0xa4, - 0xd7, 0x25, 0x19, 0x2d, 0x40, 0xfa, 0x85, 0xd5, 0x93, 0x51, 0x27, 0xad, 0x8b, 0x01, 0x5a, 0x84, - 0xcc, 0x31, 0xb6, 0x8e, 0x8e, 0x29, 0x9f, 0x68, 0x5a, 0x97, 0xa3, 0xb8, 0x13, 0x95, 0x8a, 0x3d, - 0x51, 0xb5, 0x69, 0x4c, 0xa7, 0x23, 0xc1, 0x90, 0x3b, 0x7c, 0x0e, 0x9e, 0x1f, 0x41, 0x41, 0x24, - 0x32, 0x16, 0x33, 0xbb, 0xf2, 0x0e, 0x30, 0x3f, 0xa9, 0xbe, 0xc1, 0x58, 0x3a, 0x58, 0xfe, 0x77, - 0xec, 0x7e, 0x67, 0xcf, 0xdb, 0xef, 0xdc, 0x85, 0xf6, 0x3b, 0x7f, 0xe1, 0xfd, 0x86, 0xcb, 0xef, - 0x77, 0xe1, 0xb2, 0xfb, 0xfd, 0x5d, 0x0a, 0x72, 0x9e, 0x9f, 0xbc, 0xa8, 0xee, 0x76, 0x31, 0x21, - 0xc6, 0x09, 0x1e, 0x4b, 0xfc, 0xe7, 0x05, 0xe5, 0x2b, 0x3c, 0x66, 0x5b, 0x49, 0x70, 0xd7, 0xc5, - 0x7e, 0xdb, 0x4a, 0x8c, 0x58, 0xcc, 0x23, 0x98, 0x10, 0xcb, 0xb1, 0x0d, 0xea, 0x9c, 0x60, 0x5b, - 0x46, 0xb2, 0xa2, 0x24, 0x76, 0x18, 0x0d, 0xbd, 0x0b, 0xb3, 0x26, 0x21, 0xa3, 0x01, 0x36, 0x5c, - 0xa7, 0x8f, 0x0d, 0xd3, 0xb5, 0x79, 0xbd, 0x9d, 0xd7, 0x4b, 0x82, 0xac, 0x3b, 0x7d, 0x5c, 0x73, - 0x6d, 0xf4, 0x31, 0xdc, 0x0c, 0xcb, 0xe1, 0x97, 0x14, 0xbb, 0xb6, 0xd9, 0x67, 0xb9, 0xbc, 0xc4, - 0xe5, 0x17, 0x02, 0x79, 0x4d, 0x32, 0xeb, 0x3d, 0xe6, 0x9b, 0x8b, 0x8f, 0x58, 0x68, 0x14, 0x01, - 0x57, 0x8e, 0xd8, 0x81, 0xc6, 0x76, 0x6f, 0xe8, 0x58, 0x36, 0x95, 0xf8, 0xf2, 0xc7, 0x4c, 0xe7, - 0x60, 0xc4, 0x32, 0xb8, 0x6c, 0x77, 0xc9, 0x11, 0xba, 0x0f, 0xea, 0xa1, 0xe3, 0x76, 0xb1, 0xc1, - 0x8e, 0xbd, 0x41, 0xe8, 0x58, 0xf6, 0xbc, 0x72, 0x7a, 0x99, 0xd3, 0x5b, 0x26, 0x3d, 0x6e, 0x33, - 0x2a, 0xfa, 0x0c, 0x72, 0x03, 0x4c, 0xcd, 0x9e, 0x49, 0x4d, 0x59, 0x84, 0xdc, 0x99, 0xda, 0xfd, - 0x95, 0x5d, 0x29, 0xa1, 0xd9, 0xd4, 0x1d, 0xeb, 0xbe, 0x02, 0xaa, 0x40, 0x96, 0x9a, 0x47, 0x47, - 0x96, 0x7d, 0xc4, 0x91, 0xc3, 0x6e, 0x29, 0x62, 0x88, 0x1e, 0xc0, 0x7c, 0xd7, 0xb1, 0x29, 0x8f, - 0xf8, 0x16, 0xe1, 0x97, 0x7c, 0x36, 0xb3, 0x3c, 0x97, 0x42, 0x92, 0xb5, 0x19, 0x70, 0xd0, 0x32, - 0xa4, 0x87, 0xae, 0xf3, 0x72, 0x2c, 0x21, 0x13, 0xdc, 0xd0, 0x5a, 0x8c, 0x2a, 0x6f, 0x1e, 0x42, - 0x64, 0xe9, 0x33, 0x28, 0x4d, 0x78, 0x84, 0x54, 0x48, 0x06, 0xdb, 0xcd, 0x3e, 0xd9, 0x49, 0x3e, - 0x35, 0xfb, 0x23, 0x2c, 0xf7, 0x59, 0x0c, 0x9e, 0x26, 0x9e, 0x28, 0xd5, 0x6f, 0x20, 0xef, 0xe3, - 0x15, 0xdd, 0x85, 0x42, 0xd7, 0xc5, 0xbc, 0xd4, 0x34, 0xfb, 0x44, 0x1a, 0x08, 0x93, 0x42, 0x2b, - 0x9c, 0x98, 0x58, 0x61, 0xdf, 0xdf, 0xe4, 0x2b, 0xfd, 0xad, 0xfe, 0x08, 0x66, 0x23, 0xc0, 0x67, - 0x55, 0xad, 0xd9, 0xed, 0x3a, 0x23, 0x9b, 0x86, 0x2f, 0x80, 0x05, 0x49, 0xe3, 0x49, 0xf3, 0x0e, - 0x78, 0x43, 0x8e, 0x65, 0xf1, 0xf3, 0x20, 0x49, 0x0c, 0xcc, 0xef, 0x40, 0x99, 0x2d, 0xa4, 0x69, - 0xd9, 0xd8, 0x0d, 0x67, 0xea, 0x92, 0x4f, 0x65, 0x76, 0xaa, 0x3f, 0x55, 0xa0, 0x18, 0x3e, 0x44, - 0x57, 0x3d, 0x23, 0xaf, 0x11, 0x9f, 0xd5, 0xe7, 0x50, 0x08, 0xad, 0x53, 0x4c, 0x73, 0x6c, 0x09, - 0x72, 0x23, 0xc2, 0x4e, 0xc6, 0xc0, 0xdb, 0x42, 0x7f, 0xcc, 0x78, 0x43, 0x93, 0x90, 0x17, 0x8e, - 0xeb, 0x55, 0x75, 0xfe, 0xb8, 0xfa, 0x1c, 0x8a, 0xe1, 0xb2, 0x02, 0xad, 0x4d, 0xdd, 0x98, 0x6e, - 0x46, 0xea, 0x8f, 0x98, 0xab, 0x12, 0x82, 0xd4, 0xc8, 0xed, 0x93, 0x4a, 0xe2, 0x6e, 0xf2, 0x7e, - 0x5e, 0xe7, 0xdf, 0xd5, 0xdf, 0x27, 0x61, 0x36, 0x52, 0x2d, 0x05, 0xe9, 0x42, 0x89, 0x4f, 0x17, - 0x89, 0x89, 0x74, 0xb1, 0x00, 0xe9, 0x1e, 0x1e, 0xd2, 0x63, 0x99, 0x45, 0xc4, 0x00, 0xbd, 0x01, - 0xf9, 0x43, 0xd7, 0x1c, 0x60, 0xd7, 0xa4, 0x22, 0x3d, 0xa6, 0xf5, 0x80, 0xc0, 0xc2, 0xbe, 0x28, - 0x76, 0x45, 0xd8, 0x4f, 0x47, 0xc2, 0x3e, 0x6f, 0x97, 0xcb, 0xb0, 0x6f, 0xfa, 0xdf, 0x2c, 0x9a, - 0x09, 0xad, 0x03, 0x8b, 0x72, 0xbb, 0x19, 0x6e, 0x57, 0x54, 0xc8, 0xeb, 0x82, 0x16, 0x08, 0x7d, - 0x33, 0x32, 0xfb, 0x16, 0x1d, 0xf3, 0x90, 0xe7, 0x09, 0x7d, 0x5f, 0xd0, 0x58, 0x8a, 0x13, 0x42, - 0x87, 0x2e, 0x2b, 0x5b, 0xec, 0xee, 0x98, 0xe7, 0x8f, 0xb4, 0x2e, 0x6a, 0xf0, 0x2d, 0x8f, 0xca, - 0x1c, 0x15, 0xf5, 0xb6, 0x70, 0x34, 0x17, 0x71, 0xf4, 0x19, 0xe3, 0x49, 0x47, 0x4f, 0xfd, 0x6f, - 0xe6, 0x83, 0xd0, 0xf2, 0x1c, 0xcd, 0x0b, 0x1f, 0x38, 0x31, 0xe4, 0xa8, 0x10, 0xf2, 0x1c, 0x2d, - 0x86, 0x84, 0x3c, 0x47, 0x3f, 0x04, 0x74, 0x82, 0xc7, 0x06, 0x5f, 0xb9, 0x20, 0xcd, 0xb3, 0x58, - 0xa2, 0xe8, 0xea, 0x09, 0x1e, 0x6f, 0x31, 0x86, 0x97, 0xe7, 0xab, 0x5f, 0xc2, 0xfc, 0xfe, 0xb0, - 0x67, 0x52, 0xdc, 0xe0, 0xaf, 0x16, 0xa1, 0x92, 0x4c, 0xbc, 0x9f, 0xb0, 0x50, 0x2d, 0xef, 0x4e, - 0x82, 0x20, 0xc2, 0x73, 0xdc, 0x8b, 0x47, 0xf5, 0xc7, 0x8a, 0x67, 0x4c, 0xe0, 0xe9, 0x42, 0xc6, - 0x58, 0x2a, 0xe9, 0xf5, 0x64, 0x55, 0x6a, 0x84, 0xc0, 0x56, 0x32, 0x7b, 0x3d, 0x01, 0xdd, 0x7d, - 0xb7, 0x4f, 0xd8, 0xb4, 0x5c, 0x3c, 0x70, 0x4e, 0xf1, 0x84, 0x68, 0x92, 0x8b, 0xaa, 0x82, 0x13, - 0x48, 0x57, 0x31, 0xcc, 0x35, 0x2c, 0x72, 0x99, 0xc6, 0xdb, 0x84, 0x93, 0x89, 0xe9, 0x19, 0x9b, - 0x5d, 0x6a, 0x9d, 0x7a, 0x3d, 0x37, 0x39, 0xaa, 0xfe, 0x3f, 0xa0, 0xf0, 0xcf, 0x90, 0xa1, 0x63, - 0x13, 0x76, 0xc7, 0x4f, 0x5b, 0x14, 0x0f, 0x58, 0x10, 0x65, 0x59, 0x24, 0xd8, 0x7b, 0x21, 0x57, - 0xb7, 0x0f, 0x1d, 0x5d, 0x48, 0x54, 0x57, 0x61, 0xae, 0x4d, 0x9d, 0xe1, 0x94, 0x9f, 0x67, 0xae, - 0x57, 0xf5, 0x77, 0x79, 0x80, 0xc0, 0xce, 0xf9, 0x6b, 0x7b, 0x13, 0xb2, 0x7c, 0xc2, 0xfe, 0x8c, - 0x32, 0x6c, 0x58, 0xef, 0x4d, 0xae, 0x44, 0x29, 0xb2, 0x12, 0x4f, 0xa1, 0x40, 0x9c, 0x11, 0x4b, - 0x99, 0xbc, 0x58, 0x5d, 0xe2, 0x00, 0xbe, 0x15, 0x99, 0x44, 0x9b, 0x4b, 0xf0, 0x6a, 0x15, 0x88, - 0xff, 0x8d, 0x3e, 0x82, 0x0c, 0xa1, 0x26, 0x1d, 0x11, 0xbe, 0x50, 0xe5, 0xd0, 0xe5, 0x45, 0xaa, - 0x71, 0xa6, 0x2e, 0x85, 0x58, 0xfc, 0xe5, 0x4d, 0x7b, 0xdc, 0x33, 0x4c, 0xca, 0x31, 0x9a, 0xd4, - 0xf3, 0x92, 0x52, 0xa3, 0xac, 0xf6, 0xc7, 0x76, 0x4f, 0x30, 0x0b, 0x9c, 0x99, 0xe5, 0xe3, 0x1a, - 0x7f, 0x5d, 0x1b, 0x71, 0xa8, 0x71, 0x26, 0x12, 0x9a, 0x92, 0x52, 0xa3, 0x2c, 0x1d, 0xf7, 0x30, - 0x35, 0xad, 0x3e, 0xa9, 0xdc, 0x10, 0xe9, 0x58, 0x0e, 0x59, 0xec, 0xc1, 0xae, 0xeb, 0xb8, 0x32, - 0x01, 0x8b, 0x01, 0x33, 0xc7, 0x3f, 0xf8, 0xa1, 0xad, 0x2c, 0x8a, 0xe0, 0xc3, 0x29, 0xec, 0x78, - 0xa2, 0x06, 0x94, 0xf9, 0x7a, 0x75, 0xbd, 0x2e, 0x9d, 0xbc, 0xbe, 0xdf, 0xf3, 0xa7, 0x77, 0xf6, - 0xeb, 0xe1, 0xce, 0x8c, 0x5e, 0x72, 0xc3, 0x5c, 0xf4, 0x11, 0x24, 0x5f, 0xe0, 0x83, 0x4a, 0x39, - 0xd2, 0xb6, 0x88, 0x3e, 0x94, 0xb0, 0x2b, 0xe4, 0x0b, 0x7c, 0x80, 0x34, 0x28, 0x0c, 0x83, 0x5e, - 0x72, 0x65, 0x9e, 0xab, 0xbd, 0x15, 0x64, 0xd9, 0x33, 0xfa, 0xcc, 0x3b, 0x33, 0x7a, 0x58, 0x0f, - 0x35, 0x61, 0x56, 0x34, 0x52, 0x82, 0x49, 0x88, 0x4a, 0xef, 0x6d, 0xdf, 0xd4, 0x39, 0x9d, 0xc8, - 0x9d, 0x19, 0xbd, 0x4c, 0x27, 0xd8, 0x68, 0x0d, 0xd2, 0x9c, 0x22, 0xeb, 0x92, 0xdb, 0x93, 0x66, - 0xa2, 0xda, 0x42, 0x16, 0x7d, 0x1c, 0x79, 0x40, 0x8c, 0xe6, 0x20, 0x06, 0x6a, 0x76, 0xa4, 0x78, - 0xd7, 0x4f, 0xf1, 0x7b, 0x86, 0x1f, 0xc8, 0x56, 0x4f, 0xf4, 0x56, 0xce, 0xea, 0x04, 0xa6, 0x22, - 0xc5, 0x45, 0x9b, 0xe7, 0x93, 0x50, 0x83, 0xb1, 0x18, 0xed, 0x4b, 0x4a, 0x46, 0x48, 0x29, 0xe8, - 0x2c, 0x3e, 0xf5, 0x1b, 0x75, 0x2e, 0x26, 0xa3, 0x3e, 0xf5, 0xda, 0x5d, 0xf3, 0x31, 0x4e, 0x7a, - 0x6d, 0x3a, 0x5d, 0x48, 0xa2, 0x47, 0xb2, 0x47, 0xe8, 0x69, 0x8a, 0x77, 0xb3, 0x69, 0x4f, 0x45, - 0x6b, 0xd0, 0xd3, 0xfa, 0x22, 0x68, 0xee, 0x79, 0x8a, 0x73, 0xd1, 0xde, 0x60, 0xc8, 0x63, 0xbf, - 0xab, 0xe7, 0xe9, 0x3f, 0xf1, 0xba, 0x7a, 0x9e, 0xf6, 0x42, 0xc4, 0x61, 0x5e, 0x0e, 0x09, 0x5d, - 0xd1, 0xd4, 0xf3, 0x34, 0x3f, 0x80, 0x39, 0xaf, 0x10, 0x32, 0xfa, 0x4e, 0x57, 0x74, 0x22, 0x6e, - 0x8a, 0xae, 0x85, 0xc7, 0x68, 0x48, 0x3a, 0x5a, 0x81, 0xf9, 0x03, 0xb3, 0x7b, 0x32, 0x1a, 0x1a, - 0x84, 0x3a, 0x2e, 0xfb, 0xbd, 0x11, 0xc1, 0xbd, 0xca, 0x2d, 0x1e, 0x0c, 0xe7, 0x04, 0xab, 0x2d, - 0x38, 0xfb, 0x04, 0xf7, 0xd6, 0xf3, 0x90, 0x75, 0xc5, 0xce, 0xb3, 0xea, 0x44, 0xf8, 0x56, 0xfd, - 0x1c, 0xca, 0x93, 0x7b, 0x8c, 0xde, 0x83, 0x94, 0x65, 0x1f, 0x3a, 0x53, 0x71, 0x32, 0xb4, 0xca, - 0x5c, 0xe0, 0x69, 0xa2, 0xa2, 0x54, 0xff, 0xa1, 0x00, 0x04, 0x8c, 0xf8, 0x57, 0xc4, 0x50, 0x30, - 0x49, 0x9c, 0x17, 0x4c, 0x92, 0x93, 0xc1, 0x64, 0x09, 0x72, 0x13, 0xcd, 0x98, 0xa4, 0xee, 0x8f, - 0xd1, 0x43, 0x3f, 0xa2, 0x89, 0x2b, 0xc7, 0x52, 0x8c, 0x97, 0x2b, 0x91, 0xb0, 0xe6, 0xc7, 0x98, - 0x4c, 0x28, 0xc6, 0x54, 0x57, 0x20, 0x23, 0xe4, 0x10, 0x40, 0xa6, 0xb6, 0xd1, 0xa9, 0x3f, 0xd3, - 0xd4, 0x19, 0x54, 0x84, 0xdc, 0x56, 0x7d, 0xaf, 0xde, 0xde, 0xd1, 0x36, 0x55, 0x85, 0x71, 0xb6, - 0x6a, 0xf5, 0x86, 0xb6, 0xa9, 0x26, 0xaa, 0xdf, 0x29, 0x90, 0xf3, 0x50, 0xe3, 0xf5, 0x32, 0xc2, - 0xa9, 0xcb, 0x1b, 0xbf, 0xa6, 0x89, 0x67, 0x22, 0x13, 0x47, 0x90, 0x22, 0xd6, 0xb7, 0x58, 0x2e, - 0x08, 0xff, 0x66, 0xf2, 0x3e, 0x56, 0xc4, 0x35, 0xd6, 0x1f, 0x57, 0xff, 0x94, 0x80, 0x62, 0x18, - 0xab, 0xd3, 0xdd, 0x33, 0xe5, 0xc2, 0xdd, 0xb3, 0xdc, 0x19, 0xdd, 0xb3, 0xb0, 0xbf, 0x89, 0x33, - 0xfc, 0x4d, 0x86, 0xfc, 0xfd, 0x00, 0xe6, 0x7c, 0xc3, 0xbe, 0xe3, 0xe2, 0x66, 0xae, 0x7a, 0x0c, - 0x1f, 0xe4, 0x8f, 0x60, 0x71, 0xd2, 0x15, 0x5f, 0x43, 0xa4, 0x8a, 0x85, 0xb0, 0x3b, 0xbe, 0x16, - 0xaf, 0x97, 0xc5, 0x09, 0xe6, 0xe5, 0x08, 0x5f, 0x97, 0x24, 0xab, 0x97, 0x39, 0x71, 0x83, 0xd1, - 0x22, 0x3b, 0x94, 0x39, 0x6f, 0x87, 0xb2, 0x13, 0x3b, 0x54, 0xfd, 0x89, 0x02, 0x10, 0x9c, 0xe1, - 0x8b, 0x37, 0x5a, 0xee, 0x04, 0x5d, 0x12, 0xe6, 0x94, 0xc2, 0xad, 0x7a, 0x0d, 0x91, 0x69, 0x97, - 0x2e, 0x01, 0x9a, 0xea, 0x2f, 0x12, 0x70, 0xa3, 0x36, 0xa2, 0xce, 0x54, 0xe2, 0x09, 0xbd, 0xcc, - 0x28, 0xd7, 0x78, 0x7d, 0x4c, 0x5c, 0xe3, 0xf5, 0x31, 0x79, 0xb9, 0x97, 0x99, 0x98, 0xb7, 0x95, - 0xd4, 0xe5, 0xdf, 0x56, 0xc2, 0x4f, 0x1c, 0x3f, 0x4b, 0xc0, 0x2c, 0x5b, 0x9c, 0x50, 0x0e, 0xfc, - 0x8f, 0xef, 0x43, 0x2e, 0xaf, 0xcb, 0x82, 0x31, 0x78, 0xe2, 0x40, 0x0b, 0xa0, 0x6e, 0x6a, 0x5b, - 0xb5, 0xfd, 0x46, 0xc7, 0xd8, 0xaa, 0x37, 0xb4, 0xce, 0x0f, 0x5a, 0x2c, 0x18, 0x66, 0x21, 0xb9, - 0xdb, 0x7a, 0xa4, 0x2a, 0xec, 0xa3, 0xb9, 0xbd, 0xad, 0x26, 0x04, 0x65, 0x4d, 0x4d, 0x2e, 0xef, - 0xc1, 0x8d, 0xd8, 0xbe, 0x3e, 0xba, 0x07, 0x77, 0x3c, 0x4b, 0x6d, 0x6d, 0x7b, 0x57, 0xdb, 0xeb, - 0x68, 0x9b, 0xdc, 0xa6, 0xd1, 0xd2, 0x9b, 0x9d, 0xe6, 0x46, 0xb3, 0xa1, 0xce, 0x20, 0x15, 0x8a, - 0x3b, 0x8d, 0x76, 0x40, 0x51, 0x96, 0x1f, 0x44, 0xde, 0x15, 0x64, 0x77, 0x31, 0x0f, 0xe9, 0xfa, - 0xde, 0xa6, 0xf6, 0xb5, 0x3a, 0x83, 0x4a, 0x90, 0xef, 0xd4, 0x77, 0xb5, 0x76, 0xa7, 0xb6, 0xdb, - 0x52, 0x95, 0xe5, 0x43, 0x98, 0x8d, 0xb4, 0x26, 0xd1, 0x22, 0xa0, 0xfa, 0x6e, 0x6d, 0x5b, 0x33, - 0xda, 0xfb, 0x5b, 0x5b, 0xf5, 0xaf, 0x0d, 0x4f, 0x73, 0x09, 0x16, 0x27, 0xe8, 0x21, 0x33, 0xe8, - 0x0e, 0xdc, 0x9e, 0xe0, 0xed, 0x35, 0xf7, 0x34, 0xa3, 0xf9, 0x4c, 0xd3, 0x9f, 0xeb, 0xf5, 0x8e, - 0xa6, 0x26, 0x96, 0x3f, 0xf5, 0xd2, 0xa4, 0x3f, 0xc3, 0xd0, 0x5a, 0x85, 0xa6, 0x94, 0x83, 0x94, - 0xde, 0xe1, 0x26, 0xb3, 0x90, 0x6c, 0xeb, 0x1d, 0x35, 0xb1, 0xbc, 0x0f, 0x85, 0xd0, 0xdf, 0xc6, - 0x10, 0x82, 0xb2, 0xa7, 0xb7, 0x5b, 0xff, 0xba, 0xbe, 0xb7, 0xad, 0xce, 0x30, 0x97, 0x37, 0xf7, - 0x6b, 0x0d, 0x63, 0x63, 0xa7, 0xb6, 0xb7, 0xa7, 0x35, 0x8c, 0xda, 0xb6, 0xb6, 0xd7, 0x51, 0x15, - 0xe6, 0xf2, 0x24, 0xbd, 0xd1, 0xd1, 0xf4, 0xbd, 0x1a, 0xf7, 0xe8, 0x8f, 0x0a, 0xdc, 0x88, 0x3d, - 0xc0, 0x7c, 0x59, 0x1f, 0x3e, 0x7e, 0x64, 0x7c, 0xf2, 0x70, 0xb5, 0x65, 0xac, 0xad, 0xca, 0x85, - 0xf6, 0x29, 0x8f, 0x57, 0x55, 0x05, 0xcd, 0x41, 0x89, 0x53, 0xfe, 0x77, 0xf5, 0x89, 0x10, 0x4a, - 0x44, 0x48, 0x8f, 0x57, 0xd5, 0x24, 0xba, 0x05, 0x37, 0x5a, 0x4d, 0xbd, 0xa3, 0xd7, 0xea, 0x1d, - 0x63, 0xc2, 0x64, 0xea, 0x0c, 0xd6, 0xe3, 0x55, 0x35, 0xcd, 0xbc, 0x9e, 0x64, 0xf9, 0x3f, 0x92, - 0x39, 0x8b, 0xf7, 0x78, 0x55, 0xcd, 0x2e, 0xff, 0x4a, 0x81, 0x62, 0xb8, 0x20, 0x41, 0xf3, 0x30, - 0xab, 0x6d, 0xeb, 0x5a, 0xbb, 0x6d, 0xb4, 0x3b, 0x35, 0xbd, 0x23, 0xd6, 0x6a, 0x0e, 0x4a, 0x92, - 0x28, 0xb3, 0xb5, 0x12, 0x22, 0x69, 0x7b, 0x9b, 0x4c, 0x2a, 0x11, 0x52, 0xdd, 0x68, 0xee, 0xb6, - 0x1a, 0x5a, 0x47, 0x53, 0x93, 0x21, 0x39, 0x99, 0xce, 0x53, 0x6c, 0x37, 0x3c, 0x6b, 0xeb, 0x4d, - 0xbd, 0xa3, 0x6d, 0xaa, 0x69, 0x54, 0x81, 0x05, 0x49, 0x6b, 0xd4, 0x77, 0xeb, 0x1d, 0x43, 0xd7, - 0x6a, 0x1b, 0xec, 0x22, 0x90, 0x59, 0xfe, 0x12, 0xd4, 0x68, 0xa1, 0xc5, 0x66, 0xe4, 0x39, 0xd9, - 0xdc, 0xd7, 0x37, 0x34, 0x83, 0x9d, 0x1a, 0xe3, 0xb9, 0xb6, 0x2e, 0x20, 0x17, 0xc3, 0x6b, 0x6f, - 0x7e, 0xa5, 0x2a, 0x0f, 0x7f, 0x99, 0x86, 0x8c, 0x0c, 0x45, 0x1d, 0xa8, 0xf0, 0x3f, 0x43, 0xc5, - 0x94, 0x2b, 0xe8, 0x22, 0xc5, 0xcc, 0x52, 0x5c, 0x31, 0x8b, 0xbe, 0xc7, 0x20, 0x6b, 0xba, 0xd4, - 0xaf, 0x60, 0xd0, 0xd9, 0x55, 0x4d, 0xbc, 0x85, 0x16, 0x2c, 0x72, 0x0b, 0xd3, 0x39, 0xe5, 0xd5, - 0x85, 0x4e, 0xbc, 0xc5, 0x67, 0x70, 0x8b, 0x5b, 0x8c, 0xab, 0x69, 0xd0, 0x85, 0x4a, 0x9e, 0x78, - 0xbb, 0x9b, 0xa0, 0x06, 0x76, 0xa5, 0xb9, 0xf3, 0x4a, 0x9f, 0x78, 0x2b, 0x35, 0x28, 0x86, 0xdb, - 0x2e, 0x28, 0xc8, 0x37, 0x31, 0xdd, 0x98, 0x57, 0x98, 0x10, 0xd1, 0x62, 0xca, 0xc4, 0x44, 0x0f, - 0x26, 0xde, 0x84, 0x06, 0x10, 0xb4, 0x2f, 0x50, 0x90, 0x35, 0xa7, 0x5a, 0x27, 0x4b, 0xb7, 0x63, - 0x79, 0xb2, 0xdf, 0xf1, 0x39, 0xbb, 0x98, 0x7b, 0x4d, 0x0c, 0x14, 0xbe, 0x20, 0x47, 0x3a, 0x1b, - 0xb1, 0x5e, 0xac, 0x6f, 0xfd, 0xf0, 0xde, 0x91, 0x45, 0x8f, 0x47, 0x07, 0x2b, 0x5d, 0x67, 0xf0, - 0x40, 0x0a, 0x3c, 0xf0, 0x5a, 0x90, 0x1e, 0xe1, 0xb7, 0x89, 0x52, 0xc3, 0x3a, 0xc5, 0x5f, 0x89, - 0xbe, 0x32, 0x75, 0xfe, 0x9a, 0x28, 0xcb, 0xf1, 0xd3, 0xa7, 0x9c, 0x70, 0x90, 0xe1, 0x2a, 0x6b, - 0xff, 0x0a, 0x00, 0x00, 0xff, 0xff, 0xc7, 0xa9, 0x24, 0x1b, 0x02, 0x2c, 0x00, 0x00, + // 3310 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5a, 0x4b, 0x73, 0xdb, 0xd6, + 0x15, 0x16, 0xf8, 0xe6, 0xe1, 0x43, 0xd0, 0x95, 0x2c, 0xd3, 0x72, 0x12, 0x3b, 0x74, 0xe2, 0x38, + 0x8a, 0x23, 0xab, 0x96, 0xe3, 0x38, 0x4e, 0x93, 0x96, 0x92, 0x20, 0x89, 0x09, 0x25, 0xb2, 0x20, + 0x65, 0xa7, 0xdd, 0x60, 0x20, 0xf2, 0x8a, 0xc2, 0x08, 0x04, 0x18, 0xe0, 0x52, 0x32, 0xf3, 0x0b, + 0xb2, 0xec, 0xb4, 0xbb, 0x4e, 0x3b, 0xdd, 0x74, 0xba, 0xe8, 0x74, 0xdb, 0xe9, 0x1f, 0xe8, 0xaa, + 0x5d, 0x74, 0xd1, 0xe9, 0x1f, 0xe8, 0xb2, 0x9d, 0x76, 0xd7, 0x7d, 0xe7, 0x3e, 0xf0, 0x20, 0x08, + 0xc9, 0x92, 0xe5, 0x99, 0x2e, 0xda, 0x1d, 0xee, 0x79, 0xf1, 0xdc, 0x83, 0xef, 0x9e, 0x73, 0xcf, + 0x01, 0x61, 0xc1, 0x34, 0x4e, 0xf0, 0xb1, 0x41, 0x34, 0xdc, 0x77, 0xb0, 0xeb, 0xae, 0x0c, 0x1d, + 0x9b, 0xd8, 0x28, 0x2b, 0xa8, 0x4b, 0x3e, 0x7b, 0x60, 0xf7, 0xb0, 0x29, 0xd8, 0x4b, 0x0b, 0xa6, + 0xdd, 0xef, 0x63, 0xe7, 0x81, 0x3d, 0x24, 0x86, 0x6d, 0x09, 0x6a, 0xf5, 0xaf, 0x19, 0x58, 0x52, + 0x6d, 0x7b, 0xb0, 0x61, 0x0f, 0x86, 0xb6, 0x6b, 0x10, 0xac, 0x30, 0x93, 0x2a, 0xfe, 0x7a, 0x84, + 0x5d, 0x82, 0x6e, 0x42, 0xde, 0xb1, 0xed, 0x81, 0x66, 0xe9, 0x03, 0x5c, 0x91, 0x6e, 0x4b, 0xf7, + 0xf2, 0x6a, 0x8e, 0x12, 0xf6, 0xf4, 0x01, 0x46, 0x8b, 0x90, 0x31, 0xf5, 0xb1, 0x3d, 0x22, 0x95, + 0x04, 0xe3, 0x88, 0x15, 0x7a, 0x13, 0x40, 0x1f, 0xf5, 0x0c, 0x5b, 0xb3, 0x2d, 0x73, 0x5c, 0x49, + 0xde, 0x96, 0xee, 0xe5, 0xd4, 0x3c, 0xa3, 0x34, 0x2d, 0x73, 0x8c, 0x3e, 0x86, 0x22, 0x67, 0x0f, + 0x8c, 0x17, 0x86, 0xd5, 0xaf, 0xcc, 0xde, 0x96, 0xee, 0x95, 0x1f, 0x2e, 0xac, 0x08, 0xaf, 0x57, + 0x6a, 0x94, 0xb9, 0xcb, 0x78, 0x6a, 0x41, 0x0f, 0x16, 0xd4, 0xee, 0x89, 0xd1, 0xc3, 0xc2, 0x6e, + 0x8a, 0xdb, 0x65, 0x14, 0x66, 0xf7, 0x2e, 0xcc, 0x76, 0x47, 0x2e, 0xb1, 0x07, 0xda, 0x81, 0xee, + 0x62, 0x6d, 0xe4, 0x98, 0x95, 0x34, 0xf3, 0xab, 0xc4, 0xc9, 0xeb, 0xba, 0x8b, 0xf7, 0x1d, 0x13, + 0x3d, 0x82, 0xd4, 0xa1, 0x61, 0xe2, 0x4a, 0xe6, 0xb6, 0x74, 0xaf, 0xf0, 0x70, 0xc9, 0xff, 0x5d, + 0xc5, 0xea, 0xda, 0x3d, 0xdc, 0xdb, 0x32, 0x4c, 0xdc, 0x1c, 0x91, 0xe1, 0x88, 0xac, 0x27, 0x2a, + 0xd2, 0xce, 0x8c, 0xca, 0xa4, 0xd1, 0x1a, 0x64, 0x5c, 0xe2, 0x60, 0x7d, 0x50, 0xc9, 0x32, 0xbd, + 0x6b, 0xbe, 0x5e, 0x9b, 0x91, 0x27, 0x54, 0x84, 0x28, 0xfa, 0x1c, 0x72, 0x2e, 0xee, 0x0f, 0xb0, + 0x45, 0xdc, 0x0a, 0x30, 0xb5, 0x37, 0x02, 0x35, 0xce, 0x88, 0xf9, 0x41, 0x5f, 0x07, 0x3d, 0x81, + 0xcc, 0xd0, 0xc1, 0x2e, 0x26, 0x95, 0x1c, 0x0b, 0xd2, 0x5b, 0x93, 0xce, 0x1a, 0x56, 0xbf, 0xc9, + 0xdf, 0x66, 0x8b, 0x49, 0xed, 0x48, 0xaa, 0x90, 0x47, 0x8f, 0x21, 0xa7, 0xf7, 0x4e, 0x74, 0xab, + 0x8b, 0x7b, 0x95, 0x3c, 0xfb, 0xe5, 0xca, 0x59, 0xba, 0x3b, 0x92, 0xea, 0xcb, 0xa2, 0xcf, 0xa0, + 0x48, 0xb7, 0xab, 0xd9, 0xcc, 0x21, 0xb7, 0x52, 0xb8, 0x9d, 0x3c, 0x3f, 0x48, 0x6a, 0xe1, 0xd0, + 0x7f, 0x76, 0xd1, 0x77, 0xa1, 0xcc, 0xb7, 0xee, 0x1b, 0x28, 0x32, 0x03, 0xf1, 0xd1, 0x52, 0x4b, + 0x6e, 0x68, 0xe5, 0x22, 0x05, 0x66, 0xc5, 0xd6, 0x7d, 0xf5, 0x12, 0x53, 0x3f, 0x37, 0x6a, 0x6a, + 0x59, 0x28, 0x79, 0x66, 0x3e, 0x81, 0x92, 0x31, 0xd0, 0xfb, 0xc1, 0x26, 0xca, 0xcc, 0x48, 0x80, + 0xb0, 0x3a, 0xe5, 0x0a, 0xe5, 0xa2, 0x11, 0x2c, 0x5c, 0xf4, 0x10, 0x72, 0xa7, 0xf8, 0xe0, 0xc8, + 0xb6, 0x8f, 0xdd, 0x8a, 0xcc, 0xb4, 0x16, 0x7d, 0xad, 0xe7, 0x9c, 0xb1, 0x61, 0x5b, 0x87, 0x46, + 0x5f, 0xf5, 0xe5, 0xd6, 0x73, 0x90, 0xe1, 0x3f, 0xb4, 0x9e, 0x87, 0xac, 0x38, 0x5d, 0xd5, 0x7f, + 0xa7, 0x41, 0x7e, 0x8e, 0x0f, 0x26, 0x4f, 0x93, 0x0c, 0x49, 0x8a, 0x4a, 0x7e, 0x8e, 0xe8, 0x63, + 0xe4, 0xa8, 0x24, 0xa2, 0x47, 0x65, 0x12, 0xf1, 0xc9, 0x28, 0xe2, 0xef, 0x03, 0xd2, 0x4f, 0x75, + 0x83, 0x68, 0x2e, 0xd1, 0x1d, 0xa2, 0xb9, 0x46, 0xdf, 0xd2, 0xcd, 0x4a, 0x91, 0x89, 0xc9, 0x8c, + 0xd3, 0xa6, 0x8c, 0x36, 0xa3, 0xfb, 0xb8, 0x4f, 0xbd, 0x22, 0xee, 0xd3, 0xaf, 0x86, 0xfb, 0xcc, + 0x95, 0x70, 0x9f, 0xbd, 0x02, 0xee, 0x73, 0x57, 0xc0, 0x7d, 0xfe, 0xaa, 0xb8, 0x87, 0xab, 0xe1, + 0xbe, 0xf0, 0x3a, 0x70, 0x5f, 0x7a, 0x25, 0xdc, 0x97, 0xaf, 0x82, 0xfb, 0x5f, 0xa7, 0xa0, 0xd2, + 0xd2, 0x1d, 0x62, 0x74, 0x8d, 0xa1, 0x6e, 0x91, 0x4b, 0x54, 0x93, 0x25, 0xc8, 0x19, 0x3d, 0x6c, + 0x11, 0x83, 0x8c, 0x45, 0x3d, 0xf1, 0xd7, 0xe8, 0x6d, 0x28, 0xba, 0x5d, 0x07, 0x63, 0x4b, 0x73, + 0x8f, 0x74, 0x07, 0x8b, 0x93, 0x50, 0xe0, 0xb4, 0x36, 0x25, 0x85, 0x20, 0x93, 0xba, 0x10, 0x64, + 0x66, 0x62, 0x21, 0x93, 0x7e, 0x09, 0x64, 0x66, 0xce, 0x81, 0x4c, 0xe6, 0xaa, 0x90, 0xc9, 0x5e, + 0x0d, 0x32, 0xb9, 0xd7, 0x01, 0x99, 0xfc, 0x2b, 0x41, 0x06, 0x2e, 0x08, 0x99, 0x10, 0x50, 0xfe, + 0x91, 0x86, 0x9b, 0x1d, 0x47, 0xef, 0x1e, 0xbf, 0xca, 0xcd, 0xe3, 0x1d, 0x28, 0xf3, 0xb4, 0x49, + 0xa8, 0x05, 0xcd, 0xe8, 0x09, 0xc4, 0xf0, 0x8b, 0x05, 0x33, 0x5b, 0xef, 0x51, 0x29, 0x9e, 0x3d, + 0x7d, 0xa9, 0x24, 0x97, 0x62, 0x54, 0x4f, 0xea, 0xbf, 0x94, 0x16, 0x73, 0x57, 0x4a, 0x8b, 0x99, + 0x2b, 0xa4, 0xc5, 0xec, 0xff, 0xaf, 0x03, 0xaf, 0x82, 0xf1, 0xd9, 0xab, 0xa4, 0xc5, 0xbf, 0x49, + 0x80, 0x18, 0xe0, 0x2e, 0x01, 0xf2, 0x1b, 0x90, 0x8b, 0xc0, 0x3b, 0x4b, 0x04, 0x66, 0x1f, 0x08, + 0xcc, 0x26, 0xd9, 0xab, 0xbc, 0xe1, 0xfb, 0xb4, 0x69, 0x38, 0xb8, 0x4b, 0x82, 0x58, 0xf8, 0x70, + 0x7d, 0x17, 0x4a, 0xa7, 0xf8, 0xc0, 0xb5, 0xbb, 0xc7, 0x98, 0xb0, 0x9b, 0x31, 0x45, 0x7b, 0x7e, + 0x67, 0x46, 0x2d, 0xfa, 0x64, 0x7a, 0x35, 0x0e, 0xef, 0x37, 0x7d, 0xd9, 0xfd, 0x56, 0xff, 0x94, + 0x80, 0xb9, 0x29, 0x40, 0xa0, 0x8f, 0x20, 0xcf, 0x20, 0x44, 0xc6, 0x43, 0xbe, 0xc7, 0x72, 0x14, + 0x7b, 0x5c, 0xbc, 0x33, 0x1e, 0x62, 0x35, 0x77, 0x28, 0x9e, 0x68, 0x39, 0xa0, 0xcf, 0x43, 0x9d, + 0x1c, 0x79, 0xe5, 0xc0, 0x5b, 0xa3, 0xf7, 0x41, 0xee, 0x19, 0xae, 0x7e, 0x60, 0x62, 0x6d, 0xa0, + 0x5b, 0xc6, 0x21, 0x76, 0xf9, 0x89, 0xc8, 0xa9, 0xb3, 0x82, 0xbe, 0x2b, 0xc8, 0xe8, 0x0e, 0x24, + 0xdc, 0x35, 0x11, 0xa7, 0xb9, 0x00, 0x36, 0x6b, 0xfb, 0x43, 0xd3, 0xd6, 0x7b, 0x3b, 0x33, 0x6a, + 0xc2, 0x5d, 0x43, 0x77, 0x21, 0xd9, 0xef, 0x0e, 0x45, 0x06, 0x40, 0xbe, 0xd4, 0xf6, 0x46, 0xcb, + 0x17, 0xa3, 0x02, 0x68, 0x15, 0xd2, 0xfa, 0x37, 0x23, 0x07, 0x4f, 0x95, 0x89, 0x1a, 0xa5, 0xae, + 0x9b, 0xf6, 0x81, 0x2f, 0xcf, 0x05, 0xd1, 0x03, 0xc8, 0xe8, 0xa6, 0xd1, 0x6c, 0xb7, 0xa7, 0xba, + 0x86, 0x1a, 0x23, 0xfb, 0xf2, 0x42, 0x2c, 0x14, 0xcd, 0x5f, 0xa5, 0x60, 0x3e, 0x06, 0xde, 0xe8, + 0x29, 0xe4, 0x58, 0xeb, 0xd6, 0xb5, 0x4d, 0x11, 0xce, 0xb7, 0xe2, 0x8f, 0x43, 0x4b, 0x48, 0xa9, + 0xbe, 0x3c, 0x7a, 0x0f, 0x66, 0x69, 0x10, 0x29, 0xdc, 0xb4, 0xa1, 0x83, 0x0f, 0x8d, 0x17, 0x22, + 0xb6, 0x65, 0x8f, 0xdc, 0x62, 0x54, 0x74, 0x07, 0x4a, 0x43, 0x53, 0x1f, 0x9b, 0x86, 0x4b, 0x38, + 0x38, 0x45, 0xe6, 0xf4, 0x88, 0x0c, 0xa0, 0xf7, 0x01, 0xd1, 0x1f, 0xd6, 0x26, 0x25, 0x0b, 0x4c, + 0x52, 0xa6, 0x9c, 0x56, 0x58, 0xfa, 0x7d, 0x90, 0xbd, 0xd3, 0xdc, 0x1b, 0x39, 0x3a, 0x3d, 0x17, + 0x2c, 0xe2, 0x25, 0xd5, 0x3b, 0xe5, 0x9b, 0x82, 0x4c, 0x0f, 0xbe, 0xef, 0xa6, 0x3b, 0x3a, 0xa4, + 0x6e, 0x02, 0xdb, 0xe9, 0x19, 0x07, 0xbf, 0xcd, 0x64, 0x82, 0x4d, 0xf0, 0x75, 0x2c, 0x4c, 0x72, + 0xe7, 0xc1, 0x24, 0x7d, 0x21, 0x98, 0x64, 0x2e, 0x0c, 0x93, 0xec, 0xe5, 0x61, 0x92, 0xbf, 0x2c, + 0x4c, 0x7e, 0x9a, 0x00, 0x39, 0x7a, 0xec, 0x27, 0x0e, 0x8f, 0x74, 0x81, 0xc3, 0x93, 0x3e, 0x2f, + 0x2a, 0x89, 0x0b, 0x45, 0x25, 0x79, 0xe1, 0xa8, 0xa4, 0x2e, 0x1f, 0x95, 0xcc, 0x65, 0xa3, 0xf2, + 0xcf, 0x24, 0x14, 0x42, 0x69, 0x9d, 0x6e, 0xba, 0xab, 0x0f, 0xc9, 0xc8, 0xc1, 0x9a, 0x61, 0x11, + 0xec, 0x9c, 0xe8, 0xfc, 0xf0, 0x94, 0xd4, 0x59, 0x41, 0xaf, 0x0b, 0x32, 0x5a, 0x80, 0xf4, 0xa9, + 0xd1, 0x13, 0x59, 0x27, 0xad, 0xf2, 0x05, 0x5a, 0x84, 0xcc, 0x11, 0x36, 0xfa, 0x47, 0x84, 0x6d, + 0x34, 0xad, 0x8a, 0x55, 0xdc, 0x89, 0x4a, 0xc5, 0x9e, 0xa8, 0xda, 0x34, 0xa6, 0xd3, 0x91, 0x64, + 0xc8, 0x1c, 0x3e, 0x07, 0xcf, 0x8f, 0xa0, 0xc0, 0x0b, 0x19, 0xcd, 0x99, 0x5d, 0x71, 0x07, 0x98, + 0x9f, 0x54, 0xdf, 0xa0, 0x2c, 0x15, 0x0c, 0xff, 0x39, 0xf6, 0x7d, 0x67, 0xcf, 0x7b, 0xdf, 0xb9, + 0x0b, 0xbd, 0xef, 0xfc, 0x85, 0xdf, 0x37, 0x5c, 0xfe, 0x7d, 0x17, 0x2e, 0xfb, 0xbe, 0xff, 0x90, + 0x82, 0x9c, 0xe7, 0x27, 0xba, 0x03, 0xa0, 0x77, 0xbb, 0xd8, 0x75, 0xb5, 0x63, 0x3c, 0xe6, 0xf8, + 0x5f, 0x4f, 0x7d, 0xfb, 0xbb, 0x8a, 0xa4, 0xe6, 0x39, 0xfd, 0x4b, 0x3c, 0x46, 0x6f, 0x40, 0xc6, + 0xc5, 0x5d, 0x07, 0x8b, 0xe1, 0x95, 0x10, 0x10, 0x34, 0xf4, 0x3e, 0x94, 0x5c, 0xec, 0xba, 0x86, + 0x6d, 0x69, 0xc4, 0x3e, 0xc6, 0x16, 0xcf, 0x6a, 0x42, 0xa8, 0x28, 0x58, 0x1d, 0xca, 0x41, 0xf7, + 0x61, 0x56, 0x77, 0xdd, 0xd1, 0x00, 0x6b, 0x8e, 0x6d, 0x62, 0x4d, 0x77, 0x2c, 0xd6, 0x81, 0x7b, + 0xc2, 0x25, 0xce, 0x54, 0x6d, 0x13, 0xd7, 0x1c, 0x0b, 0x7d, 0x04, 0xd7, 0xc3, 0xd2, 0xf8, 0x05, + 0xc1, 0x8e, 0xa5, 0x9b, 0xb4, 0xc6, 0x97, 0x18, 0x6e, 0x16, 0x02, 0x79, 0x45, 0x30, 0xeb, 0x3d, + 0x0a, 0x3f, 0x07, 0xf7, 0x69, 0xca, 0xe4, 0x89, 0x58, 0xac, 0xe8, 0x41, 0xc7, 0x56, 0x6f, 0x68, + 0x1b, 0x16, 0x11, 0xb8, 0xf3, 0xd7, 0x54, 0xe7, 0x60, 0x44, 0x2b, 0xbb, 0x18, 0x83, 0x89, 0x15, + 0xba, 0x07, 0xf2, 0xa1, 0xed, 0x74, 0xb1, 0x46, 0xd3, 0x81, 0xe6, 0x92, 0xb1, 0x98, 0x85, 0xe5, + 0xd4, 0x32, 0xa3, 0xb7, 0x74, 0x72, 0xd4, 0xa6, 0x54, 0xf4, 0x29, 0xe4, 0x06, 0x98, 0xe8, 0x3d, + 0x9d, 0xe8, 0xa2, 0x39, 0xb9, 0x35, 0x85, 0x8a, 0x95, 0x5d, 0x21, 0xa1, 0x58, 0xc4, 0x19, 0xab, + 0xbe, 0x02, 0xaa, 0x40, 0x96, 0xe8, 0xfd, 0xbe, 0x61, 0xf5, 0x19, 0xa2, 0xe8, 0xed, 0x85, 0x2f, + 0xd1, 0x03, 0x98, 0xef, 0xda, 0x16, 0x61, 0x95, 0xc0, 0x70, 0xd9, 0xe5, 0x9f, 0xee, 0x2c, 0xcf, + 0xa4, 0x90, 0x60, 0x6d, 0x06, 0x1c, 0xb4, 0x0c, 0xe9, 0xa1, 0x63, 0xbf, 0x18, 0x0b, 0x28, 0x05, + 0x37, 0xb7, 0x16, 0xa5, 0x8a, 0x1b, 0x09, 0x17, 0x59, 0xfa, 0x14, 0x4a, 0x13, 0x1e, 0x21, 0x19, + 0x92, 0x3e, 0x0c, 0x54, 0xfa, 0x48, 0x4f, 0xf8, 0x89, 0x6e, 0x8e, 0xb0, 0xa8, 0x7d, 0x7c, 0xf1, + 0x34, 0xf1, 0x44, 0xaa, 0x9e, 0x42, 0xde, 0xc7, 0x31, 0xba, 0x0b, 0x85, 0xae, 0x83, 0x59, 0x0b, + 0xaa, 0x9b, 0xee, 0x04, 0x8e, 0xc2, 0x8c, 0x50, 0x9c, 0x13, 0x13, 0x71, 0xf6, 0xbd, 0x4e, 0xbe, + 0xd4, 0xeb, 0xea, 0xb7, 0x12, 0xcc, 0x46, 0xce, 0x05, 0x7a, 0x0f, 0x8a, 0x7a, 0xb7, 0x6b, 0x8f, + 0x2c, 0x12, 0xba, 0x1f, 0x7a, 0x0e, 0x08, 0x0e, 0xab, 0xac, 0xef, 0x82, 0xb7, 0x64, 0x80, 0x0f, + 0xe3, 0x19, 0x04, 0x83, 0x22, 0xfe, 0x5d, 0x28, 0xd3, 0xd8, 0xea, 0x86, 0x85, 0x9d, 0x70, 0x51, + 0x2f, 0xf9, 0x54, 0x6a, 0xad, 0xfa, 0x0b, 0x09, 0x8a, 0xe1, 0xf3, 0xf6, 0x3a, 0x8e, 0xd3, 0x6b, + 0x84, 0x6f, 0xf5, 0x39, 0x14, 0x42, 0x01, 0x8c, 0x99, 0xa9, 0x2d, 0x41, 0x6e, 0xe4, 0xd2, 0x83, + 0x33, 0xf0, 0xde, 0xb0, 0xbf, 0xa6, 0xbc, 0xa1, 0xee, 0xba, 0xa7, 0xb6, 0xe3, 0x35, 0x83, 0xfe, + 0xba, 0xfa, 0x1c, 0x8a, 0xe1, 0x6e, 0x04, 0xad, 0x4d, 0x5d, 0xb4, 0xae, 0x47, 0xda, 0x96, 0x98, + 0x1b, 0x16, 0x82, 0xd4, 0xc8, 0x31, 0xdd, 0x4a, 0xe2, 0x76, 0xf2, 0x5e, 0x5e, 0x65, 0xcf, 0xd5, + 0x3f, 0x26, 0x61, 0x36, 0xd2, 0x64, 0x05, 0x55, 0x46, 0x8a, 0xaf, 0x32, 0x89, 0x89, 0x2a, 0xb3, + 0x00, 0xe9, 0x1e, 0x1e, 0x92, 0x23, 0x51, 0x7c, 0xf8, 0x02, 0xbd, 0x01, 0xf9, 0x43, 0x47, 0x1f, + 0x60, 0x47, 0x27, 0xbc, 0xaa, 0xa6, 0xd5, 0x80, 0x40, 0xab, 0x05, 0xef, 0x91, 0x79, 0xb5, 0x48, + 0x47, 0xaa, 0x05, 0x9b, 0xb2, 0x8b, 0x6a, 0xa1, 0xfb, 0xcf, 0xf4, 0xe2, 0xc7, 0xb5, 0x0e, 0x0c, + 0xc2, 0xec, 0x66, 0x98, 0x5d, 0xde, 0x58, 0xaf, 0x73, 0x5a, 0x20, 0xf4, 0xf5, 0x48, 0x37, 0x0d, + 0x32, 0x66, 0xd9, 0xd1, 0x13, 0xfa, 0x01, 0xa7, 0xd1, 0xca, 0xc8, 0x85, 0x0e, 0x1d, 0xda, 0xed, + 0x58, 0xdd, 0x31, 0x2b, 0x3b, 0x69, 0x95, 0xb7, 0xee, 0x5b, 0x1e, 0x95, 0x3a, 0xca, 0xdb, 0x74, + 0xee, 0x68, 0x2e, 0xe2, 0xe8, 0x33, 0xca, 0x13, 0x8e, 0x9e, 0xf8, 0xcf, 0xd4, 0x07, 0xae, 0xe5, + 0x39, 0x9a, 0xe7, 0x3e, 0x30, 0x62, 0xc8, 0x51, 0x2e, 0xe4, 0x39, 0x5a, 0x0c, 0x09, 0x79, 0x8e, + 0xde, 0x07, 0x74, 0x8c, 0xc7, 0x1a, 0x8b, 0x5c, 0x70, 0x3b, 0xa0, 0xa9, 0x46, 0x52, 0xe5, 0x63, + 0x3c, 0xde, 0xa2, 0x0c, 0xef, 0x7a, 0x50, 0xfd, 0x02, 0xe6, 0xf7, 0x87, 0x3d, 0x9d, 0xe0, 0x06, + 0xfb, 0xd8, 0x11, 0xea, 0xe4, 0xf8, 0xc7, 0x18, 0x9a, 0xc9, 0xc5, 0x95, 0x8b, 0x13, 0x78, 0xf6, + 0x8e, 0xfb, 0x50, 0x42, 0x4f, 0xbd, 0x30, 0xc6, 0xf1, 0x74, 0x21, 0x63, 0x77, 0x61, 0x56, 0xef, + 0xf5, 0x44, 0x33, 0xab, 0x85, 0xc0, 0x56, 0xd2, 0x7b, 0x3d, 0x0e, 0xdd, 0x7d, 0xc7, 0x74, 0xe9, + 0xb6, 0x1c, 0x3c, 0xb0, 0x4f, 0xf0, 0x84, 0x68, 0x92, 0x89, 0xca, 0x9c, 0x13, 0x48, 0x57, 0x31, + 0xcc, 0x35, 0x0c, 0xf7, 0x32, 0xf3, 0xba, 0x09, 0x27, 0x13, 0xd3, 0x3b, 0xd6, 0xbb, 0xc4, 0x38, + 0xf1, 0x46, 0x75, 0x62, 0x55, 0xfd, 0x1e, 0xa0, 0xf0, 0xcf, 0xb8, 0x43, 0xdb, 0x72, 0x69, 0x6b, + 0x90, 0x36, 0x08, 0x1e, 0xd0, 0x1c, 0x4b, 0x8b, 0x4c, 0xf0, 0xee, 0xb9, 0x5c, 0xdd, 0x3a, 0xb4, + 0x55, 0x2e, 0x51, 0x5d, 0x85, 0xb9, 0x36, 0xb1, 0x87, 0x53, 0x7e, 0x9e, 0x19, 0xaf, 0xea, 0xef, + 0xf3, 0x00, 0x81, 0x9d, 0xf3, 0x63, 0x7b, 0x1d, 0xb2, 0x6c, 0xc3, 0xfe, 0x8e, 0x32, 0x74, 0x59, + 0xef, 0x4d, 0x46, 0xa2, 0x14, 0x89, 0xc4, 0x53, 0x28, 0xb8, 0xf6, 0x88, 0x56, 0x54, 0xd6, 0xe3, + 0x2e, 0x31, 0x00, 0xdf, 0x88, 0x6c, 0xa2, 0xcd, 0x24, 0x58, 0x93, 0x0b, 0xae, 0xff, 0x8c, 0x3e, + 0x84, 0x8c, 0x4b, 0x74, 0x32, 0x72, 0x59, 0xa0, 0xca, 0xa1, 0x3b, 0x8f, 0x50, 0x63, 0x4c, 0x55, + 0x08, 0xa1, 0x37, 0x01, 0xd8, 0xac, 0x1f, 0xf7, 0x34, 0x9d, 0x30, 0x8c, 0x26, 0xd5, 0xbc, 0xa0, + 0xd4, 0x08, 0xba, 0xc1, 0xf2, 0x29, 0x67, 0x16, 0x18, 0x33, 0xcb, 0xd6, 0x35, 0xf6, 0x51, 0x6e, + 0xc4, 0xa0, 0xc6, 0x98, 0x88, 0x6b, 0x0a, 0x4a, 0x8d, 0xd0, 0x6a, 0xdd, 0xc3, 0x44, 0x37, 0x4c, + 0xb7, 0x72, 0x8d, 0x57, 0x6b, 0xb1, 0xa4, 0xb9, 0x07, 0x3b, 0x8e, 0xed, 0x88, 0xfa, 0xcc, 0x17, + 0xd4, 0x1c, 0x7b, 0x60, 0x87, 0xb6, 0xb2, 0xc8, 0x93, 0x0f, 0xa3, 0xd0, 0xe3, 0x89, 0x1a, 0x50, + 0x66, 0xf1, 0xea, 0x7a, 0xc3, 0x3d, 0x71, 0xeb, 0xbf, 0xe3, 0x6f, 0xef, 0xec, 0x8f, 0x8e, 0x3b, + 0x33, 0x6a, 0xc9, 0x09, 0x73, 0xd1, 0x87, 0x90, 0x3c, 0xc5, 0x07, 0x95, 0x72, 0x64, 0xda, 0x11, + 0xfd, 0xbe, 0x42, 0x6f, 0x9e, 0xa7, 0xf8, 0x00, 0x29, 0x50, 0x18, 0x06, 0x23, 0xe8, 0xca, 0x3c, + 0x53, 0x7b, 0x3b, 0x28, 0xbf, 0x67, 0x8c, 0xa7, 0x77, 0x66, 0xd4, 0xb0, 0x1e, 0x6a, 0xc2, 0x2c, + 0x9f, 0xbf, 0x04, 0x9b, 0xe0, 0x0d, 0xe2, 0x3b, 0xbe, 0xa9, 0x73, 0x06, 0x98, 0x3b, 0x33, 0x6a, + 0x99, 0x4c, 0xb0, 0xd1, 0x1a, 0xa4, 0x19, 0x45, 0xb4, 0x33, 0x37, 0x27, 0xcd, 0x44, 0xb5, 0xb9, + 0x2c, 0xfa, 0x28, 0xf2, 0xdd, 0x31, 0x5a, 0x83, 0x28, 0xa8, 0xe9, 0x91, 0x62, 0xc3, 0x42, 0xc9, + 0x1f, 0x35, 0x7e, 0x20, 0x26, 0x44, 0xd1, 0xcb, 0x3c, 0x6d, 0x2f, 0xa8, 0x8a, 0x10, 0xe7, 0xd3, + 0xa1, 0x8f, 0x43, 0x73, 0xc9, 0x62, 0x74, 0x9c, 0x29, 0x18, 0x21, 0xa5, 0x60, 0x20, 0xf9, 0xd4, + 0x9f, 0xef, 0x39, 0xd8, 0x1d, 0x99, 0xc4, 0x9b, 0x92, 0xcd, 0xc7, 0x38, 0xe9, 0x4d, 0xf7, 0x54, + 0x2e, 0x89, 0x1e, 0x89, 0xd1, 0xa2, 0xa7, 0xc9, 0x3f, 0xb7, 0x4d, 0x7b, 0xca, 0x27, 0x8a, 0x9e, + 0xd6, 0xe7, 0xc1, 0x4c, 0xd0, 0x53, 0x9c, 0x8b, 0x8e, 0x14, 0x43, 0x1e, 0xfb, 0xc3, 0x40, 0x4f, + 0xff, 0x89, 0x37, 0x0c, 0xf4, 0xb4, 0x17, 0x22, 0x0e, 0xb3, 0x2e, 0x8a, 0xeb, 0xf2, 0x59, 0xa0, + 0xa7, 0xf9, 0x01, 0xcc, 0x79, 0xfd, 0x93, 0x66, 0xda, 0x5d, 0x3e, 0xc0, 0xb8, 0xce, 0x87, 0x1d, + 0x1e, 0xa3, 0x21, 0xe8, 0x68, 0x05, 0xe6, 0x0f, 0xf4, 0xee, 0xf1, 0x68, 0xa8, 0xb9, 0xc4, 0x76, + 0xe8, 0xef, 0x8d, 0x5c, 0xdc, 0xab, 0xdc, 0x60, 0xc9, 0x70, 0x8e, 0xb3, 0xda, 0x9c, 0xb3, 0xef, + 0xe2, 0xde, 0x7a, 0x1e, 0xb2, 0x0e, 0x7f, 0xf3, 0xb4, 0xa9, 0xe1, 0xbe, 0x55, 0x3f, 0x83, 0xf2, + 0xe4, 0x3b, 0x46, 0xef, 0x41, 0xca, 0xb0, 0x0e, 0xed, 0xa9, 0x3c, 0x19, 0x8a, 0x32, 0x13, 0x78, + 0x9a, 0xa8, 0x48, 0xd5, 0x7f, 0x49, 0x00, 0x01, 0x23, 0xfe, 0xe3, 0x63, 0x28, 0x99, 0x24, 0xce, + 0x4b, 0x26, 0xc9, 0xc9, 0x64, 0xb2, 0x04, 0xb9, 0x89, 0x19, 0x4e, 0x52, 0xf5, 0xd7, 0xe8, 0xa1, + 0x9f, 0xd1, 0xf8, 0x95, 0x63, 0x29, 0xc6, 0xcb, 0x95, 0x48, 0x5a, 0xf3, 0x73, 0x4c, 0x26, 0x94, + 0x63, 0xaa, 0x2b, 0x90, 0xe1, 0x72, 0x08, 0x20, 0x53, 0xdb, 0xe8, 0xd4, 0x9f, 0x29, 0xf2, 0x0c, + 0x2a, 0x42, 0x6e, 0xab, 0xbe, 0x57, 0x6f, 0xef, 0x28, 0x9b, 0xb2, 0x44, 0x39, 0x5b, 0xb5, 0x7a, + 0x43, 0xd9, 0x94, 0x13, 0xd5, 0xdf, 0x4a, 0x90, 0xf3, 0x50, 0xe3, 0x8d, 0x40, 0xc2, 0xa5, 0xcb, + 0x5b, 0xbf, 0xa6, 0x8d, 0x67, 0x22, 0x1b, 0x47, 0x90, 0x72, 0x8d, 0x6f, 0xb0, 0x08, 0x08, 0x7b, + 0xa6, 0xf2, 0x3e, 0x56, 0xf8, 0x35, 0xd6, 0x5f, 0x57, 0xff, 0x92, 0x80, 0x62, 0x18, 0xab, 0xd3, + 0x43, 0x37, 0xe9, 0xc2, 0x43, 0xb7, 0xdc, 0x19, 0x43, 0xb7, 0xb0, 0xbf, 0x89, 0x33, 0xfc, 0x4d, + 0x86, 0xfc, 0xfd, 0x00, 0xe6, 0x7c, 0xc3, 0xbe, 0xe3, 0xfc, 0x66, 0x2e, 0x7b, 0x0c, 0x1f, 0xe4, + 0x8f, 0x60, 0x71, 0xd2, 0x15, 0x5f, 0x83, 0x97, 0x8a, 0x85, 0xb0, 0x3b, 0xbe, 0xd6, 0x1d, 0xda, + 0x5a, 0xf3, 0x13, 0xcc, 0x5a, 0x13, 0x16, 0x97, 0x24, 0x6d, 0xaa, 0x19, 0x71, 0x83, 0xd2, 0x22, + 0x6f, 0x28, 0x73, 0xde, 0x1b, 0xca, 0x4e, 0xbc, 0xa1, 0xea, 0x8f, 0x25, 0x80, 0xe0, 0x0c, 0x5f, + 0x7c, 0x3e, 0x73, 0x2b, 0x18, 0xae, 0x50, 0xa7, 0x24, 0x66, 0xd5, 0x9b, 0xa3, 0x4c, 0xbb, 0x74, + 0x09, 0xd0, 0x54, 0x7f, 0x96, 0x80, 0x6b, 0xb5, 0x11, 0xb1, 0xa7, 0x0a, 0x4f, 0xe8, 0x83, 0x8e, + 0x74, 0x85, 0x8f, 0x96, 0x89, 0x2b, 0x7c, 0xb4, 0x4c, 0x5e, 0xee, 0x83, 0x4e, 0xcc, 0x27, 0x99, + 0xd4, 0xe5, 0x3f, 0xc9, 0x84, 0xbf, 0x8c, 0xfc, 0x24, 0x01, 0xb3, 0x34, 0x38, 0xa1, 0x1a, 0xf8, + 0x3f, 0x3f, 0xbe, 0x5c, 0x5e, 0x17, 0x0d, 0x63, 0xf0, 0x65, 0x04, 0x2d, 0x80, 0xbc, 0xa9, 0x6c, + 0xd5, 0xf6, 0x1b, 0x1d, 0x6d, 0xab, 0xde, 0x50, 0x3a, 0x3f, 0x6c, 0xd1, 0x64, 0x98, 0x85, 0xe4, + 0x6e, 0xeb, 0x91, 0x2c, 0xd1, 0x87, 0xe6, 0xf6, 0xb6, 0x9c, 0xe0, 0x94, 0x35, 0x39, 0xb9, 0xbc, + 0x07, 0xd7, 0x62, 0x3f, 0x07, 0xa0, 0x3b, 0x70, 0xcb, 0xb3, 0xd4, 0x56, 0xb6, 0x77, 0x95, 0xbd, + 0x8e, 0xb2, 0xc9, 0x6c, 0x6a, 0x2d, 0xb5, 0xd9, 0x69, 0x6e, 0x34, 0x1b, 0xf2, 0x0c, 0x92, 0xa1, + 0xb8, 0xd3, 0x68, 0x07, 0x14, 0x69, 0xf9, 0x41, 0xe4, 0x73, 0x84, 0x18, 0x4a, 0xe6, 0x21, 0x5d, + 0xdf, 0xdb, 0x54, 0xbe, 0x92, 0x67, 0x50, 0x09, 0xf2, 0x9d, 0xfa, 0xae, 0xd2, 0xee, 0xd4, 0x76, + 0x5b, 0xb2, 0xb4, 0x7c, 0x08, 0xb3, 0x91, 0x89, 0x26, 0x5a, 0x04, 0x54, 0xdf, 0xad, 0x6d, 0x2b, + 0x5a, 0x7b, 0x7f, 0x6b, 0xab, 0xfe, 0x95, 0xe6, 0x69, 0x2e, 0xc1, 0xe2, 0x04, 0x3d, 0x64, 0x06, + 0xdd, 0x82, 0x9b, 0x13, 0xbc, 0xbd, 0xe6, 0x9e, 0xa2, 0x35, 0x9f, 0x29, 0xea, 0x73, 0xb5, 0xde, + 0x51, 0xe4, 0xc4, 0xf2, 0x27, 0x5e, 0x99, 0xf4, 0x77, 0x18, 0x8a, 0x55, 0x68, 0x4b, 0x39, 0x48, + 0xa9, 0x1d, 0x66, 0x32, 0x0b, 0xc9, 0xb6, 0xda, 0x91, 0x13, 0xcb, 0xfb, 0x50, 0x08, 0xfd, 0xdb, + 0x0c, 0x21, 0x28, 0x7b, 0x7a, 0xbb, 0xf5, 0xaf, 0xea, 0x7b, 0xdb, 0xf2, 0x0c, 0x75, 0x79, 0x73, + 0xbf, 0xd6, 0xd0, 0x36, 0x76, 0x6a, 0x7b, 0x7b, 0x4a, 0x43, 0xab, 0x6d, 0x2b, 0x7b, 0x1d, 0x59, + 0xa2, 0x2e, 0x4f, 0xd2, 0x1b, 0x1d, 0x45, 0xdd, 0xab, 0x31, 0x8f, 0xfe, 0x2c, 0xc1, 0xb5, 0xd8, + 0x03, 0xcc, 0xc2, 0xfa, 0xf0, 0xf1, 0x23, 0xed, 0xe3, 0x87, 0xab, 0x2d, 0x6d, 0x6d, 0x55, 0x04, + 0xda, 0xa7, 0x3c, 0x5e, 0x95, 0x25, 0x34, 0x07, 0x25, 0x46, 0xf9, 0xce, 0xea, 0x13, 0x2e, 0x94, + 0x88, 0x90, 0x1e, 0xaf, 0xca, 0x49, 0x74, 0x03, 0xae, 0xb5, 0x9a, 0x6a, 0x47, 0xad, 0xd5, 0x3b, + 0xda, 0x84, 0xc9, 0xd4, 0x19, 0xac, 0xc7, 0xab, 0x72, 0x9a, 0x7a, 0x3d, 0xc9, 0xf2, 0x7f, 0x24, + 0x73, 0x16, 0xef, 0xf1, 0xaa, 0x9c, 0x5d, 0xfe, 0xa5, 0x04, 0xc5, 0x70, 0x43, 0x82, 0xe6, 0x61, + 0x56, 0xd9, 0x56, 0x95, 0x76, 0x5b, 0x6b, 0x77, 0x6a, 0x6a, 0x87, 0xc7, 0x6a, 0x0e, 0x4a, 0x82, + 0x28, 0xaa, 0xb5, 0x14, 0x22, 0x29, 0x7b, 0x9b, 0x54, 0x2a, 0x11, 0x52, 0xdd, 0x68, 0xee, 0xb6, + 0x1a, 0x4a, 0x47, 0x91, 0x93, 0x21, 0x39, 0x51, 0xce, 0x53, 0xf4, 0x6d, 0x78, 0xd6, 0xd6, 0x9b, + 0x6a, 0x47, 0xd9, 0x94, 0xd3, 0xa8, 0x02, 0x0b, 0x82, 0xd6, 0xa8, 0xef, 0xd6, 0x3b, 0x9a, 0xaa, + 0xd4, 0x36, 0xe8, 0x45, 0x20, 0xb3, 0xfc, 0x05, 0xc8, 0xd1, 0x46, 0x8b, 0xee, 0xc8, 0x73, 0xb2, + 0xb9, 0xaf, 0x6e, 0x28, 0x1a, 0x3d, 0x35, 0xda, 0x73, 0x65, 0x9d, 0x43, 0x2e, 0x86, 0xd7, 0xde, + 0xfc, 0x52, 0x96, 0x1e, 0xfe, 0x3c, 0x0d, 0x19, 0x91, 0x8a, 0x3a, 0x50, 0x61, 0xff, 0xa1, 0x8a, + 0x69, 0x57, 0xd0, 0x45, 0x9a, 0x99, 0xa5, 0xb8, 0x66, 0x16, 0x7d, 0x9f, 0x42, 0x56, 0x77, 0x88, + 0xdf, 0xc1, 0xa0, 0xb3, 0xbb, 0x9a, 0x78, 0x0b, 0x2d, 0x58, 0x64, 0x16, 0xa6, 0x6b, 0xca, 0xcb, + 0x1b, 0x9d, 0x78, 0x8b, 0xcf, 0xe0, 0x06, 0xb3, 0x18, 0xd7, 0xd3, 0xa0, 0x0b, 0xb5, 0x3c, 0xf1, + 0x76, 0x37, 0x41, 0x0e, 0xec, 0x0a, 0x73, 0xe7, 0xb5, 0x3e, 0xf1, 0x56, 0x6a, 0x50, 0x0c, 0x8f, + 0x5d, 0x50, 0x50, 0x6f, 0x62, 0xa6, 0x31, 0x2f, 0x31, 0xc1, 0xb3, 0xc5, 0x94, 0x89, 0x89, 0x19, + 0x4c, 0xbc, 0x09, 0x05, 0x20, 0x18, 0x5f, 0xa0, 0xa0, 0x6a, 0x4e, 0x8d, 0x4e, 0x96, 0x6e, 0xc6, + 0xf2, 0xc4, 0xbc, 0xe3, 0x33, 0x7a, 0x31, 0xf7, 0x86, 0x18, 0x28, 0x7c, 0x41, 0x8e, 0x4c, 0x36, + 0x62, 0xbd, 0x58, 0xdf, 0xfa, 0xd1, 0x9d, 0xbe, 0x41, 0x8e, 0x46, 0x07, 0x2b, 0x5d, 0x7b, 0xf0, + 0x40, 0x08, 0x3c, 0xf0, 0x46, 0x90, 0x1e, 0xe1, 0x37, 0x89, 0x52, 0xc3, 0x38, 0xc1, 0x5f, 0xf2, + 0x81, 0x33, 0xb1, 0xff, 0x9e, 0x28, 0x8b, 0xf5, 0xd3, 0xa7, 0x8c, 0x70, 0x90, 0x61, 0x2a, 0x6b, + 0xff, 0x09, 0x00, 0x00, 0xff, 0xff, 0x0e, 0x3d, 0x14, 0x42, 0x4f, 0x2c, 0x00, 0x00, } diff --git a/livekit/livekit_sip.twirp.go b/livekit/livekit_sip.twirp.go index 39aadd869..03c4ef3ba 100644 --- a/livekit/livekit_sip.twirp.go +++ b/livekit/livekit_sip.twirp.go @@ -16,7 +16,7 @@ import proto "google.golang.org/protobuf/proto" import twirp "github.com/twitchtv/twirp" import ctxsetters "github.com/twitchtv/twirp/ctxsetters" -import google_protobuf3 "google.golang.org/protobuf/types/known/emptypb" +import google_protobuf4 "google.golang.org/protobuf/types/known/emptypb" // Version compatibility assertion. // If the constant is not defined in the package, that likely means @@ -59,7 +59,7 @@ type SIP interface { CreateSIPParticipant(context.Context, *CreateSIPParticipantRequest) (*SIPParticipantInfo, error) - TransferSIPParticipant(context.Context, *TransferSIPParticipantRequest) (*google_protobuf3.Empty, error) + TransferSIPParticipant(context.Context, *TransferSIPParticipantRequest) (*google_protobuf4.Empty, error) } // =================== @@ -813,13 +813,13 @@ func (c *sIPProtobufClient) callCreateSIPParticipant(ctx context.Context, in *Cr return out, nil } -func (c *sIPProtobufClient) TransferSIPParticipant(ctx context.Context, in *TransferSIPParticipantRequest) (*google_protobuf3.Empty, error) { +func (c *sIPProtobufClient) TransferSIPParticipant(ctx context.Context, in *TransferSIPParticipantRequest) (*google_protobuf4.Empty, error) { ctx = ctxsetters.WithPackageName(ctx, "livekit") ctx = ctxsetters.WithServiceName(ctx, "SIP") ctx = ctxsetters.WithMethodName(ctx, "TransferSIPParticipant") caller := c.callTransferSIPParticipant if c.interceptor != nil { - caller = func(ctx context.Context, req *TransferSIPParticipantRequest) (*google_protobuf3.Empty, error) { + caller = func(ctx context.Context, req *TransferSIPParticipantRequest) (*google_protobuf4.Empty, error) { resp, err := c.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { typedReq, ok := req.(*TransferSIPParticipantRequest) @@ -830,9 +830,9 @@ func (c *sIPProtobufClient) TransferSIPParticipant(ctx context.Context, in *Tran }, )(ctx, req) if resp != nil { - typedResp, ok := resp.(*google_protobuf3.Empty) + typedResp, ok := resp.(*google_protobuf4.Empty) if !ok { - return nil, twirp.InternalError("failed type assertion resp.(*google_protobuf3.Empty) when calling interceptor") + return nil, twirp.InternalError("failed type assertion resp.(*google_protobuf4.Empty) when calling interceptor") } return typedResp, err } @@ -842,8 +842,8 @@ func (c *sIPProtobufClient) TransferSIPParticipant(ctx context.Context, in *Tran return caller(ctx, in) } -func (c *sIPProtobufClient) callTransferSIPParticipant(ctx context.Context, in *TransferSIPParticipantRequest) (*google_protobuf3.Empty, error) { - out := new(google_protobuf3.Empty) +func (c *sIPProtobufClient) callTransferSIPParticipant(ctx context.Context, in *TransferSIPParticipantRequest) (*google_protobuf4.Empty, error) { + out := new(google_protobuf4.Empty) ctx, err := doProtobufRequest(ctx, c.client, c.opts.Hooks, c.urls[15], in, out) if err != nil { twerr, ok := err.(twirp.Error) @@ -1610,13 +1610,13 @@ func (c *sIPJSONClient) callCreateSIPParticipant(ctx context.Context, in *Create return out, nil } -func (c *sIPJSONClient) TransferSIPParticipant(ctx context.Context, in *TransferSIPParticipantRequest) (*google_protobuf3.Empty, error) { +func (c *sIPJSONClient) TransferSIPParticipant(ctx context.Context, in *TransferSIPParticipantRequest) (*google_protobuf4.Empty, error) { ctx = ctxsetters.WithPackageName(ctx, "livekit") ctx = ctxsetters.WithServiceName(ctx, "SIP") ctx = ctxsetters.WithMethodName(ctx, "TransferSIPParticipant") caller := c.callTransferSIPParticipant if c.interceptor != nil { - caller = func(ctx context.Context, req *TransferSIPParticipantRequest) (*google_protobuf3.Empty, error) { + caller = func(ctx context.Context, req *TransferSIPParticipantRequest) (*google_protobuf4.Empty, error) { resp, err := c.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { typedReq, ok := req.(*TransferSIPParticipantRequest) @@ -1627,9 +1627,9 @@ func (c *sIPJSONClient) TransferSIPParticipant(ctx context.Context, in *Transfer }, )(ctx, req) if resp != nil { - typedResp, ok := resp.(*google_protobuf3.Empty) + typedResp, ok := resp.(*google_protobuf4.Empty) if !ok { - return nil, twirp.InternalError("failed type assertion resp.(*google_protobuf3.Empty) when calling interceptor") + return nil, twirp.InternalError("failed type assertion resp.(*google_protobuf4.Empty) when calling interceptor") } return typedResp, err } @@ -1639,8 +1639,8 @@ func (c *sIPJSONClient) TransferSIPParticipant(ctx context.Context, in *Transfer return caller(ctx, in) } -func (c *sIPJSONClient) callTransferSIPParticipant(ctx context.Context, in *TransferSIPParticipantRequest) (*google_protobuf3.Empty, error) { - out := new(google_protobuf3.Empty) +func (c *sIPJSONClient) callTransferSIPParticipant(ctx context.Context, in *TransferSIPParticipantRequest) (*google_protobuf4.Empty, error) { + out := new(google_protobuf4.Empty) ctx, err := doJSONRequest(ctx, c.client, c.opts.Hooks, c.urls[15], in, out) if err != nil { twerr, ok := err.(twirp.Error) @@ -4550,7 +4550,7 @@ func (s *sIPServer) serveTransferSIPParticipantJSON(ctx context.Context, resp ht handler := s.SIP.TransferSIPParticipant if s.interceptor != nil { - handler = func(ctx context.Context, req *TransferSIPParticipantRequest) (*google_protobuf3.Empty, error) { + handler = func(ctx context.Context, req *TransferSIPParticipantRequest) (*google_protobuf4.Empty, error) { resp, err := s.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { typedReq, ok := req.(*TransferSIPParticipantRequest) @@ -4561,9 +4561,9 @@ func (s *sIPServer) serveTransferSIPParticipantJSON(ctx context.Context, resp ht }, )(ctx, req) if resp != nil { - typedResp, ok := resp.(*google_protobuf3.Empty) + typedResp, ok := resp.(*google_protobuf4.Empty) if !ok { - return nil, twirp.InternalError("failed type assertion resp.(*google_protobuf3.Empty) when calling interceptor") + return nil, twirp.InternalError("failed type assertion resp.(*google_protobuf4.Empty) when calling interceptor") } return typedResp, err } @@ -4572,7 +4572,7 @@ func (s *sIPServer) serveTransferSIPParticipantJSON(ctx context.Context, resp ht } // Call service method - var respContent *google_protobuf3.Empty + var respContent *google_protobuf4.Empty func() { defer ensurePanicResponses(ctx, resp, s.hooks) respContent, err = handler(ctx, reqContent) @@ -4583,7 +4583,7 @@ func (s *sIPServer) serveTransferSIPParticipantJSON(ctx context.Context, resp ht return } if respContent == nil { - s.writeError(ctx, resp, twirp.InternalError("received a nil *google_protobuf3.Empty and nil error while calling TransferSIPParticipant. nil responses are not supported")) + s.writeError(ctx, resp, twirp.InternalError("received a nil *google_protobuf4.Empty and nil error while calling TransferSIPParticipant. nil responses are not supported")) return } @@ -4631,7 +4631,7 @@ func (s *sIPServer) serveTransferSIPParticipantProtobuf(ctx context.Context, res handler := s.SIP.TransferSIPParticipant if s.interceptor != nil { - handler = func(ctx context.Context, req *TransferSIPParticipantRequest) (*google_protobuf3.Empty, error) { + handler = func(ctx context.Context, req *TransferSIPParticipantRequest) (*google_protobuf4.Empty, error) { resp, err := s.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { typedReq, ok := req.(*TransferSIPParticipantRequest) @@ -4642,9 +4642,9 @@ func (s *sIPServer) serveTransferSIPParticipantProtobuf(ctx context.Context, res }, )(ctx, req) if resp != nil { - typedResp, ok := resp.(*google_protobuf3.Empty) + typedResp, ok := resp.(*google_protobuf4.Empty) if !ok { - return nil, twirp.InternalError("failed type assertion resp.(*google_protobuf3.Empty) when calling interceptor") + return nil, twirp.InternalError("failed type assertion resp.(*google_protobuf4.Empty) when calling interceptor") } return typedResp, err } @@ -4653,7 +4653,7 @@ func (s *sIPServer) serveTransferSIPParticipantProtobuf(ctx context.Context, res } // Call service method - var respContent *google_protobuf3.Empty + var respContent *google_protobuf4.Empty func() { defer ensurePanicResponses(ctx, resp, s.hooks) respContent, err = handler(ctx, reqContent) @@ -4664,7 +4664,7 @@ func (s *sIPServer) serveTransferSIPParticipantProtobuf(ctx context.Context, res return } if respContent == nil { - s.writeError(ctx, resp, twirp.InternalError("received a nil *google_protobuf3.Empty and nil error while calling TransferSIPParticipant. nil responses are not supported")) + s.writeError(ctx, resp, twirp.InternalError("received a nil *google_protobuf4.Empty and nil error while calling TransferSIPParticipant. nil responses are not supported")) return } diff --git a/livekit/logger/options.pb.go b/livekit/logger/options.pb.go index 6376f910d..fc3cd3f6c 100644 --- a/livekit/logger/options.pb.go +++ b/livekit/logger/options.pb.go @@ -43,7 +43,7 @@ var File_logger_options_proto protoreflect.FileDescriptor const file_logger_options_proto_rawDesc = "" + "\n" + "\x14logger/options.proto\x12\x06logger\x1a google/protobuf/descriptor.proto:7\n" + - "\x06redact\x12\x1d.google.protobuf.FieldOptions\x18ц\x03 \x01(\bR\x06redactB$Z\"github.com/livekit/protocol/loggerb\x06proto3" + "\x06redact\x12\x1d.google.protobuf.FieldOptions\x18ц\x03 \x01(\bR\x06redactB,Z*github.com/livekit/protocol/livekit/loggerb\x06proto3" var file_logger_options_proto_goTypes = []any{ (*descriptorpb.FieldOptions)(nil), // 0: google.protobuf.FieldOptions diff --git a/protobufs/livekit_egress.proto b/protobufs/livekit_egress.proto index 1630b6ed3..9f20f0ce0 100644 --- a/protobufs/livekit_egress.proto +++ b/protobufs/livekit_egress.proto @@ -17,6 +17,7 @@ syntax = "proto3"; package livekit; import "livekit_models.proto"; +import "logger/options.proto"; option go_package = "github.com/livekit/protocol/livekit"; option csharp_namespace = "LiveKit.Proto"; @@ -45,27 +46,27 @@ service Egress { // composite using a web browser message RoomCompositeEgressRequest { - string room_name = 1; // required - string layout = 2; // (optional) - bool audio_only = 3; // (default false) - AudioMixing audio_mixing = 15; // only applies to audio_only egress (default DEFAULT_MIXING) - bool video_only = 4; // (default false) - string custom_base_url = 5; // template base url (default https://recorder.livekit.io) - oneof output { // deprecated (use _output fields) + string room_name = 1; // required + string layout = 2; // (optional) + bool audio_only = 3; // (default false) + AudioMixing audio_mixing = 15; // only applies to audio_only egress (default DEFAULT_MIXING) + bool video_only = 4; // (default false) + string custom_base_url = 5; // template base url (default https://recorder.livekit.io) + oneof output { // deprecated (use _output fields) EncodedFileOutput file = 6 [deprecated = true]; StreamOutput stream = 7 [deprecated = true]; SegmentedFileOutput segments = 10 [deprecated = true]; } oneof options { - EncodingOptionsPreset preset = 8; // (default H264_720P_30) - EncodingOptions advanced = 9; // (optional) + EncodingOptionsPreset preset = 8; // (default H264_720P_30) + EncodingOptions advanced = 9; // (optional) } repeated EncodedFileOutput file_outputs = 11; repeated StreamOutput stream_outputs = 12; repeated SegmentedFileOutput segment_outputs = 13; repeated ImageOutput image_outputs = 14; - repeated WebhookConfig webhooks = 16; // extra webhooks to call for this request + repeated WebhookConfig webhooks = 16; // extra webhooks to call for this request // NEXT_ID: 17 } @@ -76,7 +77,7 @@ message WebEgressRequest { bool audio_only = 2; bool video_only = 3; bool await_start_signal = 12; - oneof output { // deprecated (use _output fields) + oneof output { // deprecated (use _output fields) EncodedFileOutput file = 4 [deprecated = true]; StreamOutput stream = 5 [deprecated = true]; SegmentedFileOutput segments = 6 [deprecated = true]; @@ -90,80 +91,79 @@ message WebEgressRequest { repeated SegmentedFileOutput segment_outputs = 11; repeated ImageOutput image_outputs = 13; - repeated WebhookConfig webhooks = 14; // extra webhooks to call for this request + repeated WebhookConfig webhooks = 14; // extra webhooks to call for this request // NEXT_ID: 15 - } // record audio and video from a single participant message ParticipantEgressRequest { - string room_name = 1; // required - string identity = 2; // required - bool screen_share = 3; // (default false) + string room_name = 1; // required + string identity = 2; // required + bool screen_share = 3; // (default false) oneof options { - EncodingOptionsPreset preset = 4; // (default H264_720P_30) - EncodingOptions advanced = 5; // (optional) + EncodingOptionsPreset preset = 4; // (default H264_720P_30) + EncodingOptions advanced = 5; // (optional) } repeated EncodedFileOutput file_outputs = 6; repeated StreamOutput stream_outputs = 7; repeated SegmentedFileOutput segment_outputs = 8; repeated ImageOutput image_outputs = 9; - repeated WebhookConfig webhooks = 10; // extra webhooks to call for this request + repeated WebhookConfig webhooks = 10; // extra webhooks to call for this request // NEXT_ID: 11 } // containerize up to one audio and one video track message TrackCompositeEgressRequest { - string room_name = 1; // required - string audio_track_id = 2; // (optional) - string video_track_id = 3; // (optional) - oneof output { // deprecated (use _output fields) + string room_name = 1; // required + string audio_track_id = 2; // (optional) + string video_track_id = 3; // (optional) + oneof output { // deprecated (use _output fields) EncodedFileOutput file = 4 [deprecated = true]; StreamOutput stream = 5 [deprecated = true]; SegmentedFileOutput segments = 8 [deprecated = true]; } oneof options { - EncodingOptionsPreset preset = 6; // (default H264_720P_30) - EncodingOptions advanced = 7; // (optional) + EncodingOptionsPreset preset = 6; // (default H264_720P_30) + EncodingOptions advanced = 7; // (optional) } repeated EncodedFileOutput file_outputs = 11; repeated StreamOutput stream_outputs = 12; repeated SegmentedFileOutput segment_outputs = 13; repeated ImageOutput image_outputs = 14; - repeated WebhookConfig webhooks = 15; // extra webhooks to call for this request + repeated WebhookConfig webhooks = 15; // extra webhooks to call for this request // NEXT_ID: 16 } // record tracks individually, without transcoding message TrackEgressRequest { - string room_name = 1; // required - string track_id = 2; // required - oneof output { // required + string room_name = 1; // required + string track_id = 2; // required + oneof output { // required DirectFileOutput file = 3; string websocket_url = 4; } - repeated WebhookConfig webhooks = 5; // extra webhooks to call for this request + repeated WebhookConfig webhooks = 5; // extra webhooks to call for this request // NEXT_ID: 6 } enum EncodedFileType { - DEFAULT_FILETYPE = 0; // file type chosen based on codecs - MP4 = 1; + DEFAULT_FILETYPE = 0; // file type chosen based on codecs + MP4 = 1; OGG = 2; MP3 = 3; } message EncodedFileOutput { - EncodedFileType file_type = 1; // (optional) - string filepath = 2; // see egress docs for templating (default {room_name}-{time}) - bool disable_manifest = 6; // disable upload of manifest file (default false) + EncodedFileType file_type = 1; // (optional) + string filepath = 2; // see egress docs for templating (default {room_name}-{time}) + bool disable_manifest = 6; // disable upload of manifest file (default false) oneof output { S3Upload s3 = 3; GCPUpload gcp = 4; @@ -184,14 +184,14 @@ enum SegmentedFileSuffix { // Used to generate HLS segments or other kind of segmented output message SegmentedFileOutput { - SegmentedFileProtocol protocol = 1; // (optional) - string filename_prefix = 2; // (optional) - string playlist_name = 3; // (optional) - string live_playlist_name = 11; // (optional, disabled if not provided). Path of a live playlist - uint32 segment_duration = 4; // in seconds (optional) - SegmentedFileSuffix filename_suffix = 10; // (optional, default INDEX) - bool disable_manifest = 8; // disable upload of manifest file (default false) - oneof output { // required + SegmentedFileProtocol protocol = 1; // (optional) + string filename_prefix = 2; // (optional) + string playlist_name = 3; // (optional) + string live_playlist_name = 11; // (optional, disabled if not provided). Path of a live playlist + uint32 segment_duration = 4; // in seconds (optional) + SegmentedFileSuffix filename_suffix = 10; // (optional, default INDEX) + bool disable_manifest = 8; // disable upload of manifest file (default false) + oneof output { // required S3Upload s3 = 5; GCPUpload gcp = 6; AzureBlobUpload azure = 7; @@ -200,8 +200,8 @@ message SegmentedFileOutput { } message DirectFileOutput { - string filepath = 1; // see egress docs for templating (default {track_id}-{time}) - bool disable_manifest = 5; // disable upload of manifest file (default false) + string filepath = 1; // see egress docs for templating (default {track_id}-{time}) + bool disable_manifest = 5; // disable upload of manifest file (default false) oneof output { S3Upload s3 = 2; GCPUpload gcp = 3; @@ -213,18 +213,18 @@ message DirectFileOutput { enum ImageFileSuffix { IMAGE_SUFFIX_INDEX = 0; IMAGE_SUFFIX_TIMESTAMP = 1; - IMAGE_SUFFIX_NONE_OVERWRITE = 2; // Do not append any suffix and overwrite the existing image with the latest + IMAGE_SUFFIX_NONE_OVERWRITE = 2; // Do not append any suffix and overwrite the existing image with the latest } message ImageOutput { - uint32 capture_interval = 1; // in seconds (required) - int32 width = 2; // (optional, defaults to track width) - int32 height = 3; // (optional, defaults to track height) - string filename_prefix = 4; // (optional) - ImageFileSuffix filename_suffix = 5; // (optional, default INDEX) - ImageCodec image_codec = 6; // (optional) - bool disable_manifest = 7; // disable upload of manifest file (default false) - oneof output { // required + uint32 capture_interval = 1; // in seconds (required) + int32 width = 2; // (optional, defaults to track width) + int32 height = 3; // (optional, defaults to track height) + string filename_prefix = 4; // (optional) + ImageFileSuffix filename_suffix = 5; // (optional, default INDEX) + ImageCodec image_codec = 6; // (optional) + bool disable_manifest = 7; // disable upload of manifest file (default false) + oneof output { // required S3Upload s3 = 8; GCPUpload gcp = 9; AzureBlobUpload azure = 10; @@ -233,39 +233,39 @@ message ImageOutput { } message S3Upload { - string access_key = 1; - string secret = 2; - string session_token = 11; - string assume_role_arn = 12; // ARN of the role to assume for file upload. Egress will make an AssumeRole API call using the provided access_key and secret to assume that role. On LiveKit cloud, this is only available on accounts that have the feature enabled - string assume_role_external_id = 13; // ExternalID to use when assuming role for upload + string access_key = 1 [(logger.redact) = true]; + string secret = 2 [(logger.redact) = true]; + string session_token = 11 [(logger.redact) = true]; + string assume_role_arn = 12 [(logger.redact) = true]; // ARN of the role to assume for file upload. Egress will make an AssumeRole API call using the provided access_key and secret to assume that role. On LiveKit cloud, this is only available on accounts that have the feature enabled + string assume_role_external_id = 13; // ExternalID to use when assuming role for upload string region = 3; string endpoint = 4; string bucket = 5; bool force_path_style = 6; map metadata = 7; string tagging = 8; - string content_disposition = 9; // Content-Disposition header + string content_disposition = 9; // Content-Disposition header ProxyConfig proxy = 10; - // NEXT_ID: 14 + // NEXT_ID: 14 } message GCPUpload { // service account credentials serialized in JSON "credentials.json" - string credentials = 1; + string credentials = 1 [(logger.redact) = true]; string bucket = 2; ProxyConfig proxy = 3; } message AzureBlobUpload { - string account_name = 1; - string account_key = 2; + string account_name = 1 [(logger.redact) = true]; + string account_key = 2 [(logger.redact) = true]; string container_name = 3; } message AliOSSUpload { - string access_key = 1; - string secret = 2; + string access_key = 1 [(logger.redact) = true]; + string secret = 2 [(logger.redact) = true]; string region = 3; string endpoint = 4; string bucket = 5; @@ -278,46 +278,46 @@ message ProxyConfig { } enum StreamProtocol { - DEFAULT_PROTOCOL = 0; // protocol chosen based on urls + DEFAULT_PROTOCOL = 0; // protocol chosen based on urls RTMP = 1; SRT = 2; } message StreamOutput { - StreamProtocol protocol = 1; // required - repeated string urls = 2; // required + StreamProtocol protocol = 1; // required + repeated string urls = 2; // required } enum AudioMixing { - DEFAULT_MIXING = 0; // all users are mixed together - DUAL_CHANNEL_AGENT = 1; // agent audio in the left channel, all other audio in the right channel - DUAL_CHANNEL_ALTERNATE = 2; // each new audio track alternates between left and right channels + DEFAULT_MIXING = 0; // all users are mixed together + DUAL_CHANNEL_AGENT = 1; // agent audio in the left channel, all other audio in the right channel + DUAL_CHANNEL_ALTERNATE = 2; // each new audio track alternates between left and right channels } message EncodingOptions { - int32 width = 1; // (default 1920) - int32 height = 2; // (default 1080) - int32 depth = 3; // (default 24) - int32 framerate = 4; // (default 30) - AudioCodec audio_codec = 5; // (default OPUS) - int32 audio_bitrate = 6; // (default 128) - int32 audio_quality = 11; // quality setting on audio encoder - int32 audio_frequency = 7; // (default 44100) - VideoCodec video_codec = 8; // (default H264_MAIN) - int32 video_bitrate = 9; // (default 4500) - int32 video_quality = 12; // quality setting on video encoder - double key_frame_interval = 10; // in seconds (default 4s for streaming, segment duration for segmented output, encoder default for files) + int32 width = 1; // (default 1920) + int32 height = 2; // (default 1080) + int32 depth = 3; // (default 24) + int32 framerate = 4; // (default 30) + AudioCodec audio_codec = 5; // (default OPUS) + int32 audio_bitrate = 6; // (default 128) + int32 audio_quality = 11; // quality setting on audio encoder + int32 audio_frequency = 7; // (default 44100) + VideoCodec video_codec = 8; // (default H264_MAIN) + int32 video_bitrate = 9; // (default 4500) + int32 video_quality = 12; // quality setting on video encoder + double key_frame_interval = 10; // in seconds (default 4s for streaming, segment duration for segmented output, encoder default for files) } enum EncodingOptionsPreset { - H264_720P_30 = 0; // 1280x720, 30fps, 3000kpbs, H.264_MAIN / OPUS - H264_720P_60 = 1; // 1280x720, 60fps, 4500kbps, H.264_MAIN / OPUS - H264_1080P_30 = 2; // 1920x1080, 30fps, 4500kbps, H.264_MAIN / OPUS - H264_1080P_60 = 3; // 1920x1080, 60fps, 6000kbps, H.264_MAIN / OPUS - PORTRAIT_H264_720P_30 = 4; // 720x1280, 30fps, 3000kpbs, H.264_MAIN / OPUS - PORTRAIT_H264_720P_60 = 5; // 720x1280, 60fps, 4500kbps, H.264_MAIN / OPUS - PORTRAIT_H264_1080P_30 = 6; // 1080x1920, 30fps, 4500kbps, H.264_MAIN / OPUS - PORTRAIT_H264_1080P_60 = 7; // 1080x1920, 60fps, 6000kbps, H.264_MAIN / OPUS + H264_720P_30 = 0; // 1280x720, 30fps, 3000kpbs, H.264_MAIN / OPUS + H264_720P_60 = 1; // 1280x720, 60fps, 4500kbps, H.264_MAIN / OPUS + H264_1080P_30 = 2; // 1920x1080, 30fps, 4500kbps, H.264_MAIN / OPUS + H264_1080P_60 = 3; // 1920x1080, 60fps, 6000kbps, H.264_MAIN / OPUS + PORTRAIT_H264_720P_30 = 4; // 720x1280, 30fps, 3000kpbs, H.264_MAIN / OPUS + PORTRAIT_H264_720P_60 = 5; // 720x1280, 60fps, 4500kbps, H.264_MAIN / OPUS + PORTRAIT_H264_1080P_30 = 6; // 1080x1920, 30fps, 4500kbps, H.264_MAIN / OPUS + PORTRAIT_H264_1080P_60 = 7; // 1080x1920, 60fps, 6000kbps, H.264_MAIN / OPUS } message UpdateLayoutRequest { @@ -332,9 +332,9 @@ message UpdateStreamRequest { } message ListEgressRequest { - string room_name = 1; // (optional, filter by room name) - string egress_id = 2; // (optional, filter by egress ID) - bool active = 3; // (optional, list active egress only) + string room_name = 1; // (optional, filter by room name) + string egress_id = 2; // (optional, filter by egress ID) + bool active = 3; // (optional, list active egress only) } message ListEgressResponse { @@ -379,7 +379,7 @@ message EgressInfo { TrackCompositeEgressRequest track_composite = 5; TrackEgressRequest track = 6; } - oneof result { // deprecated (use _result fields) + oneof result { // deprecated (use _result fields) StreamInfoList stream = 7 [deprecated = true]; FileInfo file = 8 [deprecated = true]; SegmentsInfo segments = 12 [deprecated = true]; @@ -443,16 +443,16 @@ message ImagesInfo { message AutoParticipantEgress { oneof options { - EncodingOptionsPreset preset = 1; // (default H264_720P_30) - EncodingOptions advanced = 2; // (optional) + EncodingOptionsPreset preset = 1; // (default H264_720P_30) + EncodingOptions advanced = 2; // (optional) } repeated EncodedFileOutput file_outputs = 3; repeated SegmentedFileOutput segment_outputs = 4; } message AutoTrackEgress { - string filepath = 1; // see docs for templating (default {track_id}-{time}) - bool disable_manifest = 5; // disables upload of json manifest file (default false) + string filepath = 1; // see docs for templating (default {track_id}-{time}) + bool disable_manifest = 5; // disables upload of json manifest file (default false) oneof output { S3Upload s3 = 2; GCPUpload gcp = 3; diff --git a/protobufs/logger/options.proto b/protobufs/logger/options.proto index 8ca017f5a..c5c406af6 100644 --- a/protobufs/logger/options.proto +++ b/protobufs/logger/options.proto @@ -1,7 +1,7 @@ syntax = "proto3"; package logger; -option go_package = "github.com/livekit/protocol/logger"; +option go_package = "github.com/livekit/protocol/livekit/logger"; import "google/protobuf/descriptor.proto"; diff --git a/protobufs/rpc/egress.proto b/protobufs/rpc/egress.proto index 934e6892a..18987f89d 100644 --- a/protobufs/rpc/egress.proto +++ b/protobufs/rpc/egress.proto @@ -19,6 +19,7 @@ package rpc; option go_package = "github.com/livekit/protocol/rpc"; import "options.proto"; +import "logger/options.proto"; import "livekit_egress.proto"; service EgressInternal { @@ -56,7 +57,7 @@ message StartEgressRequest { // connection info string room_id = 3; - string token = 8; + string token = 8 [(logger.redact) = true]; string ws_url = 9; // cloud only diff --git a/rpc/egress.pb.go b/rpc/egress.pb.go index 10517255b..8483fa6a3 100644 --- a/rpc/egress.pb.go +++ b/rpc/egress.pb.go @@ -22,6 +22,7 @@ package rpc import ( livekit "github.com/livekit/protocol/livekit" + _ "github.com/livekit/protocol/livekit/logger" _ "github.com/livekit/psrpc/protoc-gen-psrpc/options" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" @@ -304,7 +305,7 @@ var File_rpc_egress_proto protoreflect.FileDescriptor const file_rpc_egress_proto_rawDesc = "" + "\n" + - "\x10rpc/egress.proto\x12\x03rpc\x1a\roptions.proto\x1a\x14livekit_egress.proto\"\xa3\x04\n" + + "\x10rpc/egress.proto\x12\x03rpc\x1a\roptions.proto\x1a\x14logger/options.proto\x1a\x14livekit_egress.proto\"\xa9\x04\n" + "\x12StartEgressRequest\x12\x1b\n" + "\tegress_id\x18\x01 \x01(\tR\begressId\x12L\n" + "\x0eroom_composite\x18\x05 \x01(\v2#.livekit.RoomCompositeEgressRequestH\x00R\rroomComposite\x12-\n" + @@ -312,8 +313,8 @@ const file_rpc_egress_proto_rawDesc = "" + "\vparticipant\x18\r \x01(\v2!.livekit.ParticipantEgressRequestH\x00R\vparticipant\x12O\n" + "\x0ftrack_composite\x18\x06 \x01(\v2$.livekit.TrackCompositeEgressRequestH\x00R\x0etrackComposite\x123\n" + "\x05track\x18\a \x01(\v2\x1b.livekit.TrackEgressRequestH\x00R\x05track\x12\x17\n" + - "\aroom_id\x18\x03 \x01(\tR\x06roomId\x12\x14\n" + - "\x05token\x18\b \x01(\tR\x05token\x12\x15\n" + + "\aroom_id\x18\x03 \x01(\tR\x06roomId\x12\x1a\n" + + "\x05token\x18\b \x01(\tB\x04\x88\xb5\x18\x01R\x05token\x12\x15\n" + "\x06ws_url\x18\t \x01(\tR\x05wsUrl\x120\n" + "\x14cloud_backup_enabled\x18\n" + " \x01(\bR\x12cloudBackupEnabled\x12#\n" + diff --git a/rpc/egress.psrpc.go b/rpc/egress.psrpc.go index 907980c8e..746d573de 100644 --- a/rpc/egress.psrpc.go +++ b/rpc/egress.psrpc.go @@ -312,39 +312,40 @@ func (UnimplementedEgressHandlerServer) StopEgress(context.Context, *livekit4.St } var psrpcFileDescriptor2 = []byte{ - // 544 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x93, 0xd1, 0x4e, 0xdb, 0x3e, - 0x14, 0xc6, 0xff, 0xa6, 0x7f, 0x02, 0x39, 0xa5, 0x5d, 0xe5, 0x31, 0x61, 0x0a, 0x68, 0xa5, 0xec, - 0x22, 0x37, 0x4b, 0x11, 0x5c, 0xed, 0x6e, 0x03, 0x55, 0xa3, 0x12, 0xd2, 0xa6, 0x74, 0x68, 0xd2, - 0x76, 0x11, 0x25, 0x8e, 0xc7, 0xac, 0x26, 0xb1, 0x67, 0x3b, 0xf4, 0x19, 0x78, 0x8c, 0x69, 0x6f, - 0xc0, 0xc5, 0x9e, 0x6f, 0xaa, 0xd3, 0x86, 0xb4, 0xa8, 0xd3, 0x2e, 0xfd, 0x7d, 0xe7, 0xfb, 0xe5, - 0x9c, 0xa3, 0x13, 0xe8, 0x28, 0x49, 0x07, 0xec, 0x56, 0x31, 0xad, 0x7d, 0xa9, 0x84, 0x11, 0xb8, - 0xa1, 0x24, 0xed, 0xb6, 0x84, 0x34, 0x5c, 0xe4, 0x73, 0xad, 0xbb, 0x9b, 0xf2, 0x3b, 0x36, 0xe1, - 0x26, 0xac, 0x57, 0xf6, 0x7f, 0xfd, 0x0f, 0x78, 0x6c, 0x22, 0x65, 0x86, 0x56, 0x0d, 0xd8, 0x8f, - 0x82, 0x69, 0x83, 0x0f, 0xc0, 0x2d, 0xcb, 0x42, 0x9e, 0x10, 0xd4, 0x43, 0x9e, 0x1b, 0x6c, 0x97, - 0xc2, 0x28, 0xc1, 0xd7, 0xd0, 0x56, 0x42, 0x64, 0x21, 0x15, 0x99, 0x14, 0x9a, 0x1b, 0x46, 0x36, - 0x7b, 0xc8, 0x6b, 0x9e, 0x9d, 0xf8, 0xf3, 0x4f, 0xf8, 0x81, 0x10, 0xd9, 0xe5, 0xc2, 0x5d, 0x22, - 0x5f, 0xfd, 0x17, 0xb4, 0x54, 0xdd, 0xc5, 0xaf, 0xa1, 0x31, 0x65, 0x31, 0x69, 0x5a, 0xc4, 0x7e, - 0x85, 0xf8, 0xcc, 0xe2, 0xd5, 0xe0, 0xac, 0x0e, 0x0f, 0xa1, 0x29, 0x23, 0x65, 0x38, 0xe5, 0x32, - 0xca, 0x0d, 0x69, 0xd9, 0xd8, 0x71, 0x15, 0xfb, 0xf8, 0xe8, 0xad, 0xc6, 0xeb, 0x39, 0xfc, 0x01, - 0x9e, 0x19, 0x15, 0xd1, 0x49, 0x6d, 0x08, 0xc7, 0xa2, 0x5e, 0x55, 0xa8, 0x4f, 0x33, 0x7f, 0xed, - 0x14, 0x6d, 0xb3, 0x64, 0xe3, 0x73, 0xd8, 0xb4, 0x0a, 0xd9, 0xb2, 0x98, 0x83, 0x65, 0xcc, 0x6a, - 0xba, 0xac, 0xc5, 0x7b, 0xb0, 0x65, 0x37, 0xc9, 0x13, 0xd2, 0xb0, 0x4b, 0x76, 0x66, 0xcf, 0x51, - 0x82, 0x77, 0x61, 0xd3, 0x88, 0x09, 0xcb, 0xc9, 0xb6, 0x95, 0xcb, 0x07, 0x7e, 0x01, 0xce, 0x54, - 0x87, 0x85, 0x4a, 0x89, 0x5b, 0xca, 0x53, 0x7d, 0xa3, 0x52, 0x7c, 0x0a, 0xbb, 0x34, 0x15, 0x45, - 0x12, 0xc6, 0x11, 0x9d, 0x14, 0x32, 0x64, 0x79, 0x14, 0xa7, 0x2c, 0x21, 0xd0, 0x43, 0xde, 0x76, - 0x80, 0xad, 0x77, 0x61, 0xad, 0x61, 0xe9, 0xe0, 0x13, 0x68, 0x31, 0x6d, 0x78, 0x16, 0x19, 0x96, - 0x84, 0x54, 0x16, 0xa4, 0xdd, 0x43, 0x1e, 0x0a, 0x76, 0x2a, 0xf1, 0x52, 0x16, 0x17, 0x2e, 0x6c, - 0xa9, 0xb2, 0xe1, 0xfe, 0x3e, 0xec, 0x5d, 0x73, 0x6d, 0xde, 0x51, 0xc3, 0xef, 0x96, 0x37, 0xd1, - 0x7f, 0x03, 0xe4, 0xa9, 0xa5, 0xa5, 0xc8, 0x35, 0xc3, 0x47, 0x00, 0xd5, 0x15, 0x69, 0x82, 0x7a, - 0x0d, 0xcf, 0x0d, 0xdc, 0xc5, 0x19, 0xe9, 0xb3, 0xdf, 0x08, 0xda, 0x65, 0x62, 0x94, 0x1b, 0xa6, - 0xf2, 0x28, 0xc5, 0xef, 0xa1, 0x59, 0xbb, 0x46, 0xbc, 0xe7, 0x2b, 0x49, 0xfd, 0xa7, 0xf7, 0xd9, - 0x7d, 0x5e, 0xad, 0x77, 0x01, 0xf8, 0x26, 0xfa, 0xf0, 0x70, 0x8f, 0x9c, 0x0e, 0x7a, 0x8b, 0x4e, - 0x11, 0xfe, 0x0a, 0x9d, 0xd5, 0xb6, 0xf0, 0xa1, 0xa5, 0xad, 0x19, 0xa4, 0x7b, 0xb4, 0xc6, 0x2d, - 0x67, 0xa9, 0xe0, 0x1b, 0x1e, 0x3a, 0xfb, 0x89, 0xa0, 0x55, 0xda, 0x57, 0x51, 0x9e, 0xa4, 0x4c, - 0xe1, 0x11, 0xec, 0xdc, 0xc8, 0x24, 0x32, 0x6c, 0x6c, 0x14, 0x8b, 0x32, 0x7c, 0x58, 0xf5, 0x57, - 0x97, 0xff, 0xda, 0xbd, 0xf3, 0x70, 0x8f, 0x36, 0x3a, 0x08, 0x0f, 0x01, 0xc6, 0x46, 0xc8, 0x79, - 0xcf, 0xdd, 0xaa, 0xf4, 0x51, 0xfc, 0x17, 0xcc, 0xc5, 0xf1, 0x97, 0x97, 0xb7, 0xdc, 0x7c, 0x2f, - 0x62, 0x9f, 0x8a, 0x6c, 0x30, 0x2f, 0x1c, 0xd8, 0x9f, 0x9e, 0x8a, 0x74, 0xa0, 0x24, 0x8d, 0x1d, - 0xfb, 0x3a, 0xff, 0x13, 0x00, 0x00, 0xff, 0xff, 0x6f, 0xc8, 0xf7, 0xcf, 0x40, 0x04, 0x00, 0x00, + // 557 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x93, 0x41, 0x6f, 0xd3, 0x30, + 0x14, 0xc7, 0xf1, 0xba, 0x76, 0xeb, 0xeb, 0x5a, 0x2a, 0x33, 0x34, 0x2f, 0xdb, 0x44, 0xd7, 0x71, + 0xc8, 0x85, 0x74, 0xda, 0x4e, 0xdc, 0xa0, 0x53, 0xc5, 0x2a, 0x4d, 0x02, 0x65, 0x4c, 0x48, 0x70, + 0x88, 0x12, 0xc7, 0x14, 0xab, 0x49, 0x6c, 0x6c, 0x67, 0xfb, 0x0a, 0xec, 0x63, 0x70, 0xe4, 0x3a, + 0x09, 0x3e, 0x1f, 0xaa, 0xd3, 0x65, 0x69, 0xa7, 0x22, 0x8e, 0xfe, 0xff, 0xdf, 0xff, 0x97, 0xf7, + 0x9e, 0x5e, 0xa0, 0xab, 0x24, 0x1d, 0xb0, 0x89, 0x62, 0x5a, 0x7b, 0x52, 0x09, 0x23, 0x70, 0x4d, + 0x49, 0xea, 0xb4, 0x85, 0x34, 0x5c, 0x64, 0x73, 0xcd, 0xd9, 0x4e, 0xc4, 0x64, 0xc2, 0xd4, 0x60, + 0x59, 0xe5, 0xd7, 0x6c, 0xca, 0x4d, 0x50, 0xcd, 0xf7, 0x7f, 0xad, 0x03, 0xbe, 0x34, 0xa1, 0x32, + 0x23, 0xab, 0xfa, 0xec, 0x7b, 0xce, 0xb4, 0xc1, 0x7b, 0xd0, 0x2c, 0xca, 0x02, 0x1e, 0x13, 0xd4, + 0x43, 0x6e, 0xd3, 0xdf, 0x2c, 0x84, 0x71, 0x8c, 0x2f, 0xa0, 0xa3, 0x84, 0x48, 0x03, 0x2a, 0x52, + 0x29, 0x34, 0x37, 0x8c, 0xd4, 0x7b, 0xc8, 0x6d, 0x9d, 0x1c, 0x79, 0xf3, 0x4f, 0x78, 0xbe, 0x10, + 0xe9, 0xd9, 0xbd, 0xbb, 0x40, 0x3e, 0x7f, 0xe2, 0xb7, 0x55, 0xd5, 0xc5, 0xaf, 0xa0, 0x76, 0xc3, + 0x22, 0xd2, 0xb2, 0x88, 0xdd, 0x12, 0xf1, 0x89, 0x45, 0xcb, 0xc1, 0x59, 0x1d, 0x1e, 0x41, 0x4b, + 0x86, 0xca, 0x70, 0xca, 0x65, 0x98, 0x19, 0xd2, 0xb6, 0xb1, 0xc3, 0x32, 0xf6, 0xe1, 0xc1, 0x5b, + 0x8e, 0x57, 0x73, 0xf8, 0x3d, 0x3c, 0x35, 0x2a, 0xa4, 0xd3, 0xca, 0x10, 0x0d, 0x8b, 0x7a, 0x59, + 0xa2, 0x3e, 0xce, 0xfc, 0x95, 0x53, 0x74, 0xcc, 0x82, 0x8d, 0x4f, 0xa1, 0x6e, 0x15, 0xb2, 0x61, + 0x31, 0x7b, 0x8b, 0x98, 0xe5, 0x74, 0x51, 0x8b, 0x77, 0x60, 0xc3, 0x6e, 0x92, 0xc7, 0xa4, 0x66, + 0x97, 0xdc, 0x98, 0x3d, 0xc7, 0x31, 0x76, 0xa0, 0x6e, 0xc4, 0x94, 0x65, 0x64, 0x73, 0x26, 0x0f, + 0xd7, 0x7f, 0xfc, 0x26, 0xc8, 0x2f, 0x24, 0xfc, 0x1c, 0x1a, 0x37, 0x3a, 0xc8, 0x55, 0x42, 0x9a, + 0x36, 0x53, 0xbf, 0xd1, 0x57, 0x2a, 0xc1, 0xc7, 0xb0, 0x4d, 0x13, 0x91, 0xc7, 0x41, 0x14, 0xd2, + 0x69, 0x2e, 0x03, 0x96, 0x85, 0x51, 0xc2, 0x62, 0x02, 0x3d, 0xe4, 0x6e, 0xfa, 0xd8, 0x7a, 0x43, + 0x6b, 0x8d, 0x0a, 0x07, 0x1f, 0x41, 0x9b, 0x69, 0xc3, 0xd3, 0xd0, 0xb0, 0x38, 0xa0, 0x32, 0x27, + 0x9d, 0x1e, 0x72, 0x91, 0xbf, 0x55, 0x8a, 0x67, 0x32, 0x1f, 0x36, 0x61, 0x43, 0x15, 0x6d, 0xf7, + 0x77, 0x61, 0xe7, 0x82, 0x6b, 0xf3, 0x96, 0x1a, 0x7e, 0xbd, 0xb8, 0x8f, 0xfe, 0x6b, 0x20, 0x8f, + 0x2d, 0x2d, 0x45, 0xa6, 0x19, 0x3e, 0x00, 0x28, 0x6f, 0x49, 0x13, 0xd4, 0xab, 0xb9, 0x4d, 0xbf, + 0x79, 0x7f, 0x4c, 0xfa, 0xe4, 0x0f, 0x82, 0x4e, 0x91, 0x18, 0x67, 0x86, 0xa9, 0x2c, 0x4c, 0xf0, + 0x3b, 0x68, 0x55, 0x6e, 0x12, 0xef, 0x78, 0x4a, 0x52, 0xef, 0xf1, 0x95, 0x3a, 0xcf, 0xca, 0x25, + 0xdf, 0x03, 0xbe, 0x8a, 0x3e, 0xdc, 0xdd, 0xa2, 0x46, 0x17, 0xbd, 0x41, 0xc7, 0x08, 0x7f, 0x81, + 0xee, 0x72, 0x5b, 0x78, 0xdf, 0xd2, 0x56, 0x0c, 0xe2, 0x1c, 0xac, 0x70, 0x8b, 0x59, 0x4a, 0xf8, + 0x9a, 0x8b, 0x4e, 0x7e, 0x22, 0x68, 0x17, 0xf6, 0x79, 0x98, 0xc5, 0x09, 0x53, 0x78, 0x0c, 0x5b, + 0x57, 0x32, 0x0e, 0x0d, 0xbb, 0x34, 0x8a, 0x85, 0x29, 0xde, 0x2f, 0xfb, 0xab, 0xca, 0xff, 0xec, + 0xbe, 0x71, 0x77, 0x8b, 0xd6, 0xba, 0x08, 0x8f, 0x00, 0x2e, 0x8d, 0x90, 0xf3, 0x9e, 0x9d, 0xb2, + 0xf4, 0x41, 0xfc, 0x1f, 0xcc, 0xf0, 0xf0, 0xf3, 0x8b, 0x09, 0x37, 0xdf, 0xf2, 0xc8, 0xa3, 0x22, + 0x1d, 0xcc, 0x0b, 0x07, 0xf6, 0xd7, 0xa7, 0x22, 0x19, 0x28, 0x49, 0xa3, 0x86, 0x7d, 0x9d, 0xfe, + 0x0d, 0x00, 0x00, 0xff, 0xff, 0x99, 0x7e, 0x7d, 0x79, 0x5c, 0x04, 0x00, 0x00, }