From fba411c451d66482b8bb04e50377590c199ce191 Mon Sep 17 00:00:00 2001 From: Anastasia Shemyakinskaya <36507473+AnastasiaShemyakinskaya@users.noreply.github.com> Date: Wed, 21 Dec 2022 12:12:26 +0300 Subject: [PATCH] Revert "GO -551 remove unused code" --- change/state.go | 92 + clientlibrary/service/service.pb.go | 426 +-- core/block.go | 28 + core/block/doc/service.go | 5 + core/block/editor.go | 51 + core/block/editor/clipboard/clipboard.go | 2 + core/block/editor/dashboard.go | 5 +- core/block/editor/dataview/dataview.go | 12 + core/block/editor/file/uploader.go | 6 + core/block/editor/import/import.go | 896 ++++++ core/block/editor/import/import_test.go | 1 + core/block/editor/page.go | 4 + core/block/editor/smartblock/smartblock.go | 43 + core/block/editor/state/normalize.go | 1 + core/block/editor/state/state.go | 23 + core/block/editor/template.go | 4 +- core/block/editor/workspaces.go | 15 + .../markdown/anymark/whitespace/normalize.go | 50 + core/block/service.go | 50 +- core/block/simple/dataview/dataview.go | 34 + core/block/simple/text/text.go | 60 + core/block/simple/text/text_test.go | 65 + core/block/source/anytypeprofile.go | 9 + core/block/source/bundledobjecttype.go | 4 + core/block/source/bundledrelation.go | 4 + core/block/source/date.go | 12 + core/block/source/files.go | 20 + core/block/source/service.go | 28 +- core/block/source/source.go | 6 + core/block/source/static.go | 4 + core/block/source/threaddb.go | 4 + core/block/source/virtual.go | 4 + core/converter/graphjson/graphjson.go | 7 + core/debug/debugtree/debugtree.go | 9 + core/debug/treebuilder.go | 10 + core/relation/relationutils/relation.go | 7 + core/relation/service.go | 6 + core/subscription/service.go | 16 + pb/commands.pb.go | 2634 +++++++++++------ pb/protos/commands.proto | 25 + pb/protos/service/service.proto | 1 + pb/service/service.pb.go | 439 +-- pkg/lib/core/core.go | 11 + pkg/lib/core/files.go | 9 + pkg/lib/core/images.go | 8 + pkg/lib/core/ipfs.go | 9 + pkg/lib/core/smartblock/smartblock.go | 9 + pkg/lib/core/smartblock_snapshot.go | 26 + pkg/lib/core/wallet.go | 18 + pkg/lib/database/subscription.go | 23 + pkg/lib/ipfs/helpers/resolver/resolver.go | 52 + pkg/lib/localstore/objectstore/objects.go | 151 +- pkg/lib/localstore/stores.go | 25 + pkg/lib/mill/blob.go | 8 + pkg/lib/mill/image_exif.go | 12 + pkg/lib/mill/image_resize.go | 13 + pkg/lib/mill/mill.go | 2 + pkg/lib/mill/schema/schema.go | 23 + pkg/lib/structs/structs.go | 15 + pkg/lib/vclock/vclock.go | 43 + pkg/lib/wallet/pubkey.go | 18 + util/anonymize/anonymize.go | 13 + util/anyblocks/anyblocks.go | 10 + util/console/console.go | 10 + util/constans.go | 3 + util/ocache/ocache.go | 6 + util/pbtypes/compare.go | 123 + util/pbtypes/copy.go | 68 + util/pbtypes/pbtypes.go | 181 ++ util/slice/slice.go | 5 + util/text/text.go | 9 + util/uri/uri.go | 36 + 72 files changed, 4755 insertions(+), 1306 deletions(-) create mode 100644 core/block/editor/import/import.go create mode 100644 core/block/editor/import/import_test.go create mode 100644 pkg/lib/core/ipfs.go create mode 100644 pkg/lib/structs/structs.go create mode 100644 util/constans.go diff --git a/change/state.go b/change/state.go index 3f46d9dc7..7e2810d6b 100644 --- a/change/state.go +++ b/change/state.go @@ -1,6 +1,7 @@ package change import ( + "sort" "time" "github.com/anytypeio/go-anytype-middleware/core/block/editor/state" @@ -87,6 +88,97 @@ func BuildStateSimpleCRDT(root *state.State, t *Tree) (s *state.State, err error return s, err } +// Full version found parallel branches and proposes to resolve conflicts +func BuildState(root *state.State, t *Tree) (s *state.State, err error) { + var ( + sc = NewStateCache() + startId string + applyRoot bool + st = time.Now() + count int + ) + if startId = root.ChangeId(); startId == "" { + startId = t.RootId() + applyRoot = true + } + t.IterateBranching(startId, func(c *Change, branchLevel int) (isContinue bool) { + if root.ChangeId() == c.Id { + s = root + if applyRoot { + s = s.NewState() + if err = s.ApplyChange(c.Change.Content...); err != nil { + return false + } + s.SetLastModified(c.Timestamp, c.Account) + s.AddFileKeys(c.FileKeys...) + count++ + } + sc.Set(c.Id, s, len(c.Next)) + return true + } + if len(c.PreviousIds) == 1 { + ps := sc.Get(c.PreviousIds[0]) + s := ps.NewState() + if err = s.ApplyChange(c.Change.Content...); err != nil { + return false + } + s.SetLastModified(c.Timestamp, c.Account) + s.AddFileKeys(c.FileKeys...) + count++ + s.SetChangeId(c.Id) + if branchLevel == 0 { + if _, _, err = state.ApplyStateFastOne(s); err != nil { + return false + } + sc.Set(c.Id, ps, len(c.Next)) + } else { + sc.Set(c.Id, s, len(c.Next)) + } + } else if len(c.PreviousIds) > 1 { + toMerge := make([]*state.State, len(c.PreviousIds)) + sort.Strings(c.PreviousIds) + for i, prevId := range c.PreviousIds { + toMerge[i] = sc.Get(prevId) + } + ps := merge(t, toMerge...) + s := ps.NewState() + if err = s.ApplyChange(c.Change.Content...); err != nil { + return false + } + s.SetLastModified(c.Timestamp, c.Account) + s.AddFileKeys(c.FileKeys...) + count++ + s.SetChangeId(c.Id) + if branchLevel == 0 { + if _, _, err = state.ApplyStateFastOne(s); err != nil { + return false + } + sc.Set(c.Id, ps, len(c.Next)) + } else { + sc.Set(c.Id, s, len(c.Next)) + } + } + return true + }) + if err != nil { + return nil, err + } + if len(t.headIds) > 1 { + toMerge := make([]*state.State, len(t.headIds)) + sort.Strings(t.headIds) + for i, hid := range t.headIds { + if s.ChangeId() == hid { + toMerge[i] = s + } else { + toMerge[i] = sc.Get(hid) + } + } + s = merge(t, toMerge...) + } + log.Infof("build state: changes: %d; dur: %v;", count, time.Since(st)) + return +} + func merge(t *Tree, states ...*state.State) (s *state.State) { for _, st := range states { if s == nil { diff --git a/clientlibrary/service/service.pb.go b/clientlibrary/service/service.pb.go index e570133aa..b801130f4 100644 --- a/clientlibrary/service/service.pb.go +++ b/clientlibrary/service/service.pb.go @@ -25,211 +25,212 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package func init() { proto.RegisterFile("pb/protos/service/service.proto", fileDescriptor_93a29dc403579097) } var fileDescriptor_93a29dc403579097 = []byte{ - // 3260 bytes of a gzipped FileDescriptorProto + // 3279 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x9c, 0xdd, 0x6f, 0x1d, 0x47, 0xf9, 0xc7, 0x7b, 0x6e, 0x7e, 0xfd, 0xb1, 0xa5, 0x05, 0xb6, 0x10, 0x4a, 0x68, 0x9d, 0x34, 0x6d, 0xfc, 0x12, 0xc7, 0xc7, 0x6e, 0x02, 0x45, 0x70, 0x83, 0x4e, 0xec, 0x38, 0xb1, 0x1a, 0x27, 0xc1, 0xc7, 0x69, 0xa4, 0x4a, 0x48, 0xac, 0x77, 0x27, 0xc7, 0x8b, 0xf7, 0xec, 0x2c, 0xbb, 0x73, 0x8e, - 0x63, 0x10, 0x08, 0x04, 0x02, 0x81, 0x2a, 0x81, 0xc4, 0x25, 0xff, 0x10, 0x97, 0xbd, 0xe4, 0x12, - 0x35, 0x7f, 0x05, 0x77, 0x68, 0x77, 0x9f, 0x79, 0x7b, 0x76, 0x9e, 0xd9, 0x35, 0x57, 0x85, 0xf3, - 0x7c, 0x9e, 0xe7, 0x3b, 0xef, 0xf3, 0xcc, 0xcc, 0xc6, 0xc1, 0xb5, 0xe2, 0x64, 0xbb, 0x28, 0xb9, - 0xe0, 0xd5, 0x76, 0xc5, 0xca, 0x65, 0x1a, 0x33, 0xf9, 0xdf, 0x71, 0xf3, 0x73, 0xf8, 0x7a, 0x94, - 0x5f, 0x88, 0x8b, 0x82, 0x5d, 0x7d, 0x47, 0x93, 0x31, 0x9f, 0xcf, 0xa3, 0x3c, 0xa9, 0x5a, 0xe4, - 0xea, 0x15, 0x6d, 0x61, 0x4b, 0x96, 0x0b, 0xf8, 0xfd, 0xce, 0x7f, 0x3e, 0x1f, 0x05, 0x6f, 0xed, - 0x66, 0x29, 0xcb, 0xc5, 0x2e, 0x78, 0x84, 0x9f, 0x05, 0x6f, 0x4e, 0x8a, 0xe2, 0x01, 0x13, 0x9f, - 0xb2, 0xb2, 0x4a, 0x79, 0x1e, 0x7e, 0x30, 0x06, 0x81, 0xf1, 0x51, 0x11, 0x8f, 0x27, 0x45, 0x31, - 0xd6, 0xc6, 0xf1, 0x11, 0xfb, 0xc5, 0x82, 0x55, 0xe2, 0xea, 0x87, 0x7e, 0xa8, 0x2a, 0x78, 0x5e, - 0xb1, 0xf0, 0x45, 0xf0, 0x8d, 0x49, 0x51, 0x4c, 0x99, 0xd8, 0x63, 0x75, 0x05, 0xa6, 0x22, 0x12, - 0x2c, 0x5c, 0xeb, 0xb8, 0xda, 0x80, 0xd2, 0x58, 0xef, 0x07, 0x41, 0xe7, 0x38, 0x78, 0xa3, 0xd6, - 0x39, 0x5d, 0x88, 0x84, 0x9f, 0xe7, 0xe1, 0xfb, 0x5d, 0x47, 0x30, 0xa9, 0xd8, 0x37, 0x7c, 0x08, - 0x44, 0x7d, 0x1e, 0x7c, 0xf5, 0x79, 0x94, 0x65, 0x4c, 0xec, 0x96, 0xac, 0x2e, 0xb8, 0xed, 0xd3, - 0x9a, 0xc6, 0xad, 0x4d, 0xc5, 0xfd, 0xc0, 0xcb, 0x40, 0xe0, 0xcf, 0x82, 0x37, 0x5b, 0xcb, 0x11, - 0x8b, 0xf9, 0x92, 0x95, 0xa1, 0xd3, 0x0b, 0x8c, 0x44, 0x93, 0x77, 0x20, 0x1c, 0x7b, 0x97, 0xe7, - 0x4b, 0x56, 0x0a, 0x77, 0x6c, 0x30, 0xfa, 0x63, 0x6b, 0x08, 0x62, 0x67, 0xc1, 0xdb, 0x66, 0x83, - 0x4c, 0x59, 0xd5, 0x0c, 0x98, 0x0d, 0xba, 0xce, 0x80, 0x28, 0x9d, 0x5b, 0x43, 0x50, 0x50, 0x4b, - 0x83, 0x10, 0xd4, 0x32, 0x5e, 0x29, 0xb1, 0x75, 0x67, 0x04, 0x83, 0x50, 0x5a, 0x1b, 0x03, 0x48, - 0x90, 0xfa, 0x59, 0xf0, 0xb5, 0xe7, 0xbc, 0x3c, 0xab, 0x8a, 0x28, 0x66, 0xd0, 0xd9, 0x37, 0x6d, - 0x6f, 0x69, 0xc5, 0xfd, 0xbd, 0xda, 0x87, 0x81, 0xc2, 0x59, 0x10, 0x2a, 0xe3, 0x93, 0x93, 0x9f, - 0xb3, 0x58, 0x4c, 0x92, 0x04, 0xb7, 0x9c, 0xf2, 0x6e, 0x89, 0xf1, 0x24, 0x49, 0xa8, 0x96, 0x73, - 0xa3, 0x20, 0x76, 0x1e, 0x5c, 0x41, 0x62, 0x8f, 0xd2, 0xaa, 0x11, 0xdc, 0xf2, 0x47, 0x01, 0x4c, - 0x89, 0x8e, 0x87, 0xe2, 0x20, 0xfc, 0xdb, 0x51, 0xf0, 0x1d, 0x87, 0xf2, 0x11, 0x9b, 0xf3, 0x25, - 0x0b, 0x77, 0xfa, 0xa3, 0xb5, 0xa4, 0xd2, 0xff, 0xe8, 0x12, 0x1e, 0x8e, 0xae, 0x9c, 0xb2, 0x8c, - 0xc5, 0x82, 0xec, 0xca, 0xd6, 0xdc, 0xdb, 0x95, 0x0a, 0x33, 0x66, 0x81, 0x34, 0x3e, 0x60, 0x62, - 0x77, 0x51, 0x96, 0x2c, 0x17, 0x64, 0x5f, 0x6a, 0xa4, 0xb7, 0x2f, 0x2d, 0xd4, 0x51, 0x9f, 0x07, - 0x4c, 0x4c, 0xb2, 0x8c, 0xac, 0x4f, 0x6b, 0xee, 0xad, 0x8f, 0xc2, 0x40, 0xe1, 0x37, 0x46, 0x9f, - 0x4d, 0x99, 0x38, 0xa8, 0x1e, 0xa6, 0xb3, 0xd3, 0x2c, 0x9d, 0x9d, 0x0a, 0x96, 0x84, 0xdb, 0x64, - 0xa3, 0xd8, 0xa0, 0x52, 0xdd, 0x19, 0xee, 0xe0, 0xa8, 0xe1, 0xfd, 0x97, 0x05, 0x2f, 0xe9, 0x1e, - 0x6b, 0xcd, 0xbd, 0x35, 0x54, 0x18, 0x28, 0xfc, 0x34, 0x78, 0x6b, 0x12, 0xc7, 0x7c, 0x91, 0xab, - 0x05, 0x17, 0x6d, 0x5f, 0xad, 0xb1, 0xb3, 0xe2, 0xde, 0xec, 0xa1, 0xf4, 0x92, 0x0b, 0x36, 0x58, - 0x3b, 0x3e, 0x70, 0xfa, 0xa1, 0x95, 0xe3, 0x43, 0x3f, 0xd4, 0x89, 0xbd, 0xc7, 0x32, 0x46, 0xc6, - 0x6e, 0x8d, 0x3d, 0xb1, 0x15, 0xd4, 0x89, 0x0d, 0x13, 0xc5, 0x1d, 0x1b, 0x4d, 0x93, 0x0f, 0xfd, - 0x90, 0xb1, 0x23, 0x43, 0x6c, 0xc1, 0x0b, 0xbc, 0x23, 0x4b, 0x27, 0xc1, 0x0b, 0x6a, 0x47, 0xb6, - 0x91, 0x4e, 0xd4, 0xc3, 0x7a, 0x41, 0x71, 0x47, 0x3d, 0x34, 0x57, 0x90, 0x1b, 0x3e, 0x44, 0x4f, - 0x68, 0xd9, 0x7f, 0x3c, 0x7f, 0x91, 0xce, 0x9e, 0x15, 0x49, 0xdd, 0x8b, 0x1b, 0xee, 0x0e, 0x32, - 0x10, 0x62, 0x42, 0x13, 0x28, 0xa8, 0xfd, 0x24, 0x08, 0xda, 0xe5, 0xeb, 0x49, 0xc1, 0xf2, 0xf0, - 0xba, 0xe5, 0x09, 0xeb, 0x5a, 0x6d, 0x51, 0xb1, 0xdf, 0xf7, 0x10, 0xba, 0x59, 0xda, 0xdf, 0x9b, - 0xdd, 0x2d, 0x74, 0x7a, 0x34, 0x26, 0xa2, 0x59, 0x10, 0x82, 0x0b, 0x3a, 0x3d, 0xe5, 0xe7, 0xee, - 0x82, 0xd6, 0x16, 0x7f, 0x41, 0x81, 0xd0, 0x19, 0x15, 0x14, 0xd4, 0x95, 0x51, 0xc9, 0x62, 0xf8, - 0x32, 0x2a, 0xcc, 0x40, 0x60, 0x1e, 0x7c, 0xd3, 0x0c, 0x7c, 0x8f, 0xf3, 0xb3, 0x79, 0x54, 0x9e, - 0x85, 0xb7, 0x68, 0x67, 0xc9, 0x28, 0xa1, 0xcd, 0x41, 0xac, 0x5e, 0xb4, 0x4c, 0xc1, 0x29, 0xc3, - 0x8b, 0x96, 0xe5, 0x3f, 0x65, 0xd4, 0xa2, 0xe5, 0xc0, 0x70, 0xa7, 0x3e, 0x28, 0xa3, 0xe2, 0xd4, - 0xdd, 0xa9, 0x8d, 0xc9, 0xdf, 0xa9, 0x12, 0xc1, 0x3d, 0x30, 0x65, 0x51, 0x19, 0x9f, 0xba, 0x7b, - 0xa0, 0xb5, 0xf9, 0x7b, 0x40, 0x31, 0x10, 0xb8, 0x0c, 0xbe, 0x65, 0x06, 0x9e, 0x2e, 0x4e, 0xaa, - 0xb8, 0x4c, 0x4f, 0x58, 0xb8, 0x49, 0x7b, 0x2b, 0x48, 0x49, 0xdd, 0x1e, 0x06, 0xeb, 0x0c, 0x11, - 0x34, 0xa5, 0xed, 0x20, 0xa9, 0x50, 0x86, 0x28, 0x63, 0x18, 0x04, 0x91, 0x21, 0xba, 0x49, 0x5c, - 0xbd, 0x07, 0x25, 0x5f, 0x14, 0x55, 0x4f, 0xf5, 0x10, 0xe4, 0xaf, 0x5e, 0x17, 0x06, 0xcd, 0x97, - 0xc1, 0xb7, 0xcd, 0x26, 0x7d, 0x96, 0x57, 0x4a, 0x75, 0x8b, 0x6e, 0x27, 0x03, 0x23, 0xf2, 0x38, - 0x0f, 0x0e, 0xca, 0x71, 0xf0, 0x75, 0xa9, 0x2c, 0xf6, 0x98, 0x88, 0xd2, 0xac, 0x0a, 0x57, 0xdd, - 0x31, 0xa4, 0x5d, 0x69, 0xad, 0xf5, 0x72, 0x78, 0x0a, 0xed, 0x2d, 0x8a, 0x2c, 0x8d, 0xbb, 0x49, - 0x37, 0xf8, 0x2a, 0xb3, 0x7f, 0x0a, 0x99, 0x98, 0x5e, 0xd8, 0x55, 0x35, 0xda, 0xff, 0x71, 0x7c, - 0x51, 0xe0, 0x85, 0x5d, 0x97, 0x50, 0x23, 0xc4, 0xc2, 0x4e, 0xa0, 0xb8, 0x3e, 0x53, 0x26, 0x1e, - 0x45, 0x17, 0x7c, 0x41, 0x2c, 0x09, 0xca, 0xec, 0xaf, 0x8f, 0x89, 0x81, 0xc2, 0x22, 0xb8, 0xa2, - 0x14, 0x0e, 0x72, 0xc1, 0xca, 0x3c, 0xca, 0xf6, 0xb3, 0x68, 0x56, 0x85, 0xc4, 0xbc, 0xb1, 0x29, - 0xa5, 0xb7, 0x35, 0x90, 0x76, 0x34, 0xe3, 0x41, 0xb5, 0x1f, 0x2d, 0x79, 0x99, 0x0a, 0xba, 0x19, - 0x35, 0xd2, 0xdb, 0x8c, 0x16, 0xea, 0x54, 0x9b, 0x94, 0xf1, 0x69, 0xba, 0x64, 0x89, 0x47, 0x4d, - 0x22, 0x03, 0xd4, 0x0c, 0x14, 0xab, 0xd5, 0x67, 0x09, 0x3d, 0x10, 0x9d, 0x6a, 0x16, 0xe2, 0x57, - 0xc3, 0x28, 0x9e, 0x57, 0x8d, 0xbd, 0x4d, 0xe8, 0x56, 0x49, 0x7f, 0x3b, 0xa7, 0x5b, 0xeb, 0xe5, - 0xf0, 0xb2, 0x51, 0x1b, 0xed, 0x46, 0xdc, 0xa2, 0x62, 0xb8, 0x1b, 0x72, 0x3c, 0x14, 0x27, 0x95, - 0xd5, 0x60, 0xf1, 0x2b, 0x77, 0x06, 0xcc, 0x78, 0x28, 0x8e, 0xbb, 0x71, 0x52, 0x14, 0xd9, 0xc5, - 0x31, 0x9b, 0x17, 0x19, 0xd9, 0x8d, 0x16, 0xe2, 0xef, 0x46, 0x8c, 0xe2, 0xad, 0xf9, 0x98, 0xd7, - 0x1b, 0xbf, 0x73, 0x6b, 0x6e, 0x4c, 0xfe, 0xad, 0x59, 0x22, 0x78, 0x8b, 0x99, 0x24, 0xc9, 0xf3, - 0x54, 0x9c, 0xb6, 0xff, 0xe7, 0x20, 0x71, 0x6f, 0x31, 0x08, 0xf2, 0x6f, 0x31, 0x5d, 0x58, 0x5f, - 0xd0, 0xc9, 0x1c, 0x2f, 0x2a, 0xd9, 0xbd, 0x8b, 0x47, 0x69, 0x7e, 0x16, 0xba, 0x57, 0x70, 0x0d, - 0x10, 0x17, 0x74, 0x4e, 0x10, 0xd7, 0xad, 0x4e, 0x5c, 0xef, 0x95, 0x2c, 0x4a, 0xe2, 0x72, 0x31, - 0x3f, 0xa9, 0xdc, 0x75, 0x43, 0x90, 0xbf, 0x6e, 0x5d, 0x18, 0xe7, 0x84, 0x53, 0x26, 0x4c, 0x49, - 0x6a, 0x79, 0x70, 0x29, 0x6e, 0x0e, 0x62, 0x71, 0xc2, 0xfc, 0x2c, 0x4f, 0xb8, 0x3b, 0x61, 0xae, - 0x2d, 0xfe, 0x84, 0x19, 0x08, 0x1c, 0xf2, 0x88, 0x51, 0x21, 0x6b, 0x8b, 0x3f, 0x24, 0x10, 0xae, - 0x35, 0x08, 0xce, 0xdb, 0xe4, 0x1a, 0x84, 0x0e, 0xdc, 0x6b, 0xbd, 0x1c, 0x9e, 0x8f, 0x32, 0x73, - 0xde, 0x67, 0x22, 0x3e, 0x75, 0xcf, 0x47, 0x0b, 0xf1, 0xcf, 0x47, 0x8c, 0xe2, 0x2a, 0x1d, 0x73, - 0x95, 0xf9, 0xaf, 0xba, 0x67, 0x5c, 0x27, 0xeb, 0x5f, 0xeb, 0xe5, 0x70, 0xe6, 0x7c, 0x30, 0x6f, - 0xda, 0xcc, 0x39, 0xa5, 0x5b, 0x9b, 0x3f, 0x73, 0x56, 0x0c, 0x2e, 0x7d, 0x6b, 0xa8, 0x9b, 0xd3, - 0x5d, 0x7a, 0x6d, 0xf7, 0x97, 0xde, 0xe2, 0xdc, 0x07, 0xa4, 0x23, 0x96, 0x45, 0x22, 0xe5, 0xb9, - 0xef, 0x80, 0x24, 0x99, 0x21, 0x07, 0x24, 0x83, 0x05, 0xc1, 0xdf, 0x8d, 0x82, 0xab, 0x2e, 0xc5, - 0x27, 0x45, 0xa3, 0xbb, 0xd3, 0x1f, 0xab, 0x25, 0x89, 0xbb, 0x40, 0xbf, 0x07, 0x94, 0xe1, 0x57, - 0xc1, 0x3b, 0xd2, 0xa4, 0xaf, 0x0a, 0xa1, 0x00, 0xf6, 0x0e, 0xa3, 0xca, 0x8f, 0x39, 0x25, 0xbf, - 0x3d, 0x98, 0xd7, 0xe9, 0xa0, 0x5d, 0xae, 0x0a, 0xa5, 0x83, 0x2a, 0x06, 0x98, 0x89, 0x74, 0xd0, - 0x81, 0xe1, 0xc5, 0x5b, 0x22, 0x93, 0x24, 0x71, 0x2e, 0xde, 0x2a, 0x84, 0x79, 0xb7, 0xbb, 0xde, - 0x0f, 0xe2, 0xb1, 0x23, 0xcd, 0x90, 0xb9, 0xdc, 0xf2, 0x45, 0x40, 0xd9, 0xcb, 0xe6, 0x20, 0x56, - 0xdf, 0x48, 0x76, 0x2a, 0xb6, 0xcf, 0x22, 0xb1, 0x28, 0x3b, 0x37, 0x92, 0xdd, 0x72, 0x4b, 0x90, - 0xb8, 0x91, 0xf4, 0x3a, 0x80, 0xfe, 0x9f, 0x46, 0xc1, 0xbb, 0x36, 0xd7, 0x76, 0xb1, 0x2a, 0xc3, - 0x1d, 0x5f, 0x48, 0x9b, 0x55, 0xc5, 0xb8, 0x7b, 0x29, 0x1f, 0x28, 0xc9, 0x1f, 0x46, 0xc1, 0x77, - 0x6d, 0xb4, 0xb9, 0x73, 0x5f, 0x46, 0x69, 0x16, 0x9d, 0x64, 0x2c, 0xfc, 0xc8, 0x17, 0xd4, 0x42, - 0x55, 0x39, 0xee, 0x5c, 0xc6, 0x05, 0x1f, 0x3c, 0xda, 0xf9, 0x66, 0x9c, 0xa5, 0x6e, 0xd3, 0xb3, - 0xd2, 0x71, 0x9c, 0xda, 0x1a, 0x48, 0xeb, 0x77, 0x0c, 0xfd, 0xb3, 0xd9, 0x00, 0xce, 0x74, 0x12, - 0x7c, 0x8d, 0x9a, 0x78, 0xd3, 0x49, 0x27, 0x0e, 0xc2, 0x42, 0xa6, 0x2b, 0xa6, 0x70, 0x3d, 0xbb, - 0x6e, 0xf7, 0x06, 0x32, 0xa7, 0xd8, 0xd6, 0x40, 0x1a, 0x54, 0x7f, 0x1d, 0xbc, 0xd3, 0x55, 0x85, - 0xb7, 0x93, 0xed, 0xde, 0x50, 0xe8, 0xe9, 0x64, 0x67, 0xb8, 0x83, 0xbe, 0x4d, 0x79, 0x98, 0x56, - 0x82, 0x97, 0x17, 0xd3, 0x53, 0x7e, 0x2e, 0x5f, 0x83, 0xed, 0x65, 0x02, 0x80, 0xb1, 0x41, 0x10, - 0xb7, 0x29, 0x6e, 0xb2, 0x23, 0xa5, 0x5f, 0x8d, 0x2b, 0x42, 0xca, 0x20, 0x7a, 0xa4, 0x6c, 0x52, - 0x2f, 0x92, 0xb2, 0x56, 0xfa, 0x89, 0x7b, 0xcd, 0x5d, 0xd4, 0xee, 0x33, 0xf7, 0x7a, 0x3f, 0xa8, - 0xcf, 0x04, 0xfb, 0x69, 0xc6, 0x9e, 0xbc, 0x78, 0x91, 0xf1, 0x28, 0x41, 0x67, 0x82, 0xda, 0x32, - 0x06, 0x13, 0x71, 0x26, 0x40, 0x88, 0xde, 0x44, 0x6a, 0x43, 0x3d, 0x3a, 0x65, 0xe4, 0x9b, 0x5d, - 0x37, 0xc3, 0x4c, 0x6c, 0x22, 0x0e, 0x4c, 0x67, 0x98, 0xb5, 0xf1, 0x59, 0xd1, 0x04, 0xbf, 0xde, - 0xf5, 0x6a, 0x2d, 0x44, 0x86, 0x69, 0x13, 0x3a, 0x53, 0xaa, 0x7f, 0xdf, 0xe3, 0xe7, 0x79, 0x13, - 0xd4, 0x51, 0x51, 0x69, 0x23, 0x32, 0x25, 0xcc, 0x40, 0xe0, 0x4f, 0x82, 0xff, 0x6f, 0x02, 0x97, - 0xbc, 0x08, 0x57, 0x1c, 0x0e, 0xa5, 0xf1, 0x9c, 0x70, 0x8d, 0xb4, 0xeb, 0x23, 0xc9, 0xe3, 0x68, - 0x99, 0xce, 0xd4, 0xa2, 0xd2, 0xce, 0x11, 0x7c, 0x24, 0xd1, 0xcc, 0xd8, 0x80, 0x88, 0x23, 0x09, - 0x09, 0x83, 0xe6, 0xdf, 0x47, 0xc1, 0x75, 0xcd, 0x3c, 0x90, 0xf7, 0x48, 0x07, 0xf9, 0x0b, 0x5e, - 0x9f, 0xcf, 0xea, 0x33, 0x53, 0x15, 0x7e, 0x4c, 0x85, 0x74, 0xf3, 0xaa, 0x28, 0x3f, 0xb8, 0xb4, - 0x9f, 0x4e, 0x93, 0xe4, 0x19, 0xb7, 0x5d, 0x8b, 0xf7, 0x4b, 0x3e, 0x6f, 0x3d, 0x50, 0x9a, 0xa4, - 0x8e, 0xc2, 0x98, 0x23, 0xd2, 0x24, 0x1f, 0x6f, 0xec, 0xb5, 0x94, 0x7a, 0xb3, 0xc3, 0xdc, 0x19, - 0x16, 0xd1, 0xda, 0x67, 0xee, 0x5e, 0xca, 0x47, 0x3f, 0x87, 0xa9, 0x82, 0x64, 0x3c, 0xc7, 0x4f, - 0x6d, 0x3a, 0x4a, 0x6d, 0x24, 0x9e, 0xc3, 0x3a, 0x90, 0x5e, 0x85, 0xa4, 0xa9, 0x3d, 0x2a, 0x4d, - 0xb2, 0x0c, 0xad, 0x42, 0xca, 0x55, 0x01, 0xc4, 0x2a, 0xe4, 0x04, 0x41, 0xe7, 0x28, 0x78, 0xa3, - 0xee, 0xdc, 0xa7, 0x25, 0x5b, 0xa6, 0x0c, 0x3f, 0xda, 0x18, 0x16, 0x62, 0x3a, 0xdb, 0x84, 0x7e, - 0x3d, 0x7d, 0x96, 0x57, 0x45, 0x16, 0x55, 0xa7, 0xf0, 0x68, 0x60, 0xd7, 0x59, 0x1a, 0xf1, 0xb3, - 0xc1, 0xcd, 0x1e, 0x4a, 0x1f, 0x7f, 0xa4, 0x4d, 0xad, 0x18, 0xab, 0x6e, 0xd7, 0xce, 0xaa, 0xb1, - 0xd6, 0xcb, 0xe9, 0xd5, 0xf9, 0x5e, 0xc6, 0xe3, 0x33, 0x58, 0xe6, 0xec, 0x5a, 0x37, 0x16, 0xbc, - 0xce, 0xdd, 0xf0, 0x21, 0x7a, 0xa1, 0x6b, 0x0c, 0x47, 0xac, 0xc8, 0xa2, 0x18, 0x3f, 0x67, 0xb5, - 0x3e, 0x60, 0x23, 0x16, 0x3a, 0xcc, 0xa0, 0xe2, 0xc2, 0x33, 0x99, 0xab, 0xb8, 0xe8, 0x95, 0xec, - 0x86, 0x0f, 0xd1, 0x4b, 0x7d, 0x63, 0x98, 0x16, 0x59, 0x2a, 0xd0, 0xd8, 0x68, 0x3d, 0x1a, 0x0b, - 0x31, 0x36, 0x6c, 0x02, 0x85, 0x3c, 0x64, 0xe5, 0x8c, 0x39, 0x43, 0x36, 0x16, 0x6f, 0x48, 0x49, - 0x40, 0xc8, 0xc7, 0xc1, 0x57, 0xda, 0xba, 0xf3, 0xe2, 0x22, 0xbc, 0xe6, 0xaa, 0x16, 0x2f, 0x2e, - 0x54, 0xc0, 0xeb, 0x34, 0x80, 0x8a, 0xf8, 0x34, 0xaa, 0x84, 0xbb, 0x88, 0x8d, 0xc5, 0x5b, 0x44, - 0x49, 0xe8, 0x7d, 0xa8, 0x2d, 0xe2, 0x42, 0xa0, 0x7d, 0x08, 0x0a, 0x60, 0xdc, 0xed, 0x5f, 0x23, - 0xed, 0x7a, 0x7a, 0xb5, 0xbd, 0xc2, 0xc4, 0x7e, 0xca, 0xb2, 0xa4, 0x42, 0xd3, 0x0b, 0xda, 0x5d, - 0x5a, 0x89, 0xe9, 0xd5, 0xa5, 0xd0, 0x50, 0x82, 0x9b, 0x1e, 0x57, 0xed, 0xd0, 0x25, 0xcf, 0x0d, - 0x1f, 0xa2, 0xf3, 0x92, 0xc6, 0x60, 0xdc, 0x63, 0xbb, 0xca, 0xe3, 0xb8, 0xc6, 0x5e, 0xed, 0xc3, - 0x40, 0xe1, 0x2f, 0xa3, 0xe0, 0x3d, 0x25, 0x71, 0xc8, 0x97, 0xec, 0x98, 0xdf, 0x7f, 0x99, 0x56, - 0x22, 0xcd, 0x67, 0xb0, 0x35, 0xdd, 0x25, 0x22, 0xb9, 0x60, 0x25, 0xff, 0xbd, 0xcb, 0x39, 0xe9, - 0x1d, 0x12, 0x95, 0xe5, 0x31, 0x3b, 0x77, 0xee, 0x90, 0x38, 0xa2, 0xe2, 0x88, 0x1d, 0xd2, 0xc7, - 0xeb, 0xd3, 0xb0, 0x12, 0x87, 0x4f, 0xf2, 0x8e, 0xb9, 0x4c, 0x56, 0xa8, 0x68, 0x18, 0x24, 0xce, - 0x05, 0x5e, 0x07, 0x9d, 0xac, 0x2b, 0x7d, 0x3d, 0x48, 0xd7, 0x89, 0x38, 0xdd, 0x81, 0xba, 0x31, - 0x80, 0x74, 0x48, 0xe9, 0xc7, 0x18, 0x4a, 0xaa, 0xfb, 0x16, 0xb3, 0x31, 0x80, 0x34, 0x4e, 0xd6, - 0x66, 0xb5, 0xee, 0x45, 0xf1, 0xd9, 0xac, 0xe4, 0x8b, 0x3c, 0xd9, 0xe5, 0x19, 0x2f, 0xd1, 0xc9, - 0xda, 0x2a, 0x35, 0x42, 0x89, 0x93, 0x75, 0x8f, 0x8b, 0x4e, 0x0c, 0xcc, 0x52, 0x4c, 0xb2, 0x74, - 0x86, 0x8f, 0x27, 0x56, 0xa0, 0x06, 0x20, 0x12, 0x03, 0x27, 0xe8, 0x18, 0x44, 0xed, 0xf1, 0x45, - 0xa4, 0x71, 0x94, 0xb5, 0x7a, 0xdb, 0x74, 0x18, 0x0b, 0xec, 0x1d, 0x44, 0x0e, 0x07, 0x47, 0x3d, - 0x8f, 0x17, 0x65, 0x7e, 0x90, 0x0b, 0x4e, 0xd6, 0x53, 0x02, 0xbd, 0xf5, 0x34, 0x40, 0x9d, 0x4d, - 0x34, 0xe6, 0x63, 0xf6, 0xb2, 0x2e, 0x4d, 0xfd, 0x9f, 0xd0, 0xb1, 0xe4, 0xd4, 0xbf, 0x8f, 0xc1, - 0x4e, 0x64, 0x13, 0x2e, 0x0e, 0x55, 0x06, 0x44, 0xda, 0x01, 0xe3, 0xf1, 0xb6, 0x87, 0xc9, 0x7a, - 0x3f, 0xe8, 0xd6, 0x99, 0x8a, 0x8b, 0x8c, 0xf9, 0x74, 0x1a, 0x60, 0x88, 0x8e, 0x04, 0xf5, 0x6d, - 0xbd, 0x55, 0x9f, 0x53, 0x16, 0x9f, 0x75, 0x9e, 0x5c, 0xed, 0x82, 0xb6, 0x08, 0x71, 0x5b, 0x4f, - 0xa0, 0xee, 0x2e, 0x3a, 0x88, 0x79, 0xee, 0xeb, 0xa2, 0xda, 0x3e, 0xa4, 0x8b, 0x80, 0xd3, 0xa7, - 0x3b, 0x65, 0x85, 0x91, 0xd9, 0x76, 0xd3, 0x26, 0x11, 0xc1, 0x84, 0x88, 0xd3, 0x1d, 0x09, 0xeb, - 0x7b, 0x52, 0xac, 0x79, 0xd8, 0xfd, 0x08, 0xa9, 0x13, 0xe5, 0x90, 0xfe, 0x08, 0x89, 0x62, 0xe9, - 0x4a, 0xb6, 0x63, 0xa4, 0x27, 0x8a, 0x3d, 0x4e, 0x6e, 0x0f, 0x83, 0xf5, 0x1b, 0xaf, 0xa5, 0xb9, - 0x9b, 0xb1, 0xa8, 0x6c, 0x55, 0xb7, 0x3c, 0x81, 0x34, 0x46, 0x5c, 0xca, 0x79, 0x70, 0xb4, 0x84, - 0x59, 0xca, 0xbb, 0x3c, 0x17, 0x2c, 0x17, 0xae, 0x25, 0xcc, 0x0e, 0x06, 0xa0, 0x6f, 0x09, 0xa3, - 0x1c, 0xd0, 0xb8, 0xdd, 0x4f, 0x33, 0x36, 0x65, 0xe2, 0x71, 0x34, 0x67, 0xae, 0x71, 0xdb, 0x5c, - 0x35, 0x80, 0xdd, 0x37, 0x6e, 0x11, 0x87, 0xa6, 0xfc, 0xc1, 0x3c, 0x9a, 0x29, 0x15, 0x87, 0x77, - 0x63, 0xef, 0xc8, 0xac, 0xf7, 0x83, 0x48, 0xe7, 0xd3, 0x34, 0x61, 0xdc, 0xa3, 0xd3, 0xd8, 0x87, - 0xe8, 0x60, 0x10, 0x65, 0x4e, 0x75, 0x6d, 0xdb, 0xf3, 0xc8, 0x24, 0x4f, 0xe0, 0x14, 0x36, 0x26, - 0x1a, 0x05, 0x71, 0xbe, 0xcc, 0x89, 0xe0, 0xd1, 0xfc, 0x90, 0x57, 0x68, 0xbe, 0xf9, 0xa1, 0x6e, - 0xc8, 0x86, 0xcc, 0x0f, 0x17, 0x0c, 0x9a, 0xbf, 0x84, 0xf9, 0xb1, 0x17, 0x89, 0xa8, 0x3e, 0x47, - 0x7f, 0x9a, 0xb2, 0x73, 0x38, 0xc6, 0x39, 0xea, 0x2b, 0xa9, 0x71, 0x8d, 0xe1, 0x33, 0xdd, 0xf6, - 0x60, 0xde, 0xa3, 0x0d, 0xd9, 0x79, 0xaf, 0x36, 0x4a, 0xd3, 0xb7, 0x07, 0xf3, 0x1e, 0x6d, 0xf8, - 0x90, 0xb6, 0x57, 0x1b, 0x7d, 0x4d, 0xbb, 0x3d, 0x98, 0x07, 0xed, 0xdf, 0x8f, 0x82, 0xab, 0x1d, - 0xf1, 0x3a, 0x07, 0x8a, 0x45, 0xba, 0x64, 0xae, 0x54, 0xce, 0x8e, 0xa7, 0x50, 0x5f, 0x2a, 0x47, - 0xbb, 0x40, 0x29, 0xfe, 0x3c, 0x0a, 0xde, 0x75, 0x95, 0xe2, 0x29, 0xaf, 0xd2, 0xe6, 0xc9, 0xf1, - 0xee, 0x80, 0xa0, 0x12, 0xf6, 0x1d, 0x58, 0x7c, 0x4e, 0xfa, 0xc1, 0xc6, 0x42, 0xeb, 0x71, 0xca, - 0x17, 0x65, 0x8c, 0x1f, 0x6c, 0xec, 0x78, 0x8a, 0x22, 0x5e, 0x30, 0x68, 0x5a, 0xbf, 0x60, 0x58, - 0x8c, 0xf9, 0x74, 0xe2, 0xeb, 0x55, 0xe7, 0xeb, 0xc9, 0xce, 0x70, 0x07, 0x90, 0xff, 0xa3, 0xcc, - 0xe9, 0xb1, 0x3e, 0x4c, 0x82, 0x3b, 0x43, 0x22, 0xa2, 0x89, 0x70, 0xf7, 0x52, 0x3e, 0x50, 0x90, - 0x7f, 0x8c, 0x82, 0x1b, 0xce, 0x82, 0xd8, 0xaf, 0x77, 0x3f, 0x1c, 0x12, 0xdb, 0xfd, 0x8a, 0xf7, - 0xa3, 0xff, 0xc5, 0x15, 0x4a, 0xf7, 0xb9, 0x3c, 0x5a, 0x4b, 0x8f, 0xe6, 0x0b, 0xd4, 0x27, 0x65, - 0xc2, 0x4a, 0x98, 0xb1, 0xbe, 0x41, 0xa7, 0x61, 0x3c, 0x6f, 0xbf, 0x7f, 0x49, 0x2f, 0x28, 0xce, - 0x5f, 0x47, 0xc1, 0x8a, 0x05, 0xc3, 0x97, 0x42, 0x46, 0x79, 0x7c, 0x91, 0x0d, 0x1a, 0x17, 0xe8, - 0xe3, 0xcb, 0xba, 0xe1, 0x0c, 0xb5, 0x6e, 0x37, 0x58, 0xbc, 0x5d, 0x19, 0x6a, 0xd3, 0xac, 0x68, - 0xd1, 0x5e, 0xeb, 0xe5, 0x5c, 0x22, 0xf7, 0x5f, 0x16, 0x51, 0x9e, 0xd0, 0x22, 0xad, 0xbd, 0x5f, - 0x44, 0x71, 0x38, 0xb3, 0xaf, 0xad, 0x47, 0x5c, 0xee, 0x44, 0x1b, 0x94, 0xbf, 0x42, 0xbc, 0x99, - 0x7d, 0x07, 0x25, 0xd4, 0x60, 0xda, 0xf9, 0xd4, 0xd0, 0x6c, 0xbb, 0x35, 0x04, 0x45, 0x6b, 0x9c, - 0x52, 0x53, 0x17, 0x06, 0xb7, 0x7d, 0x51, 0x3a, 0x97, 0x06, 0x5b, 0x03, 0x69, 0x42, 0x76, 0xca, - 0xc4, 0x43, 0x16, 0x25, 0xac, 0xf4, 0xca, 0x2a, 0x6a, 0x90, 0xac, 0x49, 0xbb, 0x64, 0x77, 0x79, - 0xb6, 0x98, 0xe7, 0xd0, 0x99, 0xa4, 0xac, 0x49, 0xf5, 0xcb, 0x22, 0x1a, 0x9f, 0x69, 0xb4, 0x6c, - 0xf3, 0x4f, 0x6f, 0x6e, 0xf9, 0xc3, 0x58, 0xff, 0x06, 0x67, 0x73, 0x10, 0x4b, 0xd7, 0x13, 0x86, - 0x51, 0x4f, 0x3d, 0xd1, 0x48, 0xda, 0x1a, 0x48, 0xe3, 0xc3, 0x85, 0x21, 0xab, 0xc6, 0xd3, 0x76, - 0x4f, 0xac, 0xce, 0x90, 0xda, 0x19, 0xee, 0x80, 0x8f, 0x72, 0x30, 0xaa, 0xea, 0xa5, 0x7b, 0x3f, - 0xcd, 0xb2, 0x70, 0xd3, 0x33, 0x4c, 0x24, 0xe4, 0x3d, 0xca, 0x39, 0x60, 0x62, 0x24, 0xcb, 0xa3, - 0x4f, 0x1e, 0xf6, 0xc5, 0x69, 0xa8, 0x41, 0x23, 0xd9, 0xa4, 0xd1, 0x91, 0xc0, 0x68, 0x6a, 0x55, - 0xdb, 0xb1, 0xbf, 0xe1, 0x3a, 0x15, 0xde, 0x1e, 0xcc, 0xa3, 0xdb, 0xf6, 0x86, 0x9a, 0xf2, 0x52, - 0xb8, 0x6e, 0xdb, 0xdb, 0x10, 0x53, 0xf3, 0x52, 0xfc, 0x66, 0x0f, 0xd5, 0xb9, 0x66, 0xcb, 0xe1, - 0xf1, 0x46, 0x7f, 0x77, 0xeb, 0x1a, 0x46, 0xcd, 0x57, 0xb2, 0x18, 0xf4, 0x0d, 0x23, 0xca, 0xc1, - 0xf8, 0xea, 0x4e, 0x71, 0xf2, 0x26, 0xb0, 0x28, 0x58, 0x54, 0x46, 0x79, 0x8c, 0xff, 0x05, 0xae, - 0x0e, 0xd8, 0x21, 0x89, 0xaf, 0xee, 0xfc, 0x1e, 0xe8, 0x12, 0xd7, 0xfe, 0xf4, 0xd3, 0x71, 0x64, - 0x54, 0xdf, 0x58, 0xda, 0x5f, 0x7e, 0x6e, 0x0c, 0x20, 0xf1, 0x25, 0xae, 0x04, 0xd4, 0x51, 0xb0, - 0x15, 0xfd, 0xc8, 0x13, 0xca, 0x46, 0x7d, 0x99, 0x3f, 0xed, 0x82, 0xf6, 0x3d, 0x99, 0x78, 0x4d, - 0x99, 0xf8, 0x84, 0x5d, 0xb8, 0xf6, 0x3d, 0x95, 0x9a, 0xb5, 0x88, 0x6f, 0xdf, 0xeb, 0xa2, 0x28, - 0x71, 0x30, 0x93, 0xeb, 0x55, 0x8f, 0xbf, 0x99, 0x53, 0xaf, 0xf5, 0x72, 0x68, 0xdd, 0xdf, 0x4b, - 0x97, 0xd6, 0xc9, 0xd9, 0x51, 0xd0, 0xbd, 0x74, 0xe9, 0x3e, 0x38, 0x6f, 0x0e, 0x62, 0xf1, 0x05, - 0x71, 0x24, 0xd8, 0x4b, 0x79, 0x73, 0xeb, 0x28, 0x6e, 0x63, 0xef, 0x5c, 0xdd, 0xae, 0xf7, 0x83, - 0x48, 0x47, 0xce, 0xa1, 0x64, 0xc6, 0x9c, 0x3a, 0x63, 0x13, 0xf0, 0x5e, 0x44, 0x23, 0x50, 0x7f, - 0x4d, 0xf0, 0xb4, 0xe4, 0x31, 0xab, 0xaa, 0xdd, 0x7a, 0x7a, 0x64, 0xe8, 0x6b, 0x02, 0xb0, 0x8d, - 0x5b, 0x23, 0xf1, 0x35, 0x41, 0x07, 0x82, 0xd8, 0x0f, 0x83, 0xd7, 0x1f, 0xf1, 0xd9, 0x94, 0xe5, - 0x49, 0xf8, 0x9e, 0xfd, 0x7e, 0xcf, 0x67, 0xe3, 0xfa, 0x67, 0x15, 0x6f, 0x85, 0x32, 0xeb, 0xc7, - 0xd6, 0x3d, 0x76, 0xb2, 0x98, 0x4d, 0x2f, 0xf2, 0x18, 0x3d, 0xb6, 0x36, 0xbf, 0x8f, 0x6b, 0x03, - 0xf1, 0xd8, 0x6a, 0x01, 0xfa, 0xb5, 0xb1, 0xf9, 0xf9, 0xf8, 0xb4, 0x64, 0x9d, 0x77, 0xf6, 0xd6, - 0xa1, 0x35, 0x11, 0xaf, 0x8d, 0x08, 0x41, 0xa5, 0x3c, 0x2e, 0x19, 0x73, 0x96, 0xb2, 0x36, 0x78, - 0x4b, 0x09, 0x80, 0xde, 0x6c, 0x9b, 0x9f, 0xdb, 0x57, 0xcd, 0x47, 0x3c, 0x8e, 0xb2, 0x4a, 0xf0, - 0x12, 0xdf, 0x0b, 0xb5, 0xae, 0x18, 0x22, 0x36, 0x5b, 0x12, 0x46, 0x75, 0x78, 0x9a, 0xe6, 0x33, - 0x67, 0x1d, 0x6a, 0x83, 0xb7, 0x0e, 0x00, 0xe8, 0x09, 0x7a, 0xc8, 0x44, 0x99, 0xc6, 0xd5, 0x94, - 0x89, 0xa7, 0x51, 0x19, 0xcd, 0x99, 0x60, 0x25, 0xfe, 0xd7, 0x0d, 0x80, 0x8c, 0x2d, 0x86, 0x98, - 0xa0, 0x14, 0x0b, 0x82, 0x3f, 0x0e, 0xde, 0xae, 0x67, 0x2e, 0xcb, 0xe1, 0xaf, 0x67, 0xdc, 0x6f, - 0xfe, 0xb0, 0x4c, 0x78, 0x45, 0xc5, 0x98, 0x8a, 0x92, 0x45, 0x73, 0x19, 0xfb, 0x2d, 0xf5, 0x7b, - 0x03, 0xee, 0x8c, 0xee, 0xbd, 0xff, 0xcf, 0x2f, 0x57, 0x46, 0x5f, 0x7c, 0xb9, 0x32, 0xfa, 0xf7, - 0x97, 0x2b, 0xa3, 0xbf, 0xbd, 0x5a, 0x79, 0xed, 0x8b, 0x57, 0x2b, 0xaf, 0xfd, 0xeb, 0xd5, 0xca, - 0x6b, 0x9f, 0xbd, 0x0e, 0x7f, 0xe0, 0xe6, 0xe4, 0xff, 0x9a, 0x3f, 0x53, 0x73, 0xf7, 0xbf, 0x01, - 0x00, 0x00, 0xff, 0xff, 0x48, 0x5e, 0x5e, 0xf4, 0x04, 0x47, 0x00, 0x00, + 0x63, 0x10, 0x08, 0x04, 0x02, 0x81, 0x40, 0x20, 0x71, 0xc9, 0x3f, 0xc4, 0x65, 0x2f, 0xb9, 0x44, + 0xcd, 0x1d, 0x7f, 0x05, 0xda, 0xdd, 0x67, 0xde, 0x9e, 0x9d, 0x67, 0x76, 0xcd, 0x55, 0xe1, 0x3c, + 0x9f, 0xe7, 0xf9, 0xce, 0xfb, 0x3c, 0x33, 0xb3, 0x71, 0x70, 0xad, 0x38, 0xd9, 0x2e, 0x4a, 0x2e, + 0x78, 0xb5, 0x5d, 0xb1, 0x72, 0x99, 0xc6, 0x4c, 0xfe, 0x77, 0xdc, 0xfc, 0x1c, 0xbe, 0x1e, 0xe5, + 0x17, 0xe2, 0xa2, 0x60, 0x57, 0xdf, 0xd1, 0x64, 0xcc, 0xe7, 0xf3, 0x28, 0x4f, 0xaa, 0x16, 0xb9, + 0x7a, 0x45, 0x5b, 0xd8, 0x92, 0xe5, 0x02, 0x7e, 0xbf, 0xf3, 0x9f, 0xbf, 0x8c, 0x82, 0xb7, 0x76, + 0xb3, 0x94, 0xe5, 0x62, 0x17, 0x3c, 0xc2, 0xcf, 0x82, 0x37, 0x27, 0x45, 0xf1, 0x80, 0x89, 0x4f, + 0x59, 0x59, 0xa5, 0x3c, 0x0f, 0x3f, 0x18, 0x83, 0xc0, 0xf8, 0xa8, 0x88, 0xc7, 0x93, 0xa2, 0x18, + 0x6b, 0xe3, 0xf8, 0x88, 0xfd, 0x6c, 0xc1, 0x2a, 0x71, 0xf5, 0x43, 0x3f, 0x54, 0x15, 0x3c, 0xaf, + 0x58, 0xf8, 0x22, 0xf8, 0xda, 0xa4, 0x28, 0xa6, 0x4c, 0xec, 0xb1, 0xba, 0x02, 0x53, 0x11, 0x09, + 0x16, 0xae, 0x75, 0x5c, 0x6d, 0x40, 0x69, 0xac, 0xf7, 0x83, 0xa0, 0x73, 0x1c, 0xbc, 0x51, 0xeb, + 0x9c, 0x2e, 0x44, 0xc2, 0xcf, 0xf3, 0xf0, 0xfd, 0xae, 0x23, 0x98, 0x54, 0xec, 0x1b, 0x3e, 0x04, + 0xa2, 0x3e, 0x0f, 0xbe, 0xfc, 0x3c, 0xca, 0x32, 0x26, 0x76, 0x4b, 0x56, 0x17, 0xdc, 0xf6, 0x69, + 0x4d, 0xe3, 0xd6, 0xa6, 0xe2, 0x7e, 0xe0, 0x65, 0x20, 0xf0, 0x67, 0xc1, 0x9b, 0xad, 0xe5, 0x88, + 0xc5, 0x7c, 0xc9, 0xca, 0xd0, 0xe9, 0x05, 0x46, 0xa2, 0xc9, 0x3b, 0x10, 0x8e, 0xbd, 0xcb, 0xf3, + 0x25, 0x2b, 0x85, 0x3b, 0x36, 0x18, 0xfd, 0xb1, 0x35, 0x04, 0xb1, 0xb3, 0xe0, 0x6d, 0xb3, 0x41, + 0xa6, 0xac, 0x6a, 0x06, 0xcc, 0x06, 0x5d, 0x67, 0x40, 0x94, 0xce, 0xad, 0x21, 0x28, 0xa8, 0xa5, + 0x41, 0x08, 0x6a, 0x19, 0xaf, 0x94, 0xd8, 0xba, 0x33, 0x82, 0x41, 0x28, 0xad, 0x8d, 0x01, 0x24, + 0x48, 0xfd, 0x24, 0xf8, 0xca, 0x73, 0x5e, 0x9e, 0x55, 0x45, 0x14, 0x33, 0xe8, 0xec, 0x9b, 0xb6, + 0xb7, 0xb4, 0xe2, 0xfe, 0x5e, 0xed, 0xc3, 0x40, 0xe1, 0x2c, 0x08, 0x95, 0xf1, 0xc9, 0xc9, 0x4f, + 0x59, 0x2c, 0x26, 0x49, 0x82, 0x5b, 0x4e, 0x79, 0xb7, 0xc4, 0x78, 0x92, 0x24, 0x54, 0xcb, 0xb9, + 0x51, 0x10, 0x3b, 0x0f, 0xae, 0x20, 0xb1, 0x47, 0x69, 0xd5, 0x08, 0x6e, 0xf9, 0xa3, 0x00, 0xa6, + 0x44, 0xc7, 0x43, 0x71, 0x10, 0xfe, 0xf5, 0x28, 0xf8, 0x96, 0x43, 0xf9, 0x88, 0xcd, 0xf9, 0x92, + 0x85, 0x3b, 0xfd, 0xd1, 0x5a, 0x52, 0xe9, 0x7f, 0x74, 0x09, 0x0f, 0x47, 0x57, 0x4e, 0x59, 0xc6, + 0x62, 0x41, 0x76, 0x65, 0x6b, 0xee, 0xed, 0x4a, 0x85, 0x19, 0xb3, 0x40, 0x1a, 0x1f, 0x30, 0xb1, + 0xbb, 0x28, 0x4b, 0x96, 0x0b, 0xb2, 0x2f, 0x35, 0xd2, 0xdb, 0x97, 0x16, 0xea, 0xa8, 0xcf, 0x03, + 0x26, 0x26, 0x59, 0x46, 0xd6, 0xa7, 0x35, 0xf7, 0xd6, 0x47, 0x61, 0xa0, 0xf0, 0x2b, 0xa3, 0xcf, + 0xa6, 0x4c, 0x1c, 0x54, 0x0f, 0xd3, 0xd9, 0x69, 0x96, 0xce, 0x4e, 0x05, 0x4b, 0xc2, 0x6d, 0xb2, + 0x51, 0x6c, 0x50, 0xa9, 0xee, 0x0c, 0x77, 0x70, 0xd4, 0xf0, 0xfe, 0xcb, 0x82, 0x97, 0x74, 0x8f, + 0xb5, 0xe6, 0xde, 0x1a, 0x2a, 0x0c, 0x14, 0x7e, 0x1c, 0xbc, 0x35, 0x89, 0x63, 0xbe, 0xc8, 0xd5, + 0x82, 0x8b, 0xb6, 0xaf, 0xd6, 0xd8, 0x59, 0x71, 0x6f, 0xf6, 0x50, 0x7a, 0xc9, 0x05, 0x1b, 0xac, + 0x1d, 0x1f, 0x38, 0xfd, 0xd0, 0xca, 0xf1, 0xa1, 0x1f, 0xea, 0xc4, 0xde, 0x63, 0x19, 0x23, 0x63, + 0xb7, 0xc6, 0x9e, 0xd8, 0x0a, 0xea, 0xc4, 0x86, 0x89, 0xe2, 0x8e, 0x8d, 0xa6, 0xc9, 0x87, 0x7e, + 0xc8, 0xd8, 0x91, 0x21, 0xb6, 0xe0, 0x05, 0xde, 0x91, 0xa5, 0x93, 0xe0, 0x05, 0xb5, 0x23, 0xdb, + 0x48, 0x27, 0xea, 0x61, 0xbd, 0xa0, 0xb8, 0xa3, 0x1e, 0x9a, 0x2b, 0xc8, 0x0d, 0x1f, 0xa2, 0x27, + 0xb4, 0xec, 0x3f, 0x9e, 0xbf, 0x48, 0x67, 0xcf, 0x8a, 0xa4, 0xee, 0xc5, 0x0d, 0x77, 0x07, 0x19, + 0x08, 0x31, 0xa1, 0x09, 0x14, 0xd4, 0x7e, 0x14, 0x04, 0xed, 0xf2, 0xf5, 0xa4, 0x60, 0x79, 0x78, + 0xdd, 0xf2, 0x84, 0x75, 0xad, 0xb6, 0xa8, 0xd8, 0xef, 0x7b, 0x08, 0xdd, 0x2c, 0xed, 0xef, 0xcd, + 0xee, 0x16, 0x3a, 0x3d, 0x1a, 0x13, 0xd1, 0x2c, 0x08, 0xc1, 0x05, 0x9d, 0x9e, 0xf2, 0x73, 0x77, + 0x41, 0x6b, 0x8b, 0xbf, 0xa0, 0x40, 0xe8, 0x8c, 0x0a, 0x0a, 0xea, 0xca, 0xa8, 0x64, 0x31, 0x7c, + 0x19, 0x15, 0x66, 0x20, 0x30, 0x0f, 0xbe, 0x6e, 0x06, 0xbe, 0xc7, 0xf9, 0xd9, 0x3c, 0x2a, 0xcf, + 0xc2, 0x5b, 0xb4, 0xb3, 0x64, 0x94, 0xd0, 0xe6, 0x20, 0x56, 0x2f, 0x5a, 0xa6, 0xe0, 0x94, 0xe1, + 0x45, 0xcb, 0xf2, 0x9f, 0x32, 0x6a, 0xd1, 0x72, 0x60, 0xb8, 0x53, 0x1f, 0x94, 0x51, 0x71, 0xea, + 0xee, 0xd4, 0xc6, 0xe4, 0xef, 0x54, 0x89, 0xe0, 0x1e, 0x98, 0xb2, 0xa8, 0x8c, 0x4f, 0xdd, 0x3d, + 0xd0, 0xda, 0xfc, 0x3d, 0xa0, 0x18, 0x08, 0x5c, 0x06, 0xdf, 0x30, 0x03, 0x4f, 0x17, 0x27, 0x55, + 0x5c, 0xa6, 0x27, 0x2c, 0xdc, 0xa4, 0xbd, 0x15, 0xa4, 0xa4, 0x6e, 0x0f, 0x83, 0x75, 0x86, 0x08, + 0x9a, 0xd2, 0x76, 0x90, 0x54, 0x28, 0x43, 0x94, 0x31, 0x0c, 0x82, 0xc8, 0x10, 0xdd, 0x24, 0xae, + 0xde, 0x83, 0x92, 0x2f, 0x8a, 0xaa, 0xa7, 0x7a, 0x08, 0xf2, 0x57, 0xaf, 0x0b, 0x83, 0xe6, 0xcb, + 0xe0, 0x9b, 0x66, 0x93, 0x3e, 0xcb, 0x2b, 0xa5, 0xba, 0x45, 0xb7, 0x93, 0x81, 0x11, 0x79, 0x9c, + 0x07, 0x07, 0xe5, 0x38, 0xf8, 0xaa, 0x54, 0x16, 0x7b, 0x4c, 0x44, 0x69, 0x56, 0x85, 0xab, 0xee, + 0x18, 0xd2, 0xae, 0xb4, 0xd6, 0x7a, 0x39, 0x3c, 0x85, 0xf6, 0x16, 0x45, 0x96, 0xc6, 0xdd, 0xa4, + 0x1b, 0x7c, 0x95, 0xd9, 0x3f, 0x85, 0x4c, 0x4c, 0x2f, 0xec, 0xaa, 0x1a, 0xed, 0xff, 0x38, 0xbe, + 0x28, 0xf0, 0xc2, 0xae, 0x4b, 0xa8, 0x11, 0x62, 0x61, 0x27, 0x50, 0x5c, 0x9f, 0x29, 0x13, 0x8f, + 0xa2, 0x0b, 0xbe, 0x20, 0x96, 0x04, 0x65, 0xf6, 0xd7, 0xc7, 0xc4, 0x40, 0x61, 0x11, 0x5c, 0x51, + 0x0a, 0x07, 0xb9, 0x60, 0x65, 0x1e, 0x65, 0xfb, 0x59, 0x34, 0xab, 0x42, 0x62, 0xde, 0xd8, 0x94, + 0xd2, 0xdb, 0x1a, 0x48, 0x3b, 0x9a, 0xf1, 0xa0, 0xda, 0x8f, 0x96, 0xbc, 0x4c, 0x05, 0xdd, 0x8c, + 0x1a, 0xe9, 0x6d, 0x46, 0x0b, 0x75, 0xaa, 0x4d, 0xca, 0xf8, 0x34, 0x5d, 0xb2, 0xc4, 0xa3, 0x26, + 0x91, 0x01, 0x6a, 0x06, 0x8a, 0xd5, 0xea, 0xb3, 0x84, 0x1e, 0x88, 0x4e, 0x35, 0x0b, 0xf1, 0xab, + 0x61, 0x14, 0xcf, 0xab, 0xc6, 0xde, 0x26, 0x74, 0xab, 0xa4, 0xbf, 0x9d, 0xd3, 0xad, 0xf5, 0x72, + 0x78, 0xd9, 0xa8, 0x8d, 0x76, 0x23, 0x6e, 0x51, 0x31, 0xdc, 0x0d, 0x39, 0x1e, 0x8a, 0x93, 0xca, + 0x6a, 0xb0, 0xf8, 0x95, 0x3b, 0x03, 0x66, 0x3c, 0x14, 0xc7, 0xdd, 0x38, 0x29, 0x8a, 0xec, 0xe2, + 0x98, 0xcd, 0x8b, 0x8c, 0xec, 0x46, 0x0b, 0xf1, 0x77, 0x23, 0x46, 0xf1, 0xd6, 0x7c, 0xcc, 0xeb, + 0x8d, 0xdf, 0xb9, 0x35, 0x37, 0x26, 0xff, 0xd6, 0x2c, 0x11, 0xbc, 0xc5, 0x4c, 0x92, 0xe4, 0x79, + 0x2a, 0x4e, 0xdb, 0xff, 0x73, 0x90, 0xb8, 0xb7, 0x18, 0x04, 0xf9, 0xb7, 0x98, 0x2e, 0xac, 0x2f, + 0xe8, 0x64, 0x8e, 0x17, 0x95, 0xec, 0xde, 0xc5, 0xa3, 0x34, 0x3f, 0x0b, 0xdd, 0x2b, 0xb8, 0x06, + 0x88, 0x0b, 0x3a, 0x27, 0x88, 0xeb, 0x56, 0x27, 0xae, 0xf7, 0x4a, 0x16, 0x25, 0x71, 0xb9, 0x98, + 0x9f, 0x54, 0xee, 0xba, 0x21, 0xc8, 0x5f, 0xb7, 0x2e, 0x8c, 0x73, 0xc2, 0x29, 0x13, 0xa6, 0x24, + 0xb5, 0x3c, 0xb8, 0x14, 0x37, 0x07, 0xb1, 0x38, 0x61, 0x7e, 0x96, 0x27, 0xdc, 0x9d, 0x30, 0xd7, + 0x16, 0x7f, 0xc2, 0x0c, 0x04, 0x0e, 0x79, 0xc4, 0xa8, 0x90, 0xb5, 0xc5, 0x1f, 0x12, 0x08, 0xdc, + 0x2c, 0x07, 0xf3, 0xfa, 0x94, 0x7c, 0x18, 0x95, 0x67, 0xcd, 0xa5, 0xa9, 0xb3, 0x59, 0x6c, 0xc6, + 0xdf, 0x2c, 0x1d, 0xd6, 0xb5, 0xe8, 0xc1, 0x01, 0x9f, 0x5c, 0xf4, 0xd0, 0x09, 0x7f, 0xad, 0x97, + 0xc3, 0x0b, 0x80, 0x4c, 0xd5, 0xf7, 0x99, 0x88, 0x4f, 0xdd, 0x0b, 0x80, 0x85, 0xf8, 0x17, 0x00, + 0x8c, 0xe2, 0x2a, 0x1d, 0x73, 0x75, 0xd4, 0x58, 0x75, 0x4f, 0xf1, 0xce, 0x31, 0x63, 0xad, 0x97, + 0xc3, 0xa9, 0x7a, 0xdb, 0xb0, 0xee, 0x54, 0xbd, 0xb5, 0xf9, 0x53, 0x75, 0xc5, 0xe0, 0xd2, 0xb7, + 0x86, 0xba, 0x39, 0xdd, 0xa5, 0xd7, 0x76, 0x7f, 0xe9, 0x2d, 0xce, 0x7d, 0x22, 0x3b, 0x62, 0x59, + 0x24, 0x52, 0x9e, 0xfb, 0x4e, 0x64, 0x92, 0x19, 0x72, 0x22, 0x33, 0x58, 0x10, 0xfc, 0xcd, 0x28, + 0xb8, 0xea, 0x52, 0x7c, 0x52, 0x34, 0xba, 0x3b, 0xfd, 0xb1, 0x5a, 0x92, 0xb8, 0x7c, 0xf4, 0x7b, + 0x40, 0x19, 0x7e, 0x11, 0xbc, 0x23, 0x4d, 0xfa, 0x6e, 0x12, 0x0a, 0x60, 0x6f, 0x69, 0xaa, 0xfc, + 0x98, 0x53, 0xf2, 0xdb, 0x83, 0x79, 0x9d, 0x7f, 0xda, 0xe5, 0xaa, 0x50, 0xfe, 0xa9, 0x62, 0x80, + 0x99, 0xc8, 0x3f, 0x1d, 0x18, 0xde, 0x2d, 0x24, 0x32, 0x49, 0x12, 0xe7, 0x6e, 0xa1, 0x42, 0x98, + 0x97, 0xc9, 0xeb, 0xfd, 0x20, 0x1e, 0x3b, 0xd2, 0x0c, 0xa9, 0xd2, 0x2d, 0x5f, 0x04, 0x94, 0x2e, + 0x6d, 0x0e, 0x62, 0xf5, 0x15, 0x68, 0xa7, 0x62, 0xfb, 0x2c, 0x12, 0x8b, 0xb2, 0x73, 0x05, 0xda, + 0x2d, 0xb7, 0x04, 0x89, 0x2b, 0x50, 0xaf, 0x03, 0xe8, 0xff, 0x61, 0x14, 0xbc, 0x6b, 0x73, 0x6d, + 0x17, 0xab, 0x32, 0xdc, 0xf1, 0x85, 0xb4, 0x59, 0x55, 0x8c, 0xbb, 0x97, 0xf2, 0x81, 0x92, 0xfc, + 0x6e, 0x14, 0x7c, 0xdb, 0x46, 0x9b, 0x4b, 0xfe, 0x65, 0x94, 0x66, 0xd1, 0x49, 0xc6, 0xc2, 0x8f, + 0x7c, 0x41, 0x2d, 0x54, 0x95, 0xe3, 0xce, 0x65, 0x5c, 0xf0, 0x49, 0xa7, 0x9d, 0x6f, 0xc6, 0xe1, + 0xed, 0x36, 0x3d, 0x2b, 0x1d, 0xe7, 0xb7, 0xad, 0x81, 0xb4, 0x7e, 0x38, 0xd1, 0x3f, 0x9b, 0x0d, + 0xe0, 0xcc, 0x5f, 0xc1, 0xd7, 0xa8, 0x89, 0x37, 0x7f, 0x75, 0xe2, 0x20, 0x2c, 0x64, 0x7e, 0x64, + 0x0a, 0xd7, 0xb3, 0xeb, 0x76, 0x6f, 0x20, 0x73, 0x8a, 0x6d, 0x0d, 0xa4, 0x41, 0xf5, 0x97, 0xc1, + 0x3b, 0x5d, 0x55, 0x78, 0xac, 0xd9, 0xee, 0x0d, 0x85, 0xde, 0x6a, 0x76, 0x86, 0x3b, 0xe8, 0xeb, + 0x9b, 0x87, 0x69, 0x25, 0x78, 0x79, 0x31, 0x3d, 0xe5, 0xe7, 0xf2, 0xf9, 0xd9, 0x5e, 0x26, 0x00, + 0x18, 0x1b, 0x04, 0x71, 0x7d, 0xe3, 0x26, 0x3b, 0x52, 0xfa, 0x99, 0xba, 0x22, 0xa4, 0x0c, 0xa2, + 0x47, 0xca, 0x26, 0xf5, 0x22, 0x29, 0x6b, 0xa5, 0xdf, 0xd4, 0xd7, 0xdc, 0x45, 0xed, 0xbe, 0xab, + 0xaf, 0xf7, 0x83, 0xfa, 0x10, 0xb2, 0x9f, 0x66, 0xec, 0xc9, 0x8b, 0x17, 0x19, 0x8f, 0x12, 0x74, + 0x08, 0xa9, 0x2d, 0x63, 0x30, 0x11, 0x87, 0x10, 0x84, 0xe8, 0x4d, 0xa4, 0x36, 0xd4, 0xa3, 0x53, + 0x46, 0xbe, 0xd9, 0x75, 0x33, 0xcc, 0xc4, 0x26, 0xe2, 0xc0, 0x74, 0x4a, 0x5b, 0x1b, 0x9f, 0x15, + 0x4d, 0xf0, 0xeb, 0x5d, 0xaf, 0xd6, 0x42, 0xa4, 0xb4, 0x36, 0xa1, 0x33, 0xa5, 0xfa, 0xf7, 0x3d, + 0x7e, 0x9e, 0x37, 0x41, 0x1d, 0x15, 0x95, 0x36, 0x22, 0x53, 0xc2, 0x0c, 0x04, 0xfe, 0x24, 0xf8, + 0xff, 0x26, 0x70, 0xc9, 0x8b, 0x70, 0xc5, 0xe1, 0x50, 0x1a, 0xef, 0x17, 0xd7, 0x48, 0xbb, 0x3e, + 0x03, 0x3d, 0x8e, 0x96, 0xe9, 0x4c, 0x2d, 0x2a, 0xed, 0x1c, 0xc1, 0x67, 0x20, 0xcd, 0x8c, 0x0d, + 0x88, 0x38, 0x03, 0x91, 0x30, 0x68, 0xfe, 0x7d, 0x14, 0x5c, 0xd7, 0xcc, 0x03, 0x79, 0x71, 0x75, + 0x90, 0xbf, 0xe0, 0xf5, 0x81, 0xb0, 0x3e, 0xa4, 0x55, 0xe1, 0xc7, 0x54, 0x48, 0x37, 0xaf, 0x8a, + 0xf2, 0xbd, 0x4b, 0xfb, 0xe9, 0x34, 0x49, 0x1e, 0xaa, 0xdb, 0xb5, 0x78, 0xbf, 0xe4, 0xf3, 0xd6, + 0x03, 0xa5, 0x49, 0xea, 0xec, 0x8d, 0x39, 0x22, 0x4d, 0xf2, 0xf1, 0xc6, 0x5e, 0x4b, 0xa9, 0x37, + 0x3b, 0xcc, 0x9d, 0x61, 0x11, 0xad, 0x7d, 0xe6, 0xee, 0xa5, 0x7c, 0xf4, 0xfb, 0x9b, 0x2a, 0x48, + 0xc6, 0x73, 0xfc, 0xb6, 0xa7, 0xa3, 0xd4, 0x46, 0xe2, 0xfd, 0xad, 0x03, 0xe9, 0x55, 0x48, 0x9a, + 0xda, 0xa3, 0xd2, 0x24, 0xcb, 0xd0, 0x2a, 0xa4, 0x5c, 0x15, 0x40, 0xac, 0x42, 0x4e, 0x10, 0x74, + 0x8e, 0x82, 0x37, 0xea, 0xce, 0x7d, 0x5a, 0xb2, 0x65, 0xca, 0xf0, 0x2b, 0x91, 0x61, 0x21, 0xa6, + 0xb3, 0x4d, 0xe8, 0xe7, 0xda, 0x67, 0x79, 0x55, 0x64, 0x51, 0x75, 0x0a, 0xaf, 0x14, 0x76, 0x9d, + 0xa5, 0x11, 0xbf, 0x53, 0xdc, 0xec, 0xa1, 0xf4, 0xf1, 0x47, 0xda, 0xd4, 0x8a, 0xb1, 0xea, 0x76, + 0xed, 0xac, 0x1a, 0x6b, 0xbd, 0x9c, 0x5e, 0x9d, 0xef, 0x65, 0x3c, 0x3e, 0x83, 0x65, 0xce, 0xae, + 0x75, 0x63, 0xc1, 0xeb, 0xdc, 0x0d, 0x1f, 0xa2, 0x17, 0xba, 0xc6, 0x70, 0xc4, 0x8a, 0x2c, 0x8a, + 0xf1, 0xfb, 0x59, 0xeb, 0x03, 0x36, 0x62, 0xa1, 0xc3, 0x0c, 0x2a, 0x2e, 0xbc, 0xcb, 0xb9, 0x8a, + 0x8b, 0x9e, 0xe5, 0x6e, 0xf8, 0x10, 0xbd, 0xd4, 0x37, 0x86, 0x69, 0x91, 0xa5, 0x02, 0x8d, 0x8d, + 0xd6, 0xa3, 0xb1, 0x10, 0x63, 0xc3, 0x26, 0x50, 0xc8, 0x43, 0x56, 0xce, 0x98, 0x33, 0x64, 0x63, + 0xf1, 0x86, 0x94, 0x04, 0x84, 0x7c, 0x1c, 0x7c, 0xa9, 0xad, 0x3b, 0x2f, 0x2e, 0xc2, 0x6b, 0xae, + 0x6a, 0xf1, 0xe2, 0x42, 0x05, 0xbc, 0x4e, 0x03, 0xa8, 0x88, 0x4f, 0xa3, 0x4a, 0xb8, 0x8b, 0xd8, + 0x58, 0xbc, 0x45, 0x94, 0x84, 0xde, 0x87, 0xda, 0x22, 0x2e, 0x04, 0xda, 0x87, 0xa0, 0x00, 0xc6, + 0x63, 0xc2, 0x35, 0xd2, 0xae, 0xa7, 0x57, 0xdb, 0x2b, 0x4c, 0xec, 0xa7, 0x2c, 0x4b, 0x2a, 0x34, + 0xbd, 0xa0, 0xdd, 0xa5, 0x95, 0x98, 0x5e, 0x5d, 0x0a, 0x0d, 0x25, 0xb8, 0xe9, 0x71, 0xd5, 0x0e, + 0x5d, 0xf2, 0xdc, 0xf0, 0x21, 0x3a, 0x2f, 0x69, 0x0c, 0xc6, 0xc5, 0xb9, 0xab, 0x3c, 0x8e, 0x7b, + 0xf3, 0xd5, 0x3e, 0x0c, 0x14, 0xfe, 0x34, 0x0a, 0xde, 0x53, 0x12, 0x87, 0x7c, 0xc9, 0x8e, 0xf9, + 0xfd, 0x97, 0x69, 0x25, 0xd2, 0x7c, 0x06, 0x5b, 0xd3, 0x5d, 0x22, 0x92, 0x0b, 0x56, 0xf2, 0xdf, + 0xb9, 0x9c, 0x93, 0xde, 0x21, 0x51, 0x59, 0x1e, 0xb3, 0x73, 0xe7, 0x0e, 0x89, 0x23, 0x2a, 0x8e, + 0xd8, 0x21, 0x7d, 0xbc, 0x3e, 0x0d, 0x2b, 0x71, 0xf8, 0x06, 0xf0, 0x98, 0xcb, 0x64, 0x85, 0x8a, + 0x86, 0x41, 0xe2, 0x5c, 0xe0, 0x75, 0xd0, 0xc9, 0xba, 0xd2, 0xd7, 0x83, 0x74, 0x9d, 0x88, 0xd3, + 0x1d, 0xa8, 0x1b, 0x03, 0x48, 0x87, 0x94, 0x7e, 0xfd, 0xa1, 0xa4, 0xba, 0x8f, 0x3f, 0x1b, 0x03, + 0x48, 0xe3, 0x64, 0x6d, 0x56, 0xeb, 0x5e, 0x14, 0x9f, 0xcd, 0x4a, 0xbe, 0xc8, 0x93, 0x5d, 0x9e, + 0xf1, 0x12, 0x9d, 0xac, 0xad, 0x52, 0x23, 0x94, 0x38, 0x59, 0xf7, 0xb8, 0xe8, 0xc4, 0xc0, 0x2c, + 0xc5, 0x24, 0x4b, 0x67, 0xf8, 0x78, 0x62, 0x05, 0x6a, 0x00, 0x22, 0x31, 0x70, 0x82, 0x8e, 0x41, + 0xd4, 0x1e, 0x5f, 0x44, 0x1a, 0x47, 0x59, 0xab, 0xb7, 0x4d, 0x87, 0xb1, 0xc0, 0xde, 0x41, 0xe4, + 0x70, 0x70, 0xd4, 0xf3, 0x78, 0x51, 0xe6, 0x07, 0xb9, 0xe0, 0x64, 0x3d, 0x25, 0xd0, 0x5b, 0x4f, + 0x03, 0xd4, 0xd9, 0x44, 0x63, 0x3e, 0x66, 0x2f, 0xeb, 0xd2, 0xd4, 0xff, 0x09, 0x1d, 0x4b, 0x4e, + 0xfd, 0xfb, 0x18, 0xec, 0x44, 0x36, 0xe1, 0xe2, 0x50, 0x65, 0x40, 0xa4, 0x1d, 0x30, 0x1e, 0x6f, + 0x7b, 0x98, 0xac, 0xf7, 0x83, 0x6e, 0x9d, 0xa9, 0xb8, 0xc8, 0x98, 0x4f, 0xa7, 0x01, 0x86, 0xe8, + 0x48, 0x50, 0xdf, 0xd6, 0x5b, 0xf5, 0x39, 0x65, 0xf1, 0x59, 0xe7, 0x8d, 0xd7, 0x2e, 0x68, 0x8b, + 0x10, 0xb7, 0xf5, 0x04, 0xea, 0xee, 0xa2, 0x83, 0x98, 0xe7, 0xbe, 0x2e, 0xaa, 0xed, 0x43, 0xba, + 0x08, 0x38, 0x7d, 0xba, 0x53, 0x56, 0x18, 0x99, 0x6d, 0x37, 0x6d, 0x12, 0x11, 0x4c, 0x88, 0x38, + 0xdd, 0x91, 0xb0, 0xbe, 0x27, 0xc5, 0x9a, 0x87, 0xdd, 0xaf, 0x9e, 0x3a, 0x51, 0x0e, 0xe9, 0xaf, + 0x9e, 0x28, 0x96, 0xae, 0x64, 0x3b, 0x46, 0x7a, 0xa2, 0xd8, 0xe3, 0xe4, 0xf6, 0x30, 0x58, 0x3f, + 0x2a, 0x5b, 0x9a, 0xbb, 0x19, 0x8b, 0xca, 0x56, 0x75, 0xcb, 0x13, 0x48, 0x63, 0xc4, 0xa5, 0x9c, + 0x07, 0x47, 0x4b, 0x98, 0xa5, 0xbc, 0xcb, 0x73, 0xc1, 0x72, 0xe1, 0x5a, 0xc2, 0xec, 0x60, 0x00, + 0xfa, 0x96, 0x30, 0xca, 0x01, 0x8d, 0xdb, 0xfd, 0x34, 0x63, 0x53, 0x26, 0x1e, 0x47, 0x73, 0xe6, + 0x1a, 0xb7, 0xcd, 0x55, 0x03, 0xd8, 0x7d, 0xe3, 0x16, 0x71, 0x68, 0xca, 0x1f, 0xcc, 0xa3, 0x99, + 0x52, 0x71, 0x78, 0x37, 0xf6, 0x8e, 0xcc, 0x7a, 0x3f, 0x88, 0x74, 0x3e, 0x4d, 0x13, 0xc6, 0x3d, + 0x3a, 0x8d, 0x7d, 0x88, 0x0e, 0x06, 0x51, 0xe6, 0x54, 0xd7, 0xb6, 0x3d, 0x8f, 0x4c, 0xf2, 0x04, + 0x4e, 0x61, 0x63, 0xa2, 0x51, 0x10, 0xe7, 0xcb, 0x9c, 0x08, 0x1e, 0xcd, 0x0f, 0x79, 0x85, 0xe6, + 0x9b, 0x1f, 0xea, 0x86, 0x6c, 0xc8, 0xfc, 0x70, 0xc1, 0xa0, 0xf9, 0x73, 0x98, 0x1f, 0x7b, 0x91, + 0x88, 0xea, 0x73, 0xf4, 0xa7, 0x29, 0x3b, 0x87, 0x63, 0x9c, 0xa3, 0xbe, 0x92, 0x1a, 0xd7, 0x18, + 0x3e, 0xd3, 0x6d, 0x0f, 0xe6, 0x3d, 0xda, 0x90, 0x9d, 0xf7, 0x6a, 0xa3, 0x34, 0x7d, 0x7b, 0x30, + 0xef, 0xd1, 0x86, 0x2f, 0x77, 0x7b, 0xb5, 0xd1, 0xe7, 0xbb, 0xdb, 0x83, 0x79, 0xd0, 0xfe, 0xed, + 0x28, 0xb8, 0xda, 0x11, 0xaf, 0x73, 0xa0, 0x58, 0xa4, 0x4b, 0xe6, 0x4a, 0xe5, 0xec, 0x78, 0x0a, + 0xf5, 0xa5, 0x72, 0xb4, 0x0b, 0x94, 0xe2, 0x8f, 0xa3, 0xe0, 0x5d, 0x57, 0x29, 0x9e, 0xf2, 0x2a, + 0x6d, 0x9e, 0x1c, 0xef, 0x0e, 0x08, 0x2a, 0x61, 0xdf, 0x81, 0xc5, 0xe7, 0xa4, 0x1f, 0x6c, 0x2c, + 0xb4, 0x1e, 0xa7, 0x7c, 0x51, 0xc6, 0xf8, 0xc1, 0xc6, 0x8e, 0xa7, 0x28, 0xe2, 0x05, 0x83, 0xa6, + 0xf5, 0x0b, 0x86, 0xc5, 0x98, 0x4f, 0x27, 0xbe, 0x5e, 0x75, 0xbe, 0x9e, 0xec, 0x0c, 0x77, 0x00, + 0xf9, 0xdf, 0xcb, 0x9c, 0x1e, 0xeb, 0xc3, 0x24, 0xb8, 0x33, 0x24, 0x22, 0x9a, 0x08, 0x77, 0x2f, + 0xe5, 0x03, 0x05, 0xf9, 0xc7, 0x28, 0xb8, 0xe1, 0x2c, 0x88, 0xfd, 0x7a, 0xf7, 0xfd, 0x21, 0xb1, + 0xdd, 0xaf, 0x78, 0x3f, 0xf8, 0x5f, 0x5c, 0xa1, 0x74, 0x7f, 0x96, 0x47, 0x6b, 0xe9, 0xd1, 0x7c, + 0xf2, 0xfa, 0xa4, 0x4c, 0x58, 0x09, 0x33, 0xd6, 0x37, 0xe8, 0x34, 0x8c, 0xe7, 0xed, 0x77, 0x2f, + 0xe9, 0x05, 0xc5, 0xf9, 0xeb, 0x28, 0x58, 0xb1, 0x60, 0xf8, 0x34, 0xc9, 0x28, 0x8f, 0x2f, 0xb2, + 0x41, 0xe3, 0x02, 0x7d, 0x7c, 0x59, 0x37, 0x9c, 0xa1, 0xd6, 0xed, 0x06, 0x8b, 0xb7, 0x2b, 0x43, + 0x6d, 0x9a, 0x15, 0x2d, 0xda, 0x6b, 0xbd, 0x9c, 0x4b, 0xe4, 0xfe, 0xcb, 0x22, 0xca, 0x13, 0x5a, + 0xa4, 0xb5, 0xf7, 0x8b, 0x28, 0x0e, 0x67, 0xf6, 0xb5, 0xf5, 0x88, 0xcb, 0x9d, 0x68, 0x83, 0xf2, + 0x57, 0x88, 0x37, 0xb3, 0xef, 0xa0, 0x84, 0x1a, 0x4c, 0x3b, 0x9f, 0x1a, 0x9a, 0x6d, 0xb7, 0x86, + 0xa0, 0x68, 0x8d, 0x53, 0x6a, 0xea, 0xc2, 0xe0, 0xb6, 0x2f, 0x4a, 0xe7, 0xd2, 0x60, 0x6b, 0x20, + 0x4d, 0xc8, 0x4e, 0x99, 0x78, 0xc8, 0xa2, 0x84, 0x95, 0x5e, 0x59, 0x45, 0x0d, 0x92, 0x35, 0x69, + 0x97, 0xec, 0x2e, 0xcf, 0x16, 0xf3, 0x1c, 0x3a, 0x93, 0x94, 0x35, 0xa9, 0x7e, 0x59, 0x44, 0xe3, + 0x33, 0x8d, 0x96, 0x6d, 0xfe, 0xad, 0xcf, 0x2d, 0x7f, 0x18, 0xeb, 0x1f, 0xfd, 0x6c, 0x0e, 0x62, + 0xe9, 0x7a, 0xc2, 0x30, 0xea, 0xa9, 0x27, 0x1a, 0x49, 0x5b, 0x03, 0x69, 0x7c, 0xb8, 0x30, 0x64, + 0xd5, 0x78, 0xda, 0xee, 0x89, 0xd5, 0x19, 0x52, 0x3b, 0xc3, 0x1d, 0xf0, 0x51, 0x0e, 0x46, 0x55, + 0xbd, 0x74, 0xef, 0xa7, 0x59, 0x16, 0x6e, 0x7a, 0x86, 0x89, 0x84, 0xbc, 0x47, 0x39, 0x07, 0x4c, + 0x8c, 0x64, 0x79, 0xf4, 0xc9, 0xc3, 0xbe, 0x38, 0x0d, 0x35, 0x68, 0x24, 0x9b, 0x34, 0x3a, 0x12, + 0x18, 0x4d, 0xad, 0x6a, 0x3b, 0xf6, 0x37, 0x5c, 0xa7, 0xc2, 0xdb, 0x83, 0x79, 0x74, 0xdb, 0xde, + 0x50, 0x53, 0x5e, 0x0a, 0xd7, 0x6d, 0x7b, 0x1b, 0x62, 0x6a, 0x5e, 0x8a, 0xdf, 0xec, 0xa1, 0x3a, + 0xd7, 0x6c, 0x39, 0x3c, 0xde, 0xe8, 0x0f, 0x7d, 0x5d, 0xc3, 0xa8, 0xf9, 0x2c, 0x17, 0x83, 0xbe, + 0x61, 0x44, 0x39, 0x18, 0x5f, 0xdd, 0x29, 0x4e, 0xde, 0x04, 0x16, 0x05, 0x8b, 0xca, 0x28, 0x8f, + 0xf1, 0x3f, 0xf9, 0xd5, 0x01, 0x3b, 0x24, 0xf1, 0xd5, 0x9d, 0xdf, 0x03, 0x5d, 0xe2, 0xda, 0x9f, + 0x7e, 0x3a, 0x8e, 0x8c, 0xea, 0x1b, 0x4b, 0xfb, 0xcb, 0xcf, 0x8d, 0x01, 0x24, 0xbe, 0xc4, 0x95, + 0x80, 0x3a, 0x0a, 0xb6, 0xa2, 0x1f, 0x79, 0x42, 0xd9, 0xa8, 0x2f, 0xf3, 0xa7, 0x5d, 0xd0, 0xbe, + 0x27, 0x13, 0xaf, 0x29, 0x13, 0x9f, 0xb0, 0x0b, 0xd7, 0xbe, 0xa7, 0x52, 0xb3, 0x16, 0xf1, 0xed, + 0x7b, 0x5d, 0x14, 0x25, 0x0e, 0x66, 0x72, 0xbd, 0xea, 0xf1, 0x37, 0x73, 0xea, 0xb5, 0x5e, 0x0e, + 0xad, 0xfb, 0x7b, 0xe9, 0xd2, 0x3a, 0x39, 0x3b, 0x0a, 0xba, 0x97, 0x2e, 0xdd, 0x07, 0xe7, 0xcd, + 0x41, 0x2c, 0xbe, 0x20, 0x8e, 0x04, 0x7b, 0x29, 0x6f, 0x6e, 0x1d, 0xc5, 0x6d, 0xec, 0x9d, 0xab, + 0xdb, 0xf5, 0x7e, 0x10, 0xe9, 0xc8, 0x39, 0x94, 0xcc, 0x98, 0x53, 0x67, 0x6c, 0x02, 0xde, 0x8b, + 0x68, 0x04, 0xea, 0xaf, 0x09, 0x9e, 0x96, 0x3c, 0x66, 0x55, 0xb5, 0x5b, 0x4f, 0x8f, 0x0c, 0x7d, + 0x4d, 0x00, 0xb6, 0x71, 0x6b, 0x24, 0xbe, 0x26, 0xe8, 0x40, 0x10, 0xfb, 0x61, 0xf0, 0xfa, 0x23, + 0x3e, 0x9b, 0xb2, 0x3c, 0x09, 0xdf, 0xb3, 0xdf, 0xef, 0xf9, 0x6c, 0x5c, 0xff, 0xac, 0xe2, 0xad, + 0x50, 0x66, 0xfd, 0xd8, 0xba, 0xc7, 0x4e, 0x16, 0xb3, 0xe9, 0x45, 0x1e, 0xa3, 0xc7, 0xd6, 0xe6, + 0xf7, 0x71, 0x6d, 0x20, 0x1e, 0x5b, 0x2d, 0x40, 0xbf, 0x36, 0x36, 0x3f, 0x1f, 0x9f, 0x96, 0xac, + 0xf3, 0xce, 0xde, 0x3a, 0xb4, 0x26, 0xe2, 0xb5, 0x11, 0x21, 0xa8, 0x94, 0xc7, 0x25, 0x63, 0xce, + 0x52, 0xd6, 0x06, 0x6f, 0x29, 0x01, 0xd0, 0x9b, 0x6d, 0xf3, 0x73, 0xfb, 0xaa, 0xf9, 0x88, 0xc7, + 0x51, 0x56, 0x09, 0x5e, 0xe2, 0x7b, 0xa1, 0xd6, 0x15, 0x43, 0xc4, 0x66, 0x4b, 0xc2, 0xa8, 0x0e, + 0x4f, 0xd3, 0x7c, 0xe6, 0xac, 0x43, 0x6d, 0xf0, 0xd6, 0x01, 0x00, 0x3d, 0x41, 0x0f, 0x99, 0x28, + 0xd3, 0xb8, 0x9a, 0x32, 0xf1, 0x34, 0x2a, 0xa3, 0x39, 0x13, 0xac, 0xc4, 0xff, 0x9c, 0x02, 0x90, + 0xb1, 0xc5, 0x10, 0x13, 0x94, 0x62, 0x41, 0xf0, 0x87, 0xc1, 0xdb, 0xf5, 0xcc, 0x65, 0x39, 0xfc, + 0xb9, 0x8e, 0xfb, 0xcd, 0x5f, 0xb2, 0x09, 0xaf, 0xa8, 0x18, 0x53, 0x51, 0xb2, 0x68, 0x2e, 0x63, + 0xbf, 0xa5, 0x7e, 0x6f, 0xc0, 0x9d, 0xd1, 0xbd, 0xf7, 0xff, 0xf9, 0xc5, 0xca, 0xe8, 0xf3, 0x2f, + 0x56, 0x46, 0xff, 0xfe, 0x62, 0x65, 0xf4, 0xb7, 0x57, 0x2b, 0xaf, 0x7d, 0xfe, 0x6a, 0xe5, 0xb5, + 0x7f, 0xbd, 0x5a, 0x79, 0xed, 0xb3, 0xd7, 0xe1, 0x2f, 0xea, 0x9c, 0xfc, 0x5f, 0xf3, 0x77, 0x71, + 0xee, 0xfe, 0x37, 0x00, 0x00, 0xff, 0xff, 0xe8, 0xee, 0x93, 0x37, 0x75, 0x47, 0x00, 0x00, } // This is a compile-time assertion to ensure that this generated file @@ -306,6 +307,7 @@ type ClientCommandsHandler interface { ObjectSetBreadcrumbs(context.Context, *pb.RpcObjectSetBreadcrumbsRequest) *pb.RpcObjectSetBreadcrumbsResponse ObjectUndo(context.Context, *pb.RpcObjectUndoRequest) *pb.RpcObjectUndoResponse ObjectRedo(context.Context, *pb.RpcObjectRedoRequest) *pb.RpcObjectRedoResponse + ObjectImportMarkdown(context.Context, *pb.RpcObjectImportMarkdownRequest) *pb.RpcObjectImportMarkdownResponse ObjectListExport(context.Context, *pb.RpcObjectListExportRequest) *pb.RpcObjectListExportResponse ObjectBookmarkFetch(context.Context, *pb.RpcObjectBookmarkFetchRequest) *pb.RpcObjectBookmarkFetchResponse ObjectToBookmark(context.Context, *pb.RpcObjectToBookmarkRequest) *pb.RpcObjectToBookmarkResponse @@ -1548,6 +1550,26 @@ func ObjectRedo(b []byte) (resp []byte) { return resp } +func ObjectImportMarkdown(b []byte) (resp []byte) { + defer func() { + if PanicHandler != nil { + if r := recover(); r != nil { + resp, _ = (&pb.RpcObjectImportMarkdownResponse{Error: &pb.RpcObjectImportMarkdownResponseError{Code: pb.RpcObjectImportMarkdownResponseError_UNKNOWN_ERROR, Description: "panic recovered"}}).Marshal() + PanicHandler(r) + } + } + }() + + in := new(pb.RpcObjectImportMarkdownRequest) + if err := in.Unmarshal(b); err != nil { + resp, _ = (&pb.RpcObjectImportMarkdownResponse{Error: &pb.RpcObjectImportMarkdownResponseError{Code: pb.RpcObjectImportMarkdownResponseError_BAD_INPUT, Description: err.Error()}}).Marshal() + return resp + } + + resp, _ = clientCommandsHandler.ObjectImportMarkdown(context.Background(), in).Marshal() + return resp +} + func ObjectListExport(b []byte) (resp []byte) { defer func() { if PanicHandler != nil { @@ -3904,6 +3926,8 @@ func CommandAsync(cmd string, data []byte, callback func(data []byte)) { cd = ObjectUndo(data) case "ObjectRedo": cd = ObjectRedo(data) + case "ObjectImportMarkdown": + cd = ObjectImportMarkdown(data) case "ObjectListExport": cd = ObjectListExport(data) case "ObjectBookmarkFetch": diff --git a/core/block.go b/core/block.go index c2aa4f72d..89ae016da 100644 --- a/core/block.go +++ b/core/block.go @@ -280,6 +280,34 @@ func (mw *Middleware) BlockCut(cctx context.Context, req *pb.RpcBlockCutRequest) return response(pb.RpcBlockCutResponseError_NULL, textSlot, htmlSlot, anySlot, nil) } +func (mw *Middleware) ObjectImportMarkdown(cctx context.Context, req *pb.RpcObjectImportMarkdownRequest) *pb.RpcObjectImportMarkdownResponse { + ctx := mw.newContext(cctx) + response := func(code pb.RpcObjectImportMarkdownResponseErrorCode, rootLinkIds []string, err error) *pb.RpcObjectImportMarkdownResponse { + m := &pb.RpcObjectImportMarkdownResponse{ + Error: &pb.RpcObjectImportMarkdownResponseError{Code: code}, + RootLinkIds: rootLinkIds, + } + if err != nil { + m.Error.Description = err.Error() + } else { + m.Event = ctx.GetResponseEvent() + } + return m + } + + var rootLinkIds []string + err := mw.doBlockService(func(bs *block.Service) (err error) { + rootLinkIds, err = bs.ImportMarkdown(ctx, *req) + return err + }) + + if err != nil { + return response(pb.RpcObjectImportMarkdownResponseError_UNKNOWN_ERROR, rootLinkIds, err) + } + + return response(pb.RpcObjectImportMarkdownResponseError_NULL, rootLinkIds, nil) +} + func (mw *Middleware) BlockExport(cctx context.Context, req *pb.RpcBlockExportRequest) *pb.RpcBlockExportResponse { ctx := mw.newContext(cctx) response := func(code pb.RpcBlockExportResponseErrorCode, path string, err error) *pb.RpcBlockExportResponse { diff --git a/core/block/doc/service.go b/core/block/doc/service.go index 276f14d03..55044a145 100644 --- a/core/block/doc/service.go +++ b/core/block/doc/service.go @@ -5,6 +5,7 @@ import ( "sync" "github.com/anytypeio/go-anytype-middleware/pkg/lib/core" + "github.com/gogo/protobuf/types" "github.com/anytypeio/go-anytype-middleware/app" "github.com/anytypeio/go-anytype-middleware/core/block/editor/state" @@ -30,6 +31,10 @@ type DocInfo struct { State *state.State } +type RelationOptionsInfo struct { + RelationId string + Options []*types.Struct +} type OnDocChangeCallback func(ctx context.Context, info DocInfo) error diff --git a/core/block/editor.go b/core/block/editor.go index edd7bd26f..feef363ba 100644 --- a/core/block/editor.go +++ b/core/block/editor.go @@ -17,6 +17,7 @@ import ( "github.com/anytypeio/go-anytype-middleware/core/block/editor/clipboard" "github.com/anytypeio/go-anytype-middleware/core/block/editor/dataview" "github.com/anytypeio/go-anytype-middleware/core/block/editor/file" + _import "github.com/anytypeio/go-anytype-middleware/core/block/editor/import" "github.com/anytypeio/go-anytype-middleware/core/block/editor/smartblock" "github.com/anytypeio/go-anytype-middleware/core/block/editor/state" "github.com/anytypeio/go-anytype-middleware/core/block/editor/stext" @@ -298,6 +299,48 @@ func (s *Service) Export(req pb.RpcBlockExportRequest) (path string, err error) return path, err } +func (s *Service) ImportMarkdown( + ctx *session.Context, + req pb.RpcObjectImportMarkdownRequest, +) (rootLinkIds []string, err error) { + var rootLinks []*model.Block + err = s.DoImport(req.ContextId, func(imp _import.Import) error { + rootLinks, err = imp.ImportMarkdown(ctx, req) + return err + }) + if err != nil { + return rootLinkIds, err + } + + if len(rootLinks) == 1 { + err = s.SimplePaste(req.ContextId, rootLinks) + + if err != nil { + return rootLinkIds, err + } + } else { + _, pageId, err := s.CreateLinkToTheNewObject(ctx, "", pb.RpcBlockLinkCreateWithObjectRequest{ + ContextId: req.ContextId, + Details: &types.Struct{Fields: map[string]*types.Value{ + "name": pbtypes.String("Import from Notion"), + "iconEmoji": pbtypes.String("📁"), + }}, + }) + + if err != nil { + return rootLinkIds, err + } + + err = s.SimplePaste(pageId, rootLinks) + } + + for _, r := range rootLinks { + rootLinkIds = append(rootLinkIds, r.Id) + } + + return rootLinkIds, err +} + func (s *Service) SetTextText(ctx *session.Context, req pb.RpcBlockTextSetTextRequest) error { return s.DoText(req.ContextId, func(b stext.Text) error { return b.SetText(ctx, req) @@ -611,6 +654,14 @@ func (s *Service) Wakeup(id string) (err error) { }) } +func (s *Service) GetRelations(objectId string) (relations []*model.Relation, err error) { + err = s.Do(objectId, func(b smartblock.SmartBlock) error { + relations = b.Relations(nil).Models() + return nil + }) + return +} + // ModifyDetails performs details get and update under the sb lock to make sure no modifications are done in the middle func (s *Service) ModifyDetails( objectId string, modifier func(current *types.Struct) (*types.Struct, error), diff --git a/core/block/editor/clipboard/clipboard.go b/core/block/editor/clipboard/clipboard.go index 0d3af76c1..083c64477 100644 --- a/core/block/editor/clipboard/clipboard.go +++ b/core/block/editor/clipboard/clipboard.go @@ -29,6 +29,8 @@ import ( var ( ErrAllSlotsEmpty = errors.New("all slots are empty") + ErrTitlePasteRestricted = errors.New("paste to title restricted") + ErrOutOfRange = errors.New("out of range") log = logging.Logger("anytype-clipboard") ) diff --git a/core/block/editor/dashboard.go b/core/block/editor/dashboard.go index a8e3e6d9b..016ac3b45 100644 --- a/core/block/editor/dashboard.go +++ b/core/block/editor/dashboard.go @@ -5,6 +5,7 @@ import ( "github.com/anytypeio/go-anytype-middleware/core/block/editor/basic" "github.com/anytypeio/go-anytype-middleware/core/block/editor/collection" + _import "github.com/anytypeio/go-anytype-middleware/core/block/editor/import" "github.com/anytypeio/go-anytype-middleware/core/block/editor/smartblock" "github.com/anytypeio/go-anytype-middleware/core/block/editor/state" "github.com/anytypeio/go-anytype-middleware/core/block/editor/template" @@ -16,11 +17,12 @@ import ( "github.com/anytypeio/go-anytype-middleware/util/slice" ) -func NewDashboard(dmservice DetailsModifier) *Dashboard { +func NewDashboard(importServices _import.Services, dmservice DetailsModifier) *Dashboard { sb := smartblock.New() return &Dashboard{ SmartBlock: sb, AllOperations: basic.NewBasic(sb), // deprecated + Import: _import.NewImport(sb, importServices), Collection: collection.NewCollection(sb), DetailsModifier: dmservice, } @@ -29,6 +31,7 @@ func NewDashboard(dmservice DetailsModifier) *Dashboard { type Dashboard struct { smartblock.SmartBlock basic.AllOperations + _import.Import collection.Collection DetailsModifier DetailsModifier } diff --git a/core/block/editor/dataview/dataview.go b/core/block/editor/dataview/dataview.go index 9bf81b6db..d3ef04fb5 100644 --- a/core/block/editor/dataview/dataview.go +++ b/core/block/editor/dataview/dataview.go @@ -31,6 +31,7 @@ import ( const DefaultDetailsFieldName = "_defaultRecordFields" var log = logging.Logger("anytype-mw-editor-dataview") +var ErrMultiupdateWasNotAllowed = fmt.Errorf("multiupdate was not allowed") var DefaultDataviewRelations = make([]bundle.RelationKey, 0, len(bundle.RequiredInternalRelations)) func init() { @@ -49,6 +50,7 @@ type Dataview interface { SetSource(ctx *session.Context, blockId string, source []string) (err error) //GetAggregatedRelations(blockId string) ([]*model.Relation, error) + GetDataviewRelations(blockId string) ([]*model.Relation, error) DeleteView(ctx *session.Context, blockId string, viewId string, showEvent bool) error SetActiveView(ctx *session.Context, blockId string, activeViewId string, limit int, offset int) error @@ -148,6 +150,16 @@ func (d *sdataview) DeleteRelations(ctx *session.Context, blockId string, relati return d.Apply(s, smartblock.NoEvent) } +func (d *sdataview) GetDataviewRelations(blockId string) ([]*model.Relation, error) { + st := d.NewState() + tb, err := getDataviewBlock(st, blockId) + if err != nil { + return nil, err + } + + return tb.Model().GetDataview().GetRelations(), nil +} + func (d *sdataview) DeleteView(ctx *session.Context, blockId string, viewId string, showEvent bool) error { s := d.NewStateCtx(ctx) tb, err := getDataviewBlock(s, blockId) diff --git a/core/block/editor/file/uploader.go b/core/block/editor/file/uploader.go index 44eddbe03..0256c745b 100644 --- a/core/block/editor/file/uploader.go +++ b/core/block/editor/file/uploader.go @@ -51,6 +51,7 @@ type Uploader interface { SetUrl(url string) Uploader SetFile(path string) Uploader SetGroupId(groupId string) Uploader + AddOptions(options ...files.AddOption) Uploader AutoType(enable bool) Uploader AsyncUpdates(smartBlockId string) Uploader @@ -168,6 +169,11 @@ func (u *uploader) SetBytes(b []byte) Uploader { return u } +func (u *uploader) AddOptions(options ...files.AddOption) Uploader { + u.opts = append(u.opts, options...) + return u +} + func (u *uploader) SetUrl(url string) Uploader { url, _ = uri.ProcessURI(url) u.name = strings.Split(filepath.Base(url), "?")[0] diff --git a/core/block/editor/import/import.go b/core/block/editor/import/import.go new file mode 100644 index 000000000..41c4f0e3e --- /dev/null +++ b/core/block/editor/import/import.go @@ -0,0 +1,896 @@ +package _import + +import ( + "archive/zip" + "bufio" + "context" + "fmt" + "io" + "io/ioutil" + "net/url" + "os" + "path/filepath" + "regexp" + "strings" + + "github.com/globalsign/mgo/bson" + "github.com/gogo/protobuf/types" + + "github.com/anytypeio/go-anytype-middleware/core/block/editor/smartblock" + "github.com/anytypeio/go-anytype-middleware/core/block/import/markdown/anymark" + "github.com/anytypeio/go-anytype-middleware/core/block/process" + "github.com/anytypeio/go-anytype-middleware/core/session" + "github.com/anytypeio/go-anytype-middleware/pb" + "github.com/anytypeio/go-anytype-middleware/pkg/lib/bundle" + coresb "github.com/anytypeio/go-anytype-middleware/pkg/lib/core/smartblock" + "github.com/anytypeio/go-anytype-middleware/pkg/lib/logging" + "github.com/anytypeio/go-anytype-middleware/pkg/lib/pb/model" + "github.com/anytypeio/go-anytype-middleware/util/pbtypes" + "github.com/anytypeio/go-anytype-middleware/util/slice" +) + +var ( + linkRegexp = regexp.MustCompile(`\[([\s\S]*?)\]\((.*?)\)`) + filenameCleanRegexp = regexp.MustCompile(`[^\w_\s]+`) + filenameDuplicateSpaceRegexp = regexp.MustCompile(`\s+`) + emojiAproxRegexp = regexp.MustCompile(`[\x{2194}-\x{329F}\x{1F000}-\x{1FADF}]`) + + log = logging.Logger("anytype-import") + articleIcons = []string{"📓", "📕", "📗", "📘", "📙", "📖", "📔", "📒", "📝", "📄", "📑"} + dbIcons = []string{"🗃", "🗂"} +) + +type Import interface { + ImportMarkdown(ctx *session.Context, req pb.RpcObjectImportMarkdownRequest) (rootLinks []*model.Block, err error) +} + +func NewImport(sb smartblock.SmartBlock, ctrl Services) Import { + return &importImpl{SmartBlock: sb, ctrl: ctrl} +} + +type importImpl struct { + smartblock.SmartBlock + ctrl Services +} + +type fileInfo struct { + os.FileInfo + io.ReadCloser + hasInboundLinks bool + pageID string + isRootFile bool + title string + parsedBlocks []*model.Block +} + +type Services interface { + CreateSmartBlock(ctx context.Context, sbType coresb.SmartBlockType, details *types.Struct, relationIds []string) (id string, newDetails *types.Struct, err error) + SetDetails(ctx *session.Context, req pb.RpcObjectSetDetailsRequest) (err error) + SimplePaste(contextId string, anySlot []*model.Block) (err error) + UploadBlockFileSync(ctx *session.Context, req pb.RpcBlockUploadRequest) error + BookmarkFetchSync(ctx *session.Context, req pb.RpcBlockBookmarkFetchRequest) error + ProcessAdd(p process.Process) (err error) +} + +func (imp *importImpl) ImportMarkdown(ctx *session.Context, req pb.RpcObjectImportMarkdownRequest) (rootLinks []*model.Block, err error) { + progress := process.NewProgress(pb.ModelProcess_Import) + defer progress.Finish() + imp.ctrl.ProcessAdd(progress) + progress.SetProgressMessage("read dir") + s := imp.NewStateCtx(ctx) + defer log.Debug("5. ImportMarkdown: all smartBlocks done") + tempDir := imp.Anytype().TempDir() + + files, close, err := imp.DirWithMarkdownToBlocks(req.ImportPath) + defer func() { + if close != nil { + _ = close() + } + }() + + filesCount := len(files) + log.Debug("FILES COUNT:", filesCount) + + progress.SetTotal(int64(filesCount) * 8) // 8 loops + var pagesCreated int + + progress.SetProgressMessage("process links (1)") + for name, file := range files { + select { + case <-progress.Canceled(): + return nil, fmt.Errorf("canceled") + default: + } + progress.AddDone(1) + // index links in the root csv file + if !file.isRootFile || !strings.EqualFold(filepath.Ext(name), ".csv") { + continue + } + + ext := filepath.Ext(name) + csvDir := strings.TrimSuffix(name, ext) + + for targetName, targetFile := range files { + fileExt := filepath.Ext(targetName) + if filepath.Dir(targetName) == csvDir && strings.EqualFold(fileExt, ".md") { + targetFile.hasInboundLinks = true + } + } + } + + progress.SetProgressMessage("creating documents") + for name, file := range files { + select { + case <-progress.Canceled(): + return nil, fmt.Errorf("canceled") + default: + } + progress.AddDone(1) + if !strings.EqualFold(filepath.Ext(name), ".md") { + continue + } + + if !file.isRootFile && !file.hasInboundLinks { + log.Errorf("skip non-root md files without inbound links %s", name) + continue + } + + pageID, _, err := imp.ctrl.CreateSmartBlock(context.TODO(), coresb.SmartBlockTypePage, nil, nil) + if err != nil { + log.Errorf("failed to create smartblock: %s", err.Error()) + continue + } + file.pageID = pageID + pagesCreated++ + } + + log.Debug("pages created:", pagesCreated) + + progress.SetProgressMessage("set documents names") + for name, file := range files { + select { + case <-progress.Canceled(): + return nil, fmt.Errorf("canceled") + default: + } + progress.AddDone(1) + var title string + var emoji string + + if file.pageID == "" { + // file is not a page + continue + } + + if len(file.parsedBlocks) > 0 { + if text := file.parsedBlocks[0].GetText(); text != nil && text.Style == model.BlockContentText_Header1 { + title = text.Text + titleParts := strings.SplitN(title, " ", 2) + + // only select the first rune to see if it looks like emoji + if len(titleParts) == 2 && emojiAproxRegexp.MatchString(string([]rune(titleParts[0])[0:1])) { + // first symbol is emoji - just use it all before the space + emoji = titleParts[0] + title = titleParts[1] + } + // remove title block + file.parsedBlocks = file.parsedBlocks[1:] + } + } + + if emoji == "" { + emoji = slice.GetRandomString(articleIcons, name) + } + + if title == "" { + title := strings.TrimSuffix(filepath.Base(name), filepath.Ext(name)) + titleParts := strings.Split(title, " ") + title = strings.Join(titleParts[:len(titleParts)-1], " ") + } + + // FIELD-BLOCK + fields := map[string]*types.Value{ + "name": pbtypes.String(title), + "iconEmoji": pbtypes.String(emoji), + } + + file.title = title + + var details = []*pb.RpcObjectSetDetailsDetail{} + + for name, val := range fields { + details = append(details, &pb.RpcObjectSetDetailsDetail{ + Key: name, + Value: val, + }) + } + + err = imp.ctrl.SetDetails(nil, pb.RpcObjectSetDetailsRequest{ + ContextId: file.pageID, + Details: details, + }) + + if err != nil { + return rootLinks, err + } + } + + log.Debug("1. ImportMarkdown: all smartBlocks created") + progress.SetProgressMessage("process links (2)") + for _, file := range files { + select { + case <-progress.Canceled(): + return nil, fmt.Errorf("canceled") + default: + } + progress.AddDone(1) + if file.pageID == "" { + // file is not a page + continue + } + + file.parsedBlocks = imp.processFieldBlockIfItIs(file.parsedBlocks, files) + + for _, block := range file.parsedBlocks { + if link := block.GetLink(); link != nil { + target, err := url.PathUnescape(link.TargetBlockId) + if err != nil { + log.Warnf("err while url.PathUnescape: %s \n \t\t\t url: %s", err, link.TargetBlockId) + target = link.TargetBlockId + } + + if files[target] != nil { + link.TargetBlockId = files[target].pageID + files[target].hasInboundLinks = true + } + + } else if text := block.GetText(); text != nil && text.Marks != nil && len(text.Marks.Marks) > 0 { + for _, mark := range text.Marks.Marks { + if mark.Type != model.BlockContentTextMark_Mention && mark.Type != model.BlockContentTextMark_Object { + continue + } + + if targetFile, exists := files[mark.Param]; exists { + mark.Param = targetFile.pageID + } + } + } + } + } + + progress.SetProgressMessage("process csv") + for name, file := range files { + select { + case <-progress.Canceled(): + return nil, fmt.Errorf("canceled") + default: + } + progress.AddDone(1) + // wrap root-level csv files with page + if file.isRootFile && strings.EqualFold(filepath.Ext(name), ".csv") { + // fixme: move initial details into CreateSmartBlock + pageID, _, err := imp.ctrl.CreateSmartBlock(context.TODO(), coresb.SmartBlockTypePage, nil, nil) + if err != nil { + log.Errorf("failed to create smartblock: %s", err.Error()) + continue + } + + fields := map[string]*types.Value{ + "name": pbtypes.String(imp.shortPathToName(name)), + "iconEmoji": pbtypes.String(slice.GetRandomString(dbIcons, name)), + } + + var details = []*pb.RpcObjectSetDetailsDetail{} + + for name, val := range fields { + details = append(details, &pb.RpcObjectSetDetailsDetail{ + Key: name, + Value: val, + }) + } + + err = imp.ctrl.SetDetails(nil, pb.RpcObjectSetDetailsRequest{ + ContextId: pageID, + Details: details, + }) + + file.pageID = pageID + file.parsedBlocks = imp.convertCsvToLinks(name, files) + } + + if file.pageID == "" { + // file is not a page + continue + } + + var blocks = make([]*model.Block, 0, len(file.parsedBlocks)) + for i, b := range file.parsedBlocks { + if f := b.GetFile(); f != nil && strings.EqualFold(filepath.Ext(f.Name), ".csv") { + if csvFile, exists := files[f.Name]; exists { + csvFile.hasInboundLinks = true + } else { + continue + } + + csvInlineBlocks := imp.convertCsvToLinks(f.Name, files) + blocks = append(blocks, csvInlineBlocks...) + } else { + blocks = append(blocks, file.parsedBlocks[i]) + } + } + + file.parsedBlocks = blocks + } + + log.Debug("2. ImportMarkdown: start to paste blocks") + progress.SetProgressMessage("create content") + for name, file := range files { + select { + case <-progress.Canceled(): + return nil, fmt.Errorf("canceled") + default: + } + progress.AddDone(1) + if file.pageID == "" { + // file is not a page + continue + } + + log.Debug(">>> start to paste to page:", name, file.pageID) + if file.parsedBlocks == nil { + log.Errorf("parsedBlocks is nil") + } + err = imp.ctrl.SimplePaste(file.pageID, file.parsedBlocks) + if err != nil { + return rootLinks, err + } + } + + log.Debug("3. ImportMarkdown: all blocks pasted. Start to upload files & fetch bookmarks") + progress.SetProgressMessage("upload files") + for name, file := range files { + select { + case <-progress.Canceled(): + return nil, fmt.Errorf("canceled") + default: + } + progress.AddDone(1) + log.Debug(">>> current page:", name, " | linked: ", file.hasInboundLinks) + if file.pageID == "" { + continue + } + + for _, b := range file.parsedBlocks { + if bm := b.GetBookmark(); bm != nil { + err = imp.ctrl.BookmarkFetchSync(ctx, pb.RpcBlockBookmarkFetchRequest{ + ContextId: file.pageID, + BlockId: b.Id, + Url: bm.Url, + }) + if err != nil { + log.Errorf("failed to fetch bookmark %s: %s", bm.Url, err.Error()) + } + } else if f := b.GetFile(); f != nil { + filesCount = filesCount - 1 + log.Debug("page:", name, " | start to upload file :", f.Name) + + if strings.HasPrefix(f.Name, "http://") || strings.HasPrefix(f.Name, "https://") { + err = imp.ctrl.UploadBlockFileSync(ctx, pb.RpcBlockUploadRequest{ + ContextId: file.pageID, + BlockId: b.Id, + Url: f.Name, + }) + if err != nil { + return rootLinks, fmt.Errorf("can not import file from URL: %s", err) + } + continue + } + + baseName := filepath.Base(f.Name) + tmpFile, err := os.Create(filepath.Join(tempDir, baseName)) + + shortPath := f.Name + + w := bufio.NewWriter(tmpFile) + targetFile, found := files[shortPath] + if !found { + log.Errorf("file %s not found", shortPath) + continue + } + + _, err = w.ReadFrom(targetFile.ReadCloser) + if err != nil { + log.Errorf("failed to read file %s: %s", shortPath, err.Error()) + continue + } + + if err := w.Flush(); err != nil { + log.Errorf("failed to flush file %s: %s", shortPath, err.Error()) + continue + } + + targetFile.Close() + tmpFile.Close() + + err = imp.ctrl.UploadBlockFileSync(ctx, pb.RpcBlockUploadRequest{ + ContextId: file.pageID, + BlockId: b.Id, + FilePath: tmpFile.Name(), + Url: "", + }) + os.Remove(tmpFile.Name()) + if err != nil { + return rootLinks, fmt.Errorf("can not import file from temp file: %s", err) + } + } + } + } + progress.SetProgressMessage("process links (3)") + for _, file := range files { + select { + case <-progress.Canceled(): + return nil, fmt.Errorf("canceled") + default: + } + progress.AddDone(1) + if file.pageID == "" { + // not a page + continue + } + + if file.hasInboundLinks { + continue + } + + rootLinks = append(rootLinks, &model.Block{ + Content: &model.BlockContentOfLink{ + Link: &model.BlockContentLink{ + TargetBlockId: file.pageID, + Style: model.BlockContentLink_Page, + Fields: nil, + }, + }, + }) + } + + log.Debug("4. ImportMarkdown: everything done") + + return rootLinks, imp.Apply(s) +} + +func (imp *importImpl) DirWithMarkdownToBlocks(importPath string) (files map[string]*fileInfo, fileClose func() error, err error) { + log.Debug("1. DirWithMarkdownToBlocks: directory %s", importPath) + + files = make(map[string]*fileInfo) + fileClose = func() error { + return nil + } + allFileShortPaths := []string{} + + ext := filepath.Ext(importPath) + if strings.EqualFold(ext, ".zip") { + r, err := zip.OpenReader(importPath) + if err != nil { + return files, fileClose, fmt.Errorf("can not read zip while import: %s", err) + } + fileClose = r.Close + + zipName := strings.TrimSuffix(importPath, ext) + for _, f := range r.File { + if strings.HasPrefix(f.Name, "__MACOSX/") { + continue + } + shortPath := filepath.Clean(f.Name) + // remove zip root folder if exists + shortPath = strings.TrimPrefix(shortPath, zipName+"/") + + allFileShortPaths = append(allFileShortPaths, shortPath) + + rc, err := f.Open() + if err != nil { + return files, fileClose, fmt.Errorf("failed to open file from zip while import: %s", err) + } + + files[shortPath] = &fileInfo{ + FileInfo: f.FileInfo(), + ReadCloser: rc, + } + } + + } else { + err = filepath.Walk(importPath, + func(path string, info os.FileInfo, err error) error { + if err != nil { + return err + } + + if !info.IsDir() { + shortPath, err := filepath.Rel(importPath+"/", path) + if err != nil { + return fmt.Errorf("failed to get relative path: %s", err.Error()) + } + + allFileShortPaths = append(allFileShortPaths, shortPath) + f, err := os.Open(path) + if err != nil { + return err + } + + files[shortPath] = &fileInfo{ + FileInfo: info, + ReadCloser: f, + } + } + + return nil + }, + ) + if err != nil { + return files, fileClose, err + } + } + + log.Debug("1. DirWithMarkdownToBlocks: Get allFileShortPaths:", allFileShortPaths) + + for shortPath, file := range files { + log.Debug(">>> Current file:", shortPath) + if filepath.Base(shortPath) == shortPath { + file.isRootFile = true + } + + if filepath.Ext(shortPath) == ".md" { + b, err := ioutil.ReadAll(file) + if err != nil { + log.Errorf("failed to read file %s: %s", shortPath, err.Error()) + continue + } + + file.parsedBlocks, _, err = anymark.MarkdownToBlocks(b, filepath.Dir(shortPath), allFileShortPaths) + if err != nil { + log.Errorf("failed to read blocks %s: %s", shortPath, err.Error()) + } + // md file no longer needed + file.Close() + + for i, block := range file.parsedBlocks { + log.Debug("Block:", i) + // file.parsedBlocks[i].Id = bson.NewObjectId().Hex() + + txt := block.GetText() + if txt != nil && txt.Marks != nil && len(txt.Marks.Marks) == 1 && + txt.Marks.Marks[0].Type == model.BlockContentTextMark_Link { + + link := txt.Marks.Marks[0].Param + + var wholeLineLink bool + textRunes := []rune(txt.Text) + var from, to = int(txt.Marks.Marks[0].Range.From), int(txt.Marks.Marks[0].Range.To) + if from == 0 || (from < len(textRunes) && len(strings.TrimSpace(string(textRunes[0:from]))) == 0) { + if to >= len(textRunes) || len(strings.TrimSpace(string(textRunes[to:]))) == 0 { + wholeLineLink = true + } + } + + ext := filepath.Ext(link) + + // todo: bug with multiple markup links in arow when the first is external + if file := files[link]; file != nil { + if strings.EqualFold(ext, ".md") { + // only convert if this is the only link in the row + if wholeLineLink { + imp.convertTextToPageLink(block) + } else { + imp.convertTextToPageMention(block) + } + } else { + imp.convertTextToFile(block) + } + + if strings.EqualFold(ext, ".csv") { + csvDir := strings.TrimSuffix(link, ext) + for name, file := range files { + // set hasInboundLinks for all CSV-origin md files + fileExt := filepath.Ext(name) + if filepath.Dir(name) == csvDir && strings.EqualFold(fileExt, ".md") { + file.hasInboundLinks = true + } + } + } + file.hasInboundLinks = true + } else if wholeLineLink { + imp.convertTextToBookmark(block) + } else { + log.Debugf("") + } + + /*if block.GetFile() != nil { + fileName, err := url.PathUnescape(block.GetFile().Name) + if err != nil { + log.Warnf("err while url.PathUnescape: %s \n \t\t\t url: %s", err, block.GetFile().Name) + fileName = txt.Marks.Marks[0].Param + } + if !strings.HasPrefix(fileName, "http://") && !strings.HasPrefix(fileName, "https://") { + // not a URL + fileName = importPath + "/" + fileName + } + + block.GetFile().Name = fileName + block.GetFile().Type = model.BlockContentFile_Image + }*/ + } + } + + ext := filepath.Ext(shortPath) + dependentFilesDir := strings.TrimSuffix(shortPath, ext) + var hasUnlinkedDependentMDFiles bool + for targetName, targetFile := range files { + fileExt := filepath.Ext(targetName) + if filepath.Dir(targetName) == dependentFilesDir && strings.EqualFold(fileExt, ".md") { + if !targetFile.hasInboundLinks { + if !hasUnlinkedDependentMDFiles { + // add Unsorted header + file.parsedBlocks = append(file.parsedBlocks, &model.Block{ + Id: bson.NewObjectId().Hex(), + Content: &model.BlockContentOfText{Text: &model.BlockContentText{ + Text: "Unsorted", + Style: model.BlockContentText_Header3, + }}, + }) + hasUnlinkedDependentMDFiles = true + } + + file.parsedBlocks = append(file.parsedBlocks, &model.Block{ + Id: bson.NewObjectId().Hex(), + Content: &model.BlockContentOfLink{Link: &model.BlockContentLink{ + TargetBlockId: targetName, + Style: model.BlockContentLink_Page, + }}, + }) + + targetFile.hasInboundLinks = true + } + } + } + } + + } + log.Debug("2. DirWithMarkdownToBlocks: MarkdownToBlocks completed") + + return files, fileClose, err +} + +func (imp *importImpl) convertTextToPageLink(block *model.Block) { + block.Content = &model.BlockContentOfLink{ + Link: &model.BlockContentLink{ + TargetBlockId: block.GetText().Marks.Marks[0].Param, + Style: model.BlockContentLink_Page, + }, + } +} + +func (imp *importImpl) convertTextToBookmark(block *model.Block) { + if _, err := url.Parse(block.GetText().Marks.Marks[0].Param); err != nil { + return + } + + block.Content = &model.BlockContentOfBookmark{ + Bookmark: &model.BlockContentBookmark{ + Url: block.GetText().Marks.Marks[0].Param, + }, + } +} + +func (imp *importImpl) convertTextToPageMention(block *model.Block) { + for _, mark := range block.GetText().Marks.Marks { + if mark.Type != model.BlockContentTextMark_Link { + continue + } + + mark.Param = mark.Param + mark.Type = model.BlockContentTextMark_Mention + } +} + +func (imp *importImpl) convertTextToFile(block *model.Block) { + // "svg" excluded + if block.GetText().Marks.Marks[0].Param == "" { + return + } + + imageFormats := []string{"jpg", "jpeg", "png", "gif", "webp"} + videoFormats := []string{"mp4", "m4v"} + audioFormats := []string{"mp3", "ogg", "wav", "m4a", "flac"} + pdfFormat := "pdf" + + fileType := model.BlockContentFile_File + fileExt := filepath.Ext(block.GetText().Marks.Marks[0].Param) + if fileExt != "" { + fileExt = fileExt[1:] + for _, ext := range imageFormats { + if strings.EqualFold(fileExt, ext) { + fileType = model.BlockContentFile_Image + break + } + } + + for _, ext := range videoFormats { + if strings.EqualFold(fileExt, ext) { + fileType = model.BlockContentFile_Video + break + } + } + + for _, ext := range audioFormats { + if strings.EqualFold(fileExt, ext) { + fileType = model.BlockContentFile_Audio + break + } + } + + if strings.EqualFold(fileExt, pdfFormat) { + fileType = model.BlockContentFile_PDF + } + } + + block.Content = &model.BlockContentOfFile{ + File: &model.BlockContentFile{ + Name: block.GetText().Marks.Marks[0].Param, + State: model.BlockContentFile_Empty, + Type: fileType, + }, + } +} + +func (imp *importImpl) convertCsvToLinks(csvFileName string, files map[string]*fileInfo) (blocks []*model.Block) { + ext := filepath.Ext(csvFileName) + csvDir := strings.TrimSuffix(csvFileName, ext) + + blocks = append(blocks, &model.Block{ + Id: bson.NewObjectId().Hex(), + Content: &model.BlockContentOfText{Text: &model.BlockContentText{ + Text: imp.shortPathToName(csvFileName), + Style: model.BlockContentText_Header3, + }}, + }) + + for name, file := range files { + fileExt := filepath.Ext(name) + if filepath.Dir(name) == csvDir && strings.EqualFold(fileExt, ".md") { + file.hasInboundLinks = true + fields := make(map[string]*types.Value) + fields[bundle.RelationKeyName.String()] = &types.Value{ + Kind: &types.Value_StringValue{StringValue: file.title}, + } + + blocks = append(blocks, &model.Block{ + Id: bson.NewObjectId().Hex(), + Content: &model.BlockContentOfLink{ + Link: &model.BlockContentLink{ + TargetBlockId: file.pageID, + Style: model.BlockContentLink_Page, + Fields: &types.Struct{ + Fields: fields, + }, + }, + }, + }) + } + } + + return blocks +} + +func (imp *importImpl) processFieldBlockIfItIs(blocks []*model.Block, files map[string]*fileInfo) (blocksOut []*model.Block) { + if len(blocks) < 1 || blocks[0].GetText() == nil { + return blocks + } + blocksOut = blocks + + txt := blocks[0].GetText().Text + if txt == "" || + (blocks[0].GetText().Marks != nil && len(blocks[0].GetText().Marks.Marks) > 0) { + // fields can't have a markup + return blocks + } + + potentialPairs := strings.Split(txt, "\n") + + var text string + var marks []*model.BlockContentTextMark + for _, pair := range potentialPairs { + if text != "" { + text += "\n" + } + if len(pair) <= 3 || pair[len(pair)-3:] != ".md" { + text += pair + continue + } + + keyVal := strings.SplitN(pair, ":", 2) + if len(keyVal) < 2 { + text += pair + continue + } + + potentialFileNames := strings.Split(keyVal[1], ",") + text += keyVal[0] + ": " + + for potentialFileNameIndex, potentialFileName := range potentialFileNames { + potentialFileName, _ = url.PathUnescape(potentialFileName) + potentialFileName = strings.ReplaceAll(potentialFileName, `"`, "") + if potentialFileNameIndex != 0 { + text += ", " + } + shortPath := "" + id := imp.getIdFromPath(potentialFileName) + for name, _ := range files { + if imp.getIdFromPath(name) == id { + shortPath = name + break + } + } + + file := files[shortPath] + /*for name, anytypePageId := range nameToId { + if imp.getIdFromPath(name) == id { + targetId = anytypePageId + } + }*/ + + if file == nil || len(file.pageID) == 0 { + text += potentialFileName + log.Errorf("target file not found:", shortPath, potentialFileName) + } else { + log.Debug("target file found:", file.pageID, shortPath) + file.hasInboundLinks = true + if file.title == "" { + // shouldn't be a case + file.title = shortPath + } + + text += file.title + marks = append(marks, &model.BlockContentTextMark{ + Range: &model.Range{int32(len(text) - len(file.title)), int32(len(text))}, + Type: model.BlockContentTextMark_Mention, + Param: file.pageID, + }) + } + } + } + + if len(marks) > 0 { + blockText := blocks[0].GetText() + blockText.Text = text + blockText.Marks = &model.BlockContentTextMarks{marks} + } + + return blocksOut +} + +func (imp *importImpl) getIdFromPath(path string) (id string) { + a := strings.Split(path, " ") + b := a[len(a)-1] + if len(b) < 3 { + return "" + } + return b[:len(b)-3] +} + +/*func (imp *importImpl) getShortPath(importPath string, ) (id string) { + a := strings.Split(path, " ") + b := a[len(a)-1] + if len(b) < 3 { + return "" + } + return b[:len(b)-3] +}*/ + +func (imp *importImpl) shortPathToName(path string) (name string) { + sArr := strings.Split(filepath.Base(path), " ") + if len(sArr) == 0 { + return path + } + + name = strings.Join(sArr[:len(sArr)-1], " ") + return name +} diff --git a/core/block/editor/import/import_test.go b/core/block/editor/import/import_test.go new file mode 100644 index 000000000..7d34c0f2f --- /dev/null +++ b/core/block/editor/import/import_test.go @@ -0,0 +1 @@ +package _import diff --git a/core/block/editor/page.go b/core/block/editor/page.go index d8ce079f0..961f90ac2 100644 --- a/core/block/editor/page.go +++ b/core/block/editor/page.go @@ -7,6 +7,7 @@ import ( "github.com/anytypeio/go-anytype-middleware/core/block/editor/clipboard" "github.com/anytypeio/go-anytype-middleware/core/block/editor/dataview" "github.com/anytypeio/go-anytype-middleware/core/block/editor/file" + _import "github.com/anytypeio/go-anytype-middleware/core/block/editor/import" "github.com/anytypeio/go-anytype-middleware/core/block/editor/smartblock" "github.com/anytypeio/go-anytype-middleware/core/block/editor/stext" "github.com/anytypeio/go-anytype-middleware/core/block/editor/table" @@ -25,6 +26,7 @@ type Page struct { stext.Text clipboard.Clipboard bookmark.Bookmark + _import.Import dataview.Dataview table.TableEditor } @@ -32,6 +34,7 @@ type Page struct { func NewPage( fileSource file.BlockService, pageManager bookmark.BlockService, + importServices _import.Services, bookmarkSvc bookmark.BookmarkService, ) *Page { sb := smartblock.New() @@ -44,6 +47,7 @@ func NewPage( File: f, Clipboard: clipboard.NewClipboard(sb, f), Bookmark: bookmark.NewBookmark(sb, pageManager, bookmarkSvc), + Import: _import.NewImport(sb, importServices), Dataview: dataview.NewDataview(sb), TableEditor: table.NewEditor(sb), } diff --git a/core/block/editor/smartblock/smartblock.go b/core/block/editor/smartblock/smartblock.go index 49013149b..99e3b510c 100644 --- a/core/block/editor/smartblock/smartblock.go +++ b/core/block/editor/smartblock/smartblock.go @@ -1202,6 +1202,49 @@ func (sb *smartBlock) AddHook(f HookCallback, events ...Hook) { } } +func mergeAndSortRelations(objTypeRelations []*model.Relation, extraRelations []*model.Relation, aggregatedRelations []*model.Relation, details *types.Struct) []*model.Relation { + var m = make(map[string]int, len(extraRelations)) + var rels = make([]*model.Relation, 0, len(objTypeRelations)+len(extraRelations)) + + for i, rel := range extraRelations { + m[rel.Key] = i + rels = append(rels, pbtypes.CopyRelation(rel)) + } + + for _, rel := range objTypeRelations { + if _, exists := m[rel.Key]; exists { + continue + } + rels = append(rels, pbtypes.CopyRelation(rel)) + m[rel.Key] = len(rels) - 1 + } + + for _, rel := range aggregatedRelations { + if i, exists := m[rel.Key]; exists { + // overwrite name that we've got from DS + if rels[i].Name != rel.Name { + rels[i].Name = rel.Name + } + continue + } + rels = append(rels, pbtypes.CopyRelation(rel)) + m[rel.Key] = len(rels) - 1 + } + + if details == nil || details.Fields == nil { + return rels + } + return rels +} + +func (sb *smartBlock) baseRelations() []*model.Relation { + rels := []*model.Relation{bundle.MustGetRelation(bundle.RelationKeyId), bundle.MustGetRelation(bundle.RelationKeyLayout), bundle.MustGetRelation(bundle.RelationKeyIconEmoji), bundle.MustGetRelation(bundle.RelationKeyName)} + for _, rel := range rels { + rel.Scope = model.Relation_object + } + return rels +} + // deprecated, use RelationLinks instead func (sb *smartBlock) Relations(s *state.State) relationutils.Relations { var links []*model.RelationLink diff --git a/core/block/editor/state/normalize.go b/core/block/editor/state/normalize.go index be7277c4d..6223639da 100644 --- a/core/block/editor/state/normalize.go +++ b/core/block/editor/state/normalize.go @@ -13,6 +13,7 @@ import ( var ( maxChildrenThreshold = 40 + divSize = maxChildrenThreshold / 2 ) func (s *State) Normalize(withLayouts bool) (err error) { diff --git a/core/block/editor/state/state.go b/core/block/editor/state/state.go index 77eeb3d67..d02111355 100644 --- a/core/block/editor/state/state.go +++ b/core/block/editor/state/state.go @@ -277,6 +277,13 @@ func (s *State) IsChild(parentId, childId string) bool { } } +func (s *State) PickOriginParentOf(id string) (res simple.Block) { + if s.parent != nil { + return s.parent.PickParentOf(id) + } + return +} + func (s *State) getStringBuf() []string { if s.parent != nil { return s.parent.getStringBuf() @@ -337,6 +344,12 @@ func (s *State) Exists(id string) (ok bool) { return s.Pick(id) != nil } +// InState indicate that block was copied into this state, parents not checking +func (s *State) InState(id string) (ok bool) { + _, ok = s.blocks[id] + return +} + func (s *State) SearchText() (text string) { s.Iterate(func(b simple.Block) (isContinue bool) { if tb := b.Model().GetText(); tb != nil { @@ -925,6 +938,16 @@ func (s *State) CombinedDetails() *types.Struct { return pbtypes.StructMerge(s.Details(), s.LocalDetails(), false) } +func (s *State) HasCombinedDetailsKey(key string) bool { + if pbtypes.HasField(s.Details(), key) { + return true + } + if pbtypes.HasField(s.LocalDetails(), key) { + return true + } + return false +} + func (s *State) Details() *types.Struct { if s.details == nil && s.parent != nil { return s.parent.Details() diff --git a/core/block/editor/template.go b/core/block/editor/template.go index 6e4ca9b7f..eac172157 100644 --- a/core/block/editor/template.go +++ b/core/block/editor/template.go @@ -5,6 +5,7 @@ import ( "github.com/anytypeio/go-anytype-middleware/core/block/editor/bookmark" "github.com/anytypeio/go-anytype-middleware/core/block/editor/file" + _import "github.com/anytypeio/go-anytype-middleware/core/block/editor/import" "github.com/anytypeio/go-anytype-middleware/core/block/editor/smartblock" "github.com/anytypeio/go-anytype-middleware/core/block/editor/state" "github.com/anytypeio/go-anytype-middleware/core/block/editor/template" @@ -16,9 +17,10 @@ import ( func NewTemplate( fileSource file.BlockService, pageManager bookmark.BlockService, + importServices _import.Services, bookmarkSvc bookmark.BookmarkService, ) *Template { - page := NewPage(fileSource, pageManager, bookmarkSvc) + page := NewPage(fileSource, pageManager, importServices, bookmarkSvc) return &Template{Page: page} } diff --git a/core/block/editor/workspaces.go b/core/block/editor/workspaces.go index 8b49aaefe..8b09ae722 100644 --- a/core/block/editor/workspaces.go +++ b/core/block/editor/workspaces.go @@ -109,6 +109,21 @@ func (p *Workspaces) DeleteObject(objectId string) error { return p.Apply(st, smartblock.NoEvent, smartblock.NoHistory) } +func (p *Workspaces) GetAllObjects() []string { + st := p.NewState() + workspaceCollection := st.GetCollection(source.WorkspaceCollection) + if workspaceCollection == nil || workspaceCollection.Fields == nil { + return nil + } + objects := make([]string, 0, len(workspaceCollection.Fields)) + for objId, workspaceId := range workspaceCollection.Fields { + if v, ok := workspaceId.Kind.(*types.Value_StringValue); ok && v.StringValue == p.Id() { + objects = append(objects, objId) + } + } + return objects +} + func (p *Workspaces) AddCreatorInfoIfNeeded() error { st := p.NewState() deviceId := p.Anytype().Device() diff --git a/core/block/import/markdown/anymark/whitespace/normalize.go b/core/block/import/markdown/anymark/whitespace/normalize.go index 28e4c174a..9c5026149 100644 --- a/core/block/import/markdown/anymark/whitespace/normalize.go +++ b/core/block/import/markdown/anymark/whitespace/normalize.go @@ -1,6 +1,8 @@ package whitespace import ( + "strings" + "golang.org/x/text/unicode/norm" ) @@ -87,6 +89,13 @@ func normalizeString(in string, spaceTbl, ditchTbl map[rune]struct{}) string { return string(result) } +// Normalize string. +// +// Normalizes the string to NFC and ditches any zero-width whitespace. +func NormalizeString(in string) string { + return normalizeString(in, map[rune]struct{}{}, unicodeWhitespaceDitch) +} + // Whitespace normalize string. // // Normalizes the string to NFC and replaces all non-line-breaking Unicode @@ -94,3 +103,44 @@ func normalizeString(in string, spaceTbl, ditchTbl map[rune]struct{}) string { func WhitespaceNormalizeString(in string) string { return normalizeString(in, unicodeWhitespaceRepl, unicodeWhitespaceDitch) } + +// Whitespace normalize line. +// +// Normalizes the string to NFC and replaces all Unicode whitespace characters +// with regular spaces. +func WhitespaceNormalizeLine(in string) string { + return normalizeString(in, unicodeWhitespaceLineRepl, unicodeWhitespaceDitch) +} + +// Trim whitespace normalize line. +// +// Normalizes the string to NFC and replaces all Unicode whitespace characters +// with regular spaces, trimming the final result. +func TrimWhitespaceNormalizeLine(in string) string { + return strings.TrimSpace(WhitespaceNormalizeLine(in)) +} + +// Trim single-whitespace normalize line. +// +// Normalizes the string to NFC and replaces all Unicode whitespace characters +// with regular spaces, trimming the final result. Multiple whitespaces are +// combined into one whitespace. +func TrimSingleWhitespaceNormalizeLine(in string) string { + norm := TrimWhitespaceNormalizeLine(in) + result := make([]rune, 0, len(norm)) + + lastWs := false + for _, r := range norm { + if r == ' ' { + if !lastWs { + result = append(result, r) + lastWs = true + } + } else { + lastWs = false + result = append(result, r) + } + } + + return string(result) +} diff --git a/core/block/service.go b/core/block/service.go index 8a0c4dc23..212d40e47 100644 --- a/core/block/service.go +++ b/core/block/service.go @@ -25,6 +25,7 @@ import ( "github.com/anytypeio/go-anytype-middleware/core/block/editor/collection" "github.com/anytypeio/go-anytype-middleware/core/block/editor/dataview" "github.com/anytypeio/go-anytype-middleware/core/block/editor/file" + _import "github.com/anytypeio/go-anytype-middleware/core/block/editor/import" "github.com/anytypeio/go-anytype-middleware/core/block/editor/smartblock" "github.com/anytypeio/go-anytype-middleware/core/block/editor/state" "github.com/anytypeio/go-anytype-middleware/core/block/editor/stext" @@ -66,12 +67,18 @@ const ( var ( ErrBlockNotFound = errors.New("block not found") + ErrBlockAlreadyOpen = errors.New("block already open") ErrUnexpectedBlockType = errors.New("unexpected block type") ErrUnknownObjectType = fmt.Errorf("unknown object type") ) var log = logging.Logger("anytype-mw-service") +var ( + blockCacheTTL = time.Minute + blockCleanupTimeout = time.Second * 30 +) + var ( // quick fix for limiting file upload goroutines uploadFilesLimiter = make(chan struct{}, 8) @@ -689,6 +696,26 @@ func (s *Service) ObjectsDuplicate(ids []string) (newIds []string, err error) { return nil, merr.ErrorOrNil() } +func (s *Service) DeleteArchivedObject(id string) (err error) { + return s.Do(s.anytype.PredefinedBlocks().Archive, func(b smartblock.SmartBlock) error { + archive, ok := b.(collection.Collection) + if !ok { + return fmt.Errorf("unexpected archive block type: %T", b) + } + + if exists, _ := archive.HasObject(id); exists { + if err = s.DeleteObject(id); err == nil { + err = archive.RemoveObject(id) + if err != nil { + return err + } + } + } + + return nil + }) +} + func (s *Service) AddCreatorInfoIfNeeded(workspaceId string) error { if s.Anytype().PredefinedBlocks().IsAccount(workspaceId) { return nil @@ -1134,11 +1161,11 @@ func (s *Service) newSmartBlock(id string, initCtx *smartblock.InitContext) (sb } switch sc.Type() { case model.SmartBlockType_Page, model.SmartBlockType_Date: - sb = editor.NewPage(s, s, s.bookmark) + sb = editor.NewPage(s, s, s, s.bookmark) case model.SmartBlockType_Archive: sb = editor.NewArchive(s) case model.SmartBlockType_Home: - sb = editor.NewDashboard(s) + sb = editor.NewDashboard(s, s) case model.SmartBlockType_Set: sb = editor.NewSet() case model.SmartBlockType_ProfilePage, model.SmartBlockType_AnytypeProfile: @@ -1159,9 +1186,9 @@ func (s *Service) newSmartBlock(id string, initCtx *smartblock.InitContext) (sb case model.SmartBlockType_MarketplaceTemplate: sb = editor.NewMarketplaceTemplate() case model.SmartBlockType_Template: - sb = editor.NewTemplate(s, s, s.bookmark) + sb = editor.NewTemplate(s, s, s, s.bookmark) case model.SmartBlockType_BundledTemplate: - sb = editor.NewTemplate(s, s, s.bookmark) + sb = editor.NewTemplate(s, s, s, s.bookmark) case model.SmartBlockType_Breadcrumbs: sb = editor.NewBreadcrumbs() case model.SmartBlockType_Workspace: @@ -1311,6 +1338,21 @@ func (s *Service) DoHistory(id string, apply func(b basic.IHistory) error) error return fmt.Errorf("undo operation not available for this block type: %T", sb) } +func (s *Service) DoImport(id string, apply func(b _import.Import) error) error { + sb, release, err := s.pickBlock(context.WithValue(context.TODO(), metrics.CtxKeyRequest, "do_import"), id) + if err != nil { + return err + } + defer release() + if bb, ok := sb.(_import.Import); ok { + sb.Lock() + defer sb.Unlock() + return apply(bb) + } + + return fmt.Errorf("import operation not available for this block type: %T", sb) +} + func (s *Service) DoDataview(id string, apply func(b dataview.Dataview) error) error { sb, release, err := s.pickBlock(context.WithValue(context.TODO(), metrics.CtxKeyRequest, "do_dataview"), id) if err != nil { diff --git a/core/block/simple/dataview/dataview.go b/core/block/simple/dataview/dataview.go index edfa133ed..fa8c89e48 100644 --- a/core/block/simple/dataview/dataview.go +++ b/core/block/simple/dataview/dataview.go @@ -11,6 +11,7 @@ import ( "github.com/anytypeio/go-anytype-middleware/core/block/simple" "github.com/anytypeio/go-anytype-middleware/core/block/simple/base" "github.com/anytypeio/go-anytype-middleware/pb" + "github.com/anytypeio/go-anytype-middleware/pkg/lib/localstore/addr" "github.com/anytypeio/go-anytype-middleware/pkg/lib/pb/model" "github.com/anytypeio/go-anytype-middleware/util/pbtypes" "github.com/anytypeio/go-anytype-middleware/util/slice" @@ -56,6 +57,9 @@ type Block interface { SetSource(source []string) error SetActiveView(activeView string) + FillSmartIds(ids []string) []string + HasSmartIds() bool + // AddRelationOld DEPRECATED AddRelationOld(relation model.Relation) // UpdateRelationOld DEPRECATED @@ -306,6 +310,26 @@ func (s *Dataview) SetView(viewID string, view model.BlockContentDataviewView) e return nil } +func (l *Dataview) getActiveView() *model.BlockContentDataviewView { + for i, view := range l.GetDataview().Views { + if view.Id == l.content.ActiveView { + return l.GetDataview().Views[i] + } + } + return nil +} + +func (l *Dataview) FillSmartIds(ids []string) []string { + for _, rl := range l.content.RelationLinks { + ids = append(ids, addr.RelationKeyToIdPrefix+rl.Key) + } + return ids +} + +func (l *Dataview) HasSmartIds() bool { + return len(l.content.RelationLinks) > 0 +} + func (d *Dataview) AddRelation(relation *model.RelationLink) error { if pbtypes.RelationLinks(d.content.RelationLinks).Has(relation.Key) { return ErrRelationExists @@ -481,3 +505,13 @@ func (s *Dataview) UpdateRelationOld(relationKey string, rel model.Relation) err return nil } + +func (l *Dataview) relationsWithObjectFormat() []string { + var relationsWithObjFormat []string + for _, rel := range l.GetDataview().Relations { + if rel.Format == model.RelationFormat_file || rel.Format == model.RelationFormat_object { + relationsWithObjFormat = append(relationsWithObjFormat, rel.Key) + } + } + return relationsWithObjFormat +} diff --git a/core/block/simple/text/text.go b/core/block/simple/text/text.go index 6225db1de..9a28b5281 100644 --- a/core/block/simple/text/text.go +++ b/core/block/simple/text/text.go @@ -54,12 +54,14 @@ type Block interface { SetIconEmoji(emoji string) SetIconImage(imageHash string) + Split(pos int32) (simple.Block, error) RangeSplit(from int32, to int32, top bool) (newBlock simple.Block, err error) RangeTextPaste(rangeFrom int32, rangeTo int32, copiedBlock *model.Block, isPartOfBlock bool) (caretPosition int32, err error) RangeCut(from int32, to int32) (cutBlock *model.Block, initialBlock *model.Block, err error) Merge(b simple.Block, opts ...MergeOption) error SplitMarks(textRange *model.Range, newMarks []*model.BlockContentTextMark, newText string) (combinedMarks []*model.BlockContentTextMark) FillSmartIds(ids []string) []string + HasSmartIds() bool ApplyEvent(e *pb.EventBlockSetText) error IsEmpty() bool @@ -249,6 +251,53 @@ func (t *Text) GetText() (text string) { return t.content.Text } +func (t *Text) Split(pos int32) (simple.Block, error) { + if pos < 0 || int(pos) > textutil.UTF16RuneCountString(t.content.Text) { + return nil, ErrOutOfRange + } + runes := textutil.StrToUTF16(t.content.Text) + t.content.Text = textutil.UTF16ToStr(runes[pos:]) + if t.content.Marks == nil { + t.content.Marks = &model.BlockContentTextMarks{} + } + newMarks := &model.BlockContentTextMarks{} + oldMarks := &model.BlockContentTextMarks{} + for _, mark := range t.content.Marks.Marks { + if mark.Range.From >= pos { + mark.Range.From -= pos + mark.Range.To -= pos + newMarks.Marks = append(newMarks.Marks, mark) + } else if mark.Range.To <= pos { + oldMarks.Marks = append(oldMarks.Marks, mark) + } else { + newMark := &model.BlockContentTextMark{ + Range: &model.Range{ + From: 0, + To: mark.Range.To - pos, + }, + Type: mark.Type, + Param: mark.Param, + } + newMarks.Marks = append(newMarks.Marks, newMark) + mark.Range.To = pos + oldMarks.Marks = append(oldMarks.Marks, mark) + } + } + t.content.Marks = newMarks + newBlock := simple.New(&model.Block{ + Content: &model.BlockContentOfText{Text: &model.BlockContentText{ + Text: textutil.UTF16ToStr(runes[:pos]), + Style: t.content.Style, + Marks: oldMarks, + Checked: t.content.Checked, + Color: t.content.Color, + }}, + BackgroundColor: t.BackgroundColor, + Align: t.Align, + }) + return newBlock, nil +} + func (t *Text) RangeTextPaste(rangeFrom int32, rangeTo int32, copiedBlock *model.Block, isPartOfBlock bool) (caretPosition int32, err error) { caretPosition = -1 copiedText := copiedBlock.GetText() @@ -599,6 +648,17 @@ func (t *Text) FillSmartIds(ids []string) []string { return ids } +func (t *Text) HasSmartIds() bool { + if t.content.Marks != nil { + for _, m := range t.content.Marks.Marks { + if m.Type == model.BlockContentTextMark_Mention || m.Type == model.BlockContentTextMark_Object { + return true + } + } + } + return false +} + func (t *Text) ApplyEvent(e *pb.EventBlockSetText) error { if e.Style != nil { t.content.Style = e.Style.GetValue() diff --git a/core/block/simple/text/text_test.go b/core/block/simple/text/text_test.go index c2f0a3b02..5a9c1b3ef 100644 --- a/core/block/simple/text/text_test.go +++ b/core/block/simple/text/text_test.go @@ -64,6 +64,71 @@ func TestText_Diff(t *testing.T) { }) } +func TestText_Split(t *testing.T) { + testBlock := func() *Text { + return NewText(&model.Block{ + Restrictions: &model.BlockRestrictions{}, + Content: &model.BlockContentOfText{Text: &model.BlockContentText{ + Text: "1234567890", + Marks: &model.BlockContentTextMarks{ + Marks: []*model.BlockContentTextMark{ + { + Type: model.BlockContentTextMark_Bold, + Range: &model.Range{ + From: 0, + To: 10, + }, + }, + { + Type: model.BlockContentTextMark_Italic, + Range: &model.Range{ + From: 6, + To: 10, + }, + }, + { + Type: model.BlockContentTextMark_BackgroundColor, + Range: &model.Range{ + From: 3, + To: 4, + }, + }, + }, + }, + }}, + }).(*Text) + } + t.Run("should split block", func(t *testing.T) { + b := testBlock() + newBlock, err := b.Split(5) + require.NoError(t, err) + nb := newBlock.(*Text) + assert.Equal(t, "12345", nb.content.Text) + assert.Equal(t, "67890", b.content.Text) + require.Len(t, b.content.Marks.Marks, 2) + require.Len(t, nb.content.Marks.Marks, 2) + assert.Equal(t, model.Range{0, 5}, *nb.content.Marks.Marks[0].Range) + assert.Equal(t, model.Range{3, 4}, *nb.content.Marks.Marks[1].Range) + assert.Equal(t, model.Range{0, 5}, *b.content.Marks.Marks[0].Range) + assert.Equal(t, model.Range{1, 5}, *b.content.Marks.Marks[1].Range) + }) + t.Run("out of range", func(t *testing.T) { + b := testBlock() + _, err := b.Split(11) + require.Equal(t, ErrOutOfRange, err) + }) + t.Run("start pos", func(t *testing.T) { + b := testBlock() + _, err := b.Split(0) + require.NoError(t, err) + }) + t.Run("end pos", func(t *testing.T) { + b := testBlock() + _, err := b.Split(10) + require.NoError(t, err) + }) +} + func TestText_RangeSplit(t *testing.T) { testBlock := func() *Text { return NewText(&model.Block{ diff --git a/core/block/source/anytypeprofile.go b/core/block/source/anytypeprofile.go index 067961e89..fc21874e0 100644 --- a/core/block/source/anytypeprofile.go +++ b/core/block/source/anytypeprofile.go @@ -74,6 +74,15 @@ func (v *anytypeProfile) ReadDoc(ctx context.Context, receiver ChangeReceiver, e return s, nil } +func (v *anytypeProfile) ReadMeta(ctx context.Context, _ ChangeReceiver) (doc state.Doc, err error) { + s := &state.State{} + d := v.getDetails() + + s.SetDetails(d) + s.SetObjectType(bundle.TypeKeyProfile.URL()) + return s, nil +} + func (v *anytypeProfile) PushChange(params PushChangeParams) (id string, err error) { return "", nil } diff --git a/core/block/source/bundledobjecttype.go b/core/block/source/bundledobjecttype.go index 54fe6394d..6b1926cb7 100644 --- a/core/block/source/bundledobjecttype.go +++ b/core/block/source/bundledobjecttype.go @@ -75,6 +75,10 @@ func (v *bundledObjectType) ReadDoc(ctx context.Context, receiver ChangeReceiver return s, nil } +func (v *bundledObjectType) ReadMeta(ctx context.Context, _ ChangeReceiver) (doc state.Doc, err error) { + return v.ReadDoc(ctx, nil, false) +} + func (v *bundledObjectType) PushChange(params PushChangeParams) (id string, err error) { return "", nil } diff --git a/core/block/source/bundledrelation.go b/core/block/source/bundledrelation.go index a6cff44bd..37e480818 100644 --- a/core/block/source/bundledrelation.go +++ b/core/block/source/bundledrelation.go @@ -81,6 +81,10 @@ func (v *bundledRelation) ReadDoc(_ context.Context, _ ChangeReceiver, empty boo return s, nil } +func (v *bundledRelation) ReadMeta(ctx context.Context, _ ChangeReceiver) (doc state.Doc, err error) { + return v.ReadDoc(ctx, nil, false) +} + func (v *bundledRelation) PushChange(params PushChangeParams) (id string, err error) { if params.State.ChangeId() == "" { // allow the first changes created by Init diff --git a/core/block/source/date.go b/core/block/source/date.go index 3a75af6c2..ed660124e 100644 --- a/core/block/source/date.go +++ b/core/block/source/date.go @@ -96,6 +96,18 @@ func (v *date) ReadDoc(ctx context.Context, receiver ChangeReceiver, empty bool) return s, nil } +func (v *date) ReadMeta(ctx context.Context, _ ChangeReceiver) (doc state.Doc, err error) { + if err = v.parseId(); err != nil { + return + } + s := &state.State{} + d := v.getDetails() + + s.SetDetails(d) + s.SetObjectType(bundle.TypeKeyDate.URL()) + return s, nil +} + func (v *date) PushChange(params PushChangeParams) (id string, err error) { return "", nil } diff --git a/core/block/source/files.go b/core/block/source/files.go index 08d7950b5..bce01a073 100644 --- a/core/block/source/files.go +++ b/core/block/source/files.go @@ -96,6 +96,26 @@ func (v *files) ReadDoc(ctx context.Context, receiver ChangeReceiver, empty bool return s, nil } +func (v *files) ReadMeta(ctx context.Context, _ ChangeReceiver) (doc state.Doc, err error) { + s := &state.State{} + + ctx, cancel := context.WithTimeout(context.Background(), getFileTimeout) + defer cancel() + + d, _, err := getDetailsForFileOrImage(ctx, v.a, v.id) + if err != nil { + if err == core.ErrFileNotIndexable { + return s, nil + } + return nil, err + } + + s.SetDetails(d) + s.SetLocalDetail(bundle.RelationKeyId.String(), pbtypes.String(v.id)) + s.SetObjectTypes(pbtypes.GetStringList(d, bundle.RelationKeyType.String())) + return s, nil +} + func (v *files) PushChange(params PushChangeParams) (id string, err error) { return "", nil } diff --git a/core/block/source/service.go b/core/block/source/service.go index 5664f9e4e..6b4c45d62 100644 --- a/core/block/source/service.go +++ b/core/block/source/service.go @@ -27,8 +27,8 @@ type Service interface { RegisterStaticSource(id string, new func() Source) NewStaticSource(id string, sbType model.SmartBlockType, doc *state.State, pushChange func(p PushChangeParams) (string, error)) SourceWithType RemoveStaticSource(id string) - GetDetailsFromIDBasedSource(id string) (*types.Struct, error) + GetDetailsFromIdBasedSource(id string) (*types.Struct, error) SourceTypeBySbType(blockType smartblock.SmartBlockType) (SourceType, error) app.Component } @@ -89,19 +89,7 @@ func (s *service) NewSource(id string, listenToOwnChanges bool) (source Source, return newSource(s.anytype, s.statusService, tid, listenToOwnChanges) } -func (s *service) RegisterStaticSource(id string, new func() Source) { - s.mu.Lock() - defer s.mu.Unlock() - s.staticIds[id] = new -} - -func (s *service) RemoveStaticSource(id string) { - s.mu.Lock() - defer s.mu.Unlock() - delete(s.staticIds, id) -} - -func (s *service) GetDetailsFromIDBasedSource(id string) (*types.Struct, error) { +func (s *service) GetDetailsFromIdBasedSource(id string) (*types.Struct, error) { ss, err := s.NewSource(id, false) if err != nil { return nil, err @@ -113,3 +101,15 @@ func (s *service) GetDetailsFromIDBasedSource(id string) (*types.Struct, error) _ = ss.Close() return nil, fmt.Errorf("id unsupported") } + +func (s *service) RegisterStaticSource(id string, new func() Source) { + s.mu.Lock() + defer s.mu.Unlock() + s.staticIds[id] = new +} + +func (s *service) RemoveStaticSource(id string) { + s.mu.Lock() + defer s.mu.Unlock() + delete(s.staticIds, id) +} diff --git a/core/block/source/source.go b/core/block/source/source.go index 1c4cc3f5f..a2329b982 100644 --- a/core/block/source/source.go +++ b/core/block/source/source.go @@ -47,6 +47,7 @@ type Source interface { GetFileKeysSnapshot() []*pb.ChangeFileKeys ReadOnly() bool ReadDoc(ctx context.Context, receiver ChangeReceiver, empty bool) (doc state.Doc, err error) + ReadMeta(ctx context.Context, receiver ChangeReceiver) (doc state.Doc, err error) PushChange(params PushChangeParams) (id string, err error) FindFirstChange(ctx context.Context) (c *change.Change, err error) Close() (err error) @@ -164,6 +165,11 @@ func (s *source) Virtual() bool { return false } +func (s *source) ReadMeta(ctx context.Context, receiver ChangeReceiver) (doc state.Doc, err error) { + s.metaOnly = true + return s.readDoc(ctx, receiver, false) +} + func (s *source) ReadDoc(ctx context.Context, receiver ChangeReceiver, allowEmpty bool) (doc state.Doc, err error) { return s.readDoc(ctx, receiver, allowEmpty) } diff --git a/core/block/source/static.go b/core/block/source/static.go index 73a1ea736..f124dfeb0 100644 --- a/core/block/source/static.go +++ b/core/block/source/static.go @@ -55,6 +55,10 @@ func (s *static) ReadDoc(ctx context.Context, receiver ChangeReceiver, empty boo return s.doc, nil } +func (s *static) ReadMeta(ctx context.Context, receiver ChangeReceiver) (doc state.Doc, err error) { + return s.doc, nil +} + func (s *static) PushChange(params PushChangeParams) (id string, err error) { if s.pushChange != nil { return s.pushChange(params) diff --git a/core/block/source/threaddb.go b/core/block/source/threaddb.go index caebcf939..588ab259d 100644 --- a/core/block/source/threaddb.go +++ b/core/block/source/threaddb.go @@ -88,6 +88,10 @@ func (v *threadDB) ReadDoc(ctx context.Context, receiver ChangeReceiver, empty b return s, nil } +func (v *threadDB) ReadMeta(ctx context.Context, _ ChangeReceiver) (doc state.Doc, err error) { + return v.createState() +} + func (v *threadDB) PushChange(params PushChangeParams) (id string, err error) { return "", nil } diff --git a/core/block/source/virtual.go b/core/block/source/virtual.go index db8ceaaf0..85501dfd6 100644 --- a/core/block/source/virtual.go +++ b/core/block/source/virtual.go @@ -51,6 +51,10 @@ func (v *virtual) ReadDoc(ctx context.Context, eceiver ChangeReceiver, empty boo return state.NewDoc(v.id, nil), nil } +func (v *virtual) ReadMeta(ctx context.Context, _ ChangeReceiver) (doc state.Doc, err error) { + return state.NewDoc(v.id, nil), nil +} + func (v *virtual) PushChange(params PushChangeParams) (id string, err error) { return "", nil } diff --git a/core/converter/graphjson/graphjson.go b/core/converter/graphjson/graphjson.go index f683de8b2..79d99a557 100644 --- a/core/converter/graphjson/graphjson.go +++ b/core/converter/graphjson/graphjson.go @@ -22,6 +22,13 @@ const ( EdgeTypeLink ) +type linkInfo struct { + target string + edgeType edgeType + name string + full string +} + type Node struct { Id string `json:"id,omitempty"` Type string `json:"type,omitempty"` diff --git a/core/debug/debugtree/debugtree.go b/core/debug/debugtree/debugtree.go index ba7fbd5ee..c0d68f42f 100644 --- a/core/debug/debugtree/debugtree.go +++ b/core/debug/debugtree/debugtree.go @@ -56,6 +56,7 @@ type DebugTree interface { Stats() DebugTreeStats LocalStore() (*model.ObjectInfo, error) BuildStateByTree(t *change.Tree) (*state.State, error) + BuildState() (*state.State, error) Close() error } @@ -197,6 +198,14 @@ func (r *debugTree) Stats() (s DebugTreeStats) { return } +func (r *debugTree) BuildState() (*state.State, error) { + t, _, err := change.BuildTree(context.TODO(), r) + if err != nil { + return nil, err + } + return r.BuildStateByTree(t) +} + func (r *debugTree) BuildStateByTree(t *change.Tree) (*state.State, error) { root := t.Root() if root == nil || root.GetSnapshot() == nil { diff --git a/core/debug/treebuilder.go b/core/debug/treebuilder.go index 93d190222..695e76440 100644 --- a/core/debug/treebuilder.go +++ b/core/debug/treebuilder.go @@ -123,6 +123,16 @@ func (b *treeBuilder) writeChanges(logs []core.SmartblockLog) (err error) { return } +func createFileWithDateInZip(zw *zip.Writer, name string, modified time.Time) (io.Writer, error) { + header := &zip.FileHeader{ + Name: name, + Method: zip.Deflate, + Modified: modified, + } + + return zw.CreateHeader(header) +} + func (b *treeBuilder) writeChange(id string) (nextIds []string) { if _, ok := b.changes[id]; ok { return diff --git a/core/relation/relationutils/relation.go b/core/relation/relationutils/relation.go index cc06411ae..0ed68a132 100644 --- a/core/relation/relationutils/relation.go +++ b/core/relation/relationutils/relation.go @@ -94,6 +94,13 @@ func (rs Relations) GetByKey(key string) *Relation { return nil } +func (rs Relations) GetModelByKey(key string) *model.Relation { + if r := rs.GetByKey(key); r != nil { + return r.Relation + } + return nil +} + func MigrateRelationModels(rels []*model.Relation) (relLinks []*model.RelationLink) { relLinks = make([]*model.RelationLink, 0, len(rels)) for _, rel := range rels { diff --git a/core/relation/service.go b/core/relation/service.go index c9486c762..212a4e959 100644 --- a/core/relation/service.go +++ b/core/relation/service.go @@ -7,6 +7,7 @@ import ( "strings" "sync" + "github.com/globalsign/mgo/bson" "github.com/gogo/protobuf/types" "github.com/ipfs/go-datastore/query" @@ -27,6 +28,7 @@ const blockServiceCName = "blockService" var ( ErrNotFound = errors.New("relation not found") + ErrExists = errors.New("relation with given key already exists") log = logging.Logger("anytype-relations") ) @@ -423,3 +425,7 @@ func (s *service) validateOptions(rel *relationutils.Relation, v []string) error //TODO: return nil } + +func generateRelationKey() string { + return bson.NewObjectId().Hex() +} diff --git a/core/subscription/service.go b/core/subscription/service.go index 42d8233ae..628878abf 100644 --- a/core/subscription/service.go +++ b/core/subscription/service.go @@ -40,8 +40,10 @@ func New() Service { type Service interface { Search(req pb.RpcObjectSearchSubscribeRequest) (resp *pb.RpcObjectSearchSubscribeResponse, err error) SubscribeIdsReq(req pb.RpcObjectSubscribeIdsRequest) (resp *pb.RpcObjectSubscribeIdsResponse, err error) + SubscribeIds(subId string, ids []string) (records []*types.Struct, err error) SubscribeGroups(req pb.RpcObjectGroupsSubscribeRequest) (*pb.RpcObjectGroupsSubscribeResponse, error) Unsubscribe(subIds ...string) (err error) + UnsubscribeAll() (err error) app.ComponentRunnable } @@ -288,6 +290,10 @@ func (s *service) SubscribeGroups(req pb.RpcObjectGroupsSubscribeRequest) (*pb.R }, nil } +func (s *service) SubscribeIds(subId string, ids []string) (records []*types.Struct, err error) { + return +} + func (s *service) Unsubscribe(subIds ...string) (err error) { s.m.Lock() defer s.m.Unlock() @@ -300,6 +306,16 @@ func (s *service) Unsubscribe(subIds ...string) (err error) { return } +func (s *service) UnsubscribeAll() (err error) { + s.m.Lock() + defer s.m.Unlock() + for _, sub := range s.subscriptions { + sub.close() + } + s.subscriptions = make(map[string]subscription) + return +} + func (s *service) recordsHandler() { var entries []*entry nilIfExists := func(id string) { diff --git a/pb/commands.pb.go b/pb/commands.pb.go index 14ed84e93..9950fc4d2 100644 --- a/pb/commands.pb.go +++ b/pb/commands.pb.go @@ -1379,6 +1379,34 @@ func (RpcObjectSetBreadcrumbsResponseErrorCode) EnumDescriptor() ([]byte, []int) return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 13, 1, 0, 0} } +type RpcObjectImportMarkdownResponseErrorCode int32 + +const ( + RpcObjectImportMarkdownResponseError_NULL RpcObjectImportMarkdownResponseErrorCode = 0 + RpcObjectImportMarkdownResponseError_UNKNOWN_ERROR RpcObjectImportMarkdownResponseErrorCode = 1 + RpcObjectImportMarkdownResponseError_BAD_INPUT RpcObjectImportMarkdownResponseErrorCode = 2 +) + +var RpcObjectImportMarkdownResponseErrorCode_name = map[int32]string{ + 0: "NULL", + 1: "UNKNOWN_ERROR", + 2: "BAD_INPUT", +} + +var RpcObjectImportMarkdownResponseErrorCode_value = map[string]int32{ + "NULL": 0, + "UNKNOWN_ERROR": 1, + "BAD_INPUT": 2, +} + +func (x RpcObjectImportMarkdownResponseErrorCode) String() string { + return proto.EnumName(RpcObjectImportMarkdownResponseErrorCode_name, int32(x)) +} + +func (RpcObjectImportMarkdownResponseErrorCode) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 14, 1, 0, 0} +} + type RpcObjectShareByLinkResponseErrorCode int32 const ( @@ -1404,7 +1432,7 @@ func (x RpcObjectShareByLinkResponseErrorCode) String() string { } func (RpcObjectShareByLinkResponseErrorCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 14, 1, 0, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 15, 1, 0, 0} } type RpcObjectAddWithObjectIdResponseErrorCode int32 @@ -1432,7 +1460,7 @@ func (x RpcObjectAddWithObjectIdResponseErrorCode) String() string { } func (RpcObjectAddWithObjectIdResponseErrorCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 15, 1, 0, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 16, 1, 0, 0} } type RpcObjectSearchResponseErrorCode int32 @@ -1460,7 +1488,7 @@ func (x RpcObjectSearchResponseErrorCode) String() string { } func (RpcObjectSearchResponseErrorCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 16, 1, 0, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 17, 1, 0, 0} } type RpcObjectGraphEdgeType int32 @@ -1485,7 +1513,7 @@ func (x RpcObjectGraphEdgeType) String() string { } func (RpcObjectGraphEdgeType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 17, 1, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 18, 1, 0} } type RpcObjectGraphResponseErrorCode int32 @@ -1513,7 +1541,7 @@ func (x RpcObjectGraphResponseErrorCode) String() string { } func (RpcObjectGraphResponseErrorCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 17, 2, 0, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 18, 2, 0, 0} } type RpcObjectSearchSubscribeResponseErrorCode int32 @@ -1541,7 +1569,7 @@ func (x RpcObjectSearchSubscribeResponseErrorCode) String() string { } func (RpcObjectSearchSubscribeResponseErrorCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 18, 1, 0, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 19, 1, 0, 0} } type RpcObjectGroupsSubscribeResponseErrorCode int32 @@ -1569,7 +1597,7 @@ func (x RpcObjectGroupsSubscribeResponseErrorCode) String() string { } func (RpcObjectGroupsSubscribeResponseErrorCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 19, 1, 0, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 20, 1, 0, 0} } type RpcObjectSubscribeIdsResponseErrorCode int32 @@ -1597,7 +1625,7 @@ func (x RpcObjectSubscribeIdsResponseErrorCode) String() string { } func (RpcObjectSubscribeIdsResponseErrorCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 20, 1, 0, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 21, 1, 0, 0} } type RpcObjectSearchUnsubscribeResponseErrorCode int32 @@ -1625,7 +1653,7 @@ func (x RpcObjectSearchUnsubscribeResponseErrorCode) String() string { } func (RpcObjectSearchUnsubscribeResponseErrorCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 21, 1, 0, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 22, 1, 0, 0} } type RpcObjectSetLayoutResponseErrorCode int32 @@ -1653,7 +1681,7 @@ func (x RpcObjectSetLayoutResponseErrorCode) String() string { } func (RpcObjectSetLayoutResponseErrorCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 22, 1, 0, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 23, 1, 0, 0} } type RpcObjectSetIsFavoriteResponseErrorCode int32 @@ -1681,7 +1709,7 @@ func (x RpcObjectSetIsFavoriteResponseErrorCode) String() string { } func (RpcObjectSetIsFavoriteResponseErrorCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 23, 1, 0, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 24, 1, 0, 0} } type RpcObjectSetIsArchivedResponseErrorCode int32 @@ -1709,7 +1737,7 @@ func (x RpcObjectSetIsArchivedResponseErrorCode) String() string { } func (RpcObjectSetIsArchivedResponseErrorCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 24, 1, 0, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 25, 1, 0, 0} } type RpcObjectSetObjectTypeResponseErrorCode int32 @@ -1740,7 +1768,7 @@ func (x RpcObjectSetObjectTypeResponseErrorCode) String() string { } func (RpcObjectSetObjectTypeResponseErrorCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 25, 1, 0, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 26, 1, 0, 0} } type RpcObjectSetInternalFlagsResponseErrorCode int32 @@ -1771,7 +1799,7 @@ func (x RpcObjectSetInternalFlagsResponseErrorCode) String() string { } func (RpcObjectSetInternalFlagsResponseErrorCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 26, 1, 0, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 27, 1, 0, 0} } type RpcObjectSetDetailsResponseErrorCode int32 @@ -1799,7 +1827,7 @@ func (x RpcObjectSetDetailsResponseErrorCode) String() string { } func (RpcObjectSetDetailsResponseErrorCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 27, 2, 0, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 28, 2, 0, 0} } type RpcObjectToSetResponseErrorCode int32 @@ -1827,7 +1855,7 @@ func (x RpcObjectToSetResponseErrorCode) String() string { } func (RpcObjectToSetResponseErrorCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 28, 1, 0, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 29, 1, 0, 0} } type RpcObjectUndoResponseErrorCode int32 @@ -1858,7 +1886,7 @@ func (x RpcObjectUndoResponseErrorCode) String() string { } func (RpcObjectUndoResponseErrorCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 30, 1, 0, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 31, 1, 0, 0} } type RpcObjectRedoResponseErrorCode int32 @@ -1889,7 +1917,7 @@ func (x RpcObjectRedoResponseErrorCode) String() string { } func (RpcObjectRedoResponseErrorCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 31, 1, 0, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 32, 1, 0, 0} } type RpcObjectListDuplicateResponseErrorCode int32 @@ -1917,7 +1945,7 @@ func (x RpcObjectListDuplicateResponseErrorCode) String() string { } func (RpcObjectListDuplicateResponseErrorCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 32, 1, 0, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 33, 1, 0, 0} } type RpcObjectListDeleteResponseErrorCode int32 @@ -1945,7 +1973,7 @@ func (x RpcObjectListDeleteResponseErrorCode) String() string { } func (RpcObjectListDeleteResponseErrorCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 33, 1, 0, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 34, 1, 0, 0} } type RpcObjectListSetIsArchivedResponseErrorCode int32 @@ -1973,7 +2001,7 @@ func (x RpcObjectListSetIsArchivedResponseErrorCode) String() string { } func (RpcObjectListSetIsArchivedResponseErrorCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 34, 1, 0, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 35, 1, 0, 0} } type RpcObjectListSetIsFavoriteResponseErrorCode int32 @@ -2001,7 +2029,7 @@ func (x RpcObjectListSetIsFavoriteResponseErrorCode) String() string { } func (RpcObjectListSetIsFavoriteResponseErrorCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 35, 1, 0, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 36, 1, 0, 0} } type RpcObjectApplyTemplateResponseErrorCode int32 @@ -2029,7 +2057,7 @@ func (x RpcObjectApplyTemplateResponseErrorCode) String() string { } func (RpcObjectApplyTemplateResponseErrorCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 36, 1, 0, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 37, 1, 0, 0} } type RpcObjectListExportFormat int32 @@ -2066,7 +2094,7 @@ func (x RpcObjectListExportFormat) String() string { } func (RpcObjectListExportFormat) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 37, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 38, 0} } type RpcObjectListExportResponseErrorCode int32 @@ -2094,7 +2122,7 @@ func (x RpcObjectListExportResponseErrorCode) String() string { } func (RpcObjectListExportResponseErrorCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 37, 1, 0, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 38, 1, 0, 0} } type RpcObjectImportRequestMode int32 @@ -2119,7 +2147,7 @@ func (x RpcObjectImportRequestMode) String() string { } func (RpcObjectImportRequestMode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 38, 0, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 39, 0, 0} } type RpcObjectImportRequestType int32 @@ -2144,7 +2172,7 @@ func (x RpcObjectImportRequestType) String() string { } func (RpcObjectImportRequestType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 38, 0, 1} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 39, 0, 1} } type RpcObjectImportResponseErrorCode int32 @@ -2175,7 +2203,7 @@ func (x RpcObjectImportResponseErrorCode) String() string { } func (RpcObjectImportResponseErrorCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 38, 1, 0, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 39, 1, 0, 0} } type RpcObjectImportListResponseErrorCode int32 @@ -2206,21 +2234,24 @@ func (x RpcObjectImportListResponseErrorCode) String() string { } func (RpcObjectImportListResponseErrorCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 39, 1, 0, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 40, 1, 0, 0} } type RpcObjectImportListImportResponseType int32 const ( - RpcObjectImportListImportResponse_Notion RpcObjectImportListImportResponseType = 0 + RpcObjectImportListImportResponse_Notion RpcObjectImportListImportResponseType = 0 + RpcObjectImportListImportResponse_Markdown RpcObjectImportListImportResponseType = 1 ) var RpcObjectImportListImportResponseType_name = map[int32]string{ 0: "Notion", + 1: "Markdown", } var RpcObjectImportListImportResponseType_value = map[string]int32{ - "Notion": 0, + "Notion": 0, + "Markdown": 1, } func (x RpcObjectImportListImportResponseType) String() string { @@ -2228,7 +2259,7 @@ func (x RpcObjectImportListImportResponseType) String() string { } func (RpcObjectImportListImportResponseType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 39, 2, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 40, 2, 0} } type RpcObjectRelationAddResponseErrorCode int32 @@ -13165,6 +13196,206 @@ func (m *RpcObjectSetBreadcrumbsResponseError) GetDescription() string { return "" } +type RpcObjectImportMarkdown struct { +} + +func (m *RpcObjectImportMarkdown) Reset() { *m = RpcObjectImportMarkdown{} } +func (m *RpcObjectImportMarkdown) String() string { return proto.CompactTextString(m) } +func (*RpcObjectImportMarkdown) ProtoMessage() {} +func (*RpcObjectImportMarkdown) Descriptor() ([]byte, []int) { + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 14} +} +func (m *RpcObjectImportMarkdown) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RpcObjectImportMarkdown) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_RpcObjectImportMarkdown.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *RpcObjectImportMarkdown) XXX_Merge(src proto.Message) { + xxx_messageInfo_RpcObjectImportMarkdown.Merge(m, src) +} +func (m *RpcObjectImportMarkdown) XXX_Size() int { + return m.Size() +} +func (m *RpcObjectImportMarkdown) XXX_DiscardUnknown() { + xxx_messageInfo_RpcObjectImportMarkdown.DiscardUnknown(m) +} + +var xxx_messageInfo_RpcObjectImportMarkdown proto.InternalMessageInfo + +type RpcObjectImportMarkdownRequest struct { + ContextId string `protobuf:"bytes,1,opt,name=contextId,proto3" json:"contextId,omitempty"` + ImportPath string `protobuf:"bytes,2,opt,name=importPath,proto3" json:"importPath,omitempty"` +} + +func (m *RpcObjectImportMarkdownRequest) Reset() { *m = RpcObjectImportMarkdownRequest{} } +func (m *RpcObjectImportMarkdownRequest) String() string { return proto.CompactTextString(m) } +func (*RpcObjectImportMarkdownRequest) ProtoMessage() {} +func (*RpcObjectImportMarkdownRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 14, 0} +} +func (m *RpcObjectImportMarkdownRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RpcObjectImportMarkdownRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_RpcObjectImportMarkdownRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *RpcObjectImportMarkdownRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_RpcObjectImportMarkdownRequest.Merge(m, src) +} +func (m *RpcObjectImportMarkdownRequest) XXX_Size() int { + return m.Size() +} +func (m *RpcObjectImportMarkdownRequest) XXX_DiscardUnknown() { + xxx_messageInfo_RpcObjectImportMarkdownRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_RpcObjectImportMarkdownRequest proto.InternalMessageInfo + +func (m *RpcObjectImportMarkdownRequest) GetContextId() string { + if m != nil { + return m.ContextId + } + return "" +} + +func (m *RpcObjectImportMarkdownRequest) GetImportPath() string { + if m != nil { + return m.ImportPath + } + return "" +} + +type RpcObjectImportMarkdownResponse struct { + Error *RpcObjectImportMarkdownResponseError `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` + RootLinkIds []string `protobuf:"bytes,2,rep,name=rootLinkIds,proto3" json:"rootLinkIds,omitempty"` + Event *ResponseEvent `protobuf:"bytes,3,opt,name=event,proto3" json:"event,omitempty"` +} + +func (m *RpcObjectImportMarkdownResponse) Reset() { *m = RpcObjectImportMarkdownResponse{} } +func (m *RpcObjectImportMarkdownResponse) String() string { return proto.CompactTextString(m) } +func (*RpcObjectImportMarkdownResponse) ProtoMessage() {} +func (*RpcObjectImportMarkdownResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 14, 1} +} +func (m *RpcObjectImportMarkdownResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RpcObjectImportMarkdownResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_RpcObjectImportMarkdownResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *RpcObjectImportMarkdownResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_RpcObjectImportMarkdownResponse.Merge(m, src) +} +func (m *RpcObjectImportMarkdownResponse) XXX_Size() int { + return m.Size() +} +func (m *RpcObjectImportMarkdownResponse) XXX_DiscardUnknown() { + xxx_messageInfo_RpcObjectImportMarkdownResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_RpcObjectImportMarkdownResponse proto.InternalMessageInfo + +func (m *RpcObjectImportMarkdownResponse) GetError() *RpcObjectImportMarkdownResponseError { + if m != nil { + return m.Error + } + return nil +} + +func (m *RpcObjectImportMarkdownResponse) GetRootLinkIds() []string { + if m != nil { + return m.RootLinkIds + } + return nil +} + +func (m *RpcObjectImportMarkdownResponse) GetEvent() *ResponseEvent { + if m != nil { + return m.Event + } + return nil +} + +type RpcObjectImportMarkdownResponseError struct { + Code RpcObjectImportMarkdownResponseErrorCode `protobuf:"varint,1,opt,name=code,proto3,enum=anytype.RpcObjectImportMarkdownResponseErrorCode" json:"code,omitempty"` + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` +} + +func (m *RpcObjectImportMarkdownResponseError) Reset() { *m = RpcObjectImportMarkdownResponseError{} } +func (m *RpcObjectImportMarkdownResponseError) String() string { return proto.CompactTextString(m) } +func (*RpcObjectImportMarkdownResponseError) ProtoMessage() {} +func (*RpcObjectImportMarkdownResponseError) Descriptor() ([]byte, []int) { + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 14, 1, 0} +} +func (m *RpcObjectImportMarkdownResponseError) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RpcObjectImportMarkdownResponseError) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_RpcObjectImportMarkdownResponseError.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *RpcObjectImportMarkdownResponseError) XXX_Merge(src proto.Message) { + xxx_messageInfo_RpcObjectImportMarkdownResponseError.Merge(m, src) +} +func (m *RpcObjectImportMarkdownResponseError) XXX_Size() int { + return m.Size() +} +func (m *RpcObjectImportMarkdownResponseError) XXX_DiscardUnknown() { + xxx_messageInfo_RpcObjectImportMarkdownResponseError.DiscardUnknown(m) +} + +var xxx_messageInfo_RpcObjectImportMarkdownResponseError proto.InternalMessageInfo + +func (m *RpcObjectImportMarkdownResponseError) GetCode() RpcObjectImportMarkdownResponseErrorCode { + if m != nil { + return m.Code + } + return RpcObjectImportMarkdownResponseError_NULL +} + +func (m *RpcObjectImportMarkdownResponseError) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + type RpcObjectShareByLink struct { } @@ -13172,7 +13403,7 @@ func (m *RpcObjectShareByLink) Reset() { *m = RpcObjectShareByLink{} } func (m *RpcObjectShareByLink) String() string { return proto.CompactTextString(m) } func (*RpcObjectShareByLink) ProtoMessage() {} func (*RpcObjectShareByLink) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 14} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 15} } func (m *RpcObjectShareByLink) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13209,7 +13440,7 @@ func (m *RpcObjectShareByLinkRequest) Reset() { *m = RpcObjectShareByLin func (m *RpcObjectShareByLinkRequest) String() string { return proto.CompactTextString(m) } func (*RpcObjectShareByLinkRequest) ProtoMessage() {} func (*RpcObjectShareByLinkRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 14, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 15, 0} } func (m *RpcObjectShareByLinkRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13254,7 +13485,7 @@ func (m *RpcObjectShareByLinkResponse) Reset() { *m = RpcObjectShareByLi func (m *RpcObjectShareByLinkResponse) String() string { return proto.CompactTextString(m) } func (*RpcObjectShareByLinkResponse) ProtoMessage() {} func (*RpcObjectShareByLinkResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 14, 1} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 15, 1} } func (m *RpcObjectShareByLinkResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13306,7 +13537,7 @@ func (m *RpcObjectShareByLinkResponseError) Reset() { *m = RpcObjectShar func (m *RpcObjectShareByLinkResponseError) String() string { return proto.CompactTextString(m) } func (*RpcObjectShareByLinkResponseError) ProtoMessage() {} func (*RpcObjectShareByLinkResponseError) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 14, 1, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 15, 1, 0} } func (m *RpcObjectShareByLinkResponseError) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13356,7 +13587,7 @@ func (m *RpcObjectAddWithObjectId) Reset() { *m = RpcObjectAddWithObject func (m *RpcObjectAddWithObjectId) String() string { return proto.CompactTextString(m) } func (*RpcObjectAddWithObjectId) ProtoMessage() {} func (*RpcObjectAddWithObjectId) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 15} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 16} } func (m *RpcObjectAddWithObjectId) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13394,7 +13625,7 @@ func (m *RpcObjectAddWithObjectIdRequest) Reset() { *m = RpcObjectAddWit func (m *RpcObjectAddWithObjectIdRequest) String() string { return proto.CompactTextString(m) } func (*RpcObjectAddWithObjectIdRequest) ProtoMessage() {} func (*RpcObjectAddWithObjectIdRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 15, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 16, 0} } func (m *RpcObjectAddWithObjectIdRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13445,7 +13676,7 @@ func (m *RpcObjectAddWithObjectIdResponse) Reset() { *m = RpcObjectAddWi func (m *RpcObjectAddWithObjectIdResponse) String() string { return proto.CompactTextString(m) } func (*RpcObjectAddWithObjectIdResponse) ProtoMessage() {} func (*RpcObjectAddWithObjectIdResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 15, 1} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 16, 1} } func (m *RpcObjectAddWithObjectIdResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13490,7 +13721,7 @@ func (m *RpcObjectAddWithObjectIdResponseError) Reset() { *m = RpcObject func (m *RpcObjectAddWithObjectIdResponseError) String() string { return proto.CompactTextString(m) } func (*RpcObjectAddWithObjectIdResponseError) ProtoMessage() {} func (*RpcObjectAddWithObjectIdResponseError) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 15, 1, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 16, 1, 0} } func (m *RpcObjectAddWithObjectIdResponseError) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13540,7 +13771,7 @@ func (m *RpcObjectSearch) Reset() { *m = RpcObjectSearch{} } func (m *RpcObjectSearch) String() string { return proto.CompactTextString(m) } func (*RpcObjectSearch) ProtoMessage() {} func (*RpcObjectSearch) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 16} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 17} } func (m *RpcObjectSearch) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13585,7 +13816,7 @@ func (m *RpcObjectSearchRequest) Reset() { *m = RpcObjectSearchRequest{} func (m *RpcObjectSearchRequest) String() string { return proto.CompactTextString(m) } func (*RpcObjectSearchRequest) ProtoMessage() {} func (*RpcObjectSearchRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 16, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 17, 0} } func (m *RpcObjectSearchRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13672,7 +13903,7 @@ func (m *RpcObjectSearchResponse) Reset() { *m = RpcObjectSearchResponse func (m *RpcObjectSearchResponse) String() string { return proto.CompactTextString(m) } func (*RpcObjectSearchResponse) ProtoMessage() {} func (*RpcObjectSearchResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 16, 1} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 17, 1} } func (m *RpcObjectSearchResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13724,7 +13955,7 @@ func (m *RpcObjectSearchResponseError) Reset() { *m = RpcObjectSearchRes func (m *RpcObjectSearchResponseError) String() string { return proto.CompactTextString(m) } func (*RpcObjectSearchResponseError) ProtoMessage() {} func (*RpcObjectSearchResponseError) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 16, 1, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 17, 1, 0} } func (m *RpcObjectSearchResponseError) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13774,7 +14005,7 @@ func (m *RpcObjectGraph) Reset() { *m = RpcObjectGraph{} } func (m *RpcObjectGraph) String() string { return proto.CompactTextString(m) } func (*RpcObjectGraph) ProtoMessage() {} func (*RpcObjectGraph) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 17} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 18} } func (m *RpcObjectGraph) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13815,7 +14046,7 @@ func (m *RpcObjectGraphRequest) Reset() { *m = RpcObjectGraphRequest{} } func (m *RpcObjectGraphRequest) String() string { return proto.CompactTextString(m) } func (*RpcObjectGraphRequest) ProtoMessage() {} func (*RpcObjectGraphRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 17, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 18, 0} } func (m *RpcObjectGraphRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13887,7 +14118,7 @@ func (m *RpcObjectGraphEdge) Reset() { *m = RpcObjectGraphEdge{} } func (m *RpcObjectGraphEdge) String() string { return proto.CompactTextString(m) } func (*RpcObjectGraphEdge) ProtoMessage() {} func (*RpcObjectGraphEdge) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 17, 1} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 18, 1} } func (m *RpcObjectGraphEdge) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13982,7 +14213,7 @@ func (m *RpcObjectGraphResponse) Reset() { *m = RpcObjectGraphResponse{} func (m *RpcObjectGraphResponse) String() string { return proto.CompactTextString(m) } func (*RpcObjectGraphResponse) ProtoMessage() {} func (*RpcObjectGraphResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 17, 2} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 18, 2} } func (m *RpcObjectGraphResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14041,7 +14272,7 @@ func (m *RpcObjectGraphResponseError) Reset() { *m = RpcObjectGraphRespo func (m *RpcObjectGraphResponseError) String() string { return proto.CompactTextString(m) } func (*RpcObjectGraphResponseError) ProtoMessage() {} func (*RpcObjectGraphResponseError) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 17, 2, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 18, 2, 0} } func (m *RpcObjectGraphResponseError) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14091,7 +14322,7 @@ func (m *RpcObjectSearchSubscribe) Reset() { *m = RpcObjectSearchSubscri func (m *RpcObjectSearchSubscribe) String() string { return proto.CompactTextString(m) } func (*RpcObjectSearchSubscribe) ProtoMessage() {} func (*RpcObjectSearchSubscribe) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 18} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 19} } func (m *RpcObjectSearchSubscribe) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14149,7 +14380,7 @@ func (m *RpcObjectSearchSubscribeRequest) Reset() { *m = RpcObjectSearch func (m *RpcObjectSearchSubscribeRequest) String() string { return proto.CompactTextString(m) } func (*RpcObjectSearchSubscribeRequest) ProtoMessage() {} func (*RpcObjectSearchSubscribeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 18, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 19, 0} } func (m *RpcObjectSearchSubscribeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14267,7 +14498,7 @@ func (m *RpcObjectSearchSubscribeResponse) Reset() { *m = RpcObjectSearc func (m *RpcObjectSearchSubscribeResponse) String() string { return proto.CompactTextString(m) } func (*RpcObjectSearchSubscribeResponse) ProtoMessage() {} func (*RpcObjectSearchSubscribeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 18, 1} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 19, 1} } func (m *RpcObjectSearchSubscribeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14340,7 +14571,7 @@ func (m *RpcObjectSearchSubscribeResponseError) Reset() { *m = RpcObject func (m *RpcObjectSearchSubscribeResponseError) String() string { return proto.CompactTextString(m) } func (*RpcObjectSearchSubscribeResponseError) ProtoMessage() {} func (*RpcObjectSearchSubscribeResponseError) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 18, 1, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 19, 1, 0} } func (m *RpcObjectSearchSubscribeResponseError) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14390,7 +14621,7 @@ func (m *RpcObjectGroupsSubscribe) Reset() { *m = RpcObjectGroupsSubscri func (m *RpcObjectGroupsSubscribe) String() string { return proto.CompactTextString(m) } func (*RpcObjectGroupsSubscribe) ProtoMessage() {} func (*RpcObjectGroupsSubscribe) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 19} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 20} } func (m *RpcObjectGroupsSubscribe) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14430,7 +14661,7 @@ func (m *RpcObjectGroupsSubscribeRequest) Reset() { *m = RpcObjectGroups func (m *RpcObjectGroupsSubscribeRequest) String() string { return proto.CompactTextString(m) } func (*RpcObjectGroupsSubscribeRequest) ProtoMessage() {} func (*RpcObjectGroupsSubscribeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 19, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 20, 0} } func (m *RpcObjectGroupsSubscribeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14497,7 +14728,7 @@ func (m *RpcObjectGroupsSubscribeResponse) Reset() { *m = RpcObjectGroup func (m *RpcObjectGroupsSubscribeResponse) String() string { return proto.CompactTextString(m) } func (*RpcObjectGroupsSubscribeResponse) ProtoMessage() {} func (*RpcObjectGroupsSubscribeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 19, 1} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 20, 1} } func (m *RpcObjectGroupsSubscribeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14556,7 +14787,7 @@ func (m *RpcObjectGroupsSubscribeResponseError) Reset() { *m = RpcObject func (m *RpcObjectGroupsSubscribeResponseError) String() string { return proto.CompactTextString(m) } func (*RpcObjectGroupsSubscribeResponseError) ProtoMessage() {} func (*RpcObjectGroupsSubscribeResponseError) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 19, 1, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 20, 1, 0} } func (m *RpcObjectGroupsSubscribeResponseError) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14606,7 +14837,7 @@ func (m *RpcObjectSubscribeIds) Reset() { *m = RpcObjectSubscribeIds{} } func (m *RpcObjectSubscribeIds) String() string { return proto.CompactTextString(m) } func (*RpcObjectSubscribeIds) ProtoMessage() {} func (*RpcObjectSubscribeIds) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 20} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 21} } func (m *RpcObjectSubscribeIds) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14652,7 +14883,7 @@ func (m *RpcObjectSubscribeIdsRequest) Reset() { *m = RpcObjectSubscribe func (m *RpcObjectSubscribeIdsRequest) String() string { return proto.CompactTextString(m) } func (*RpcObjectSubscribeIdsRequest) ProtoMessage() {} func (*RpcObjectSubscribeIdsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 20, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 21, 0} } func (m *RpcObjectSubscribeIdsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14720,7 +14951,7 @@ func (m *RpcObjectSubscribeIdsResponse) Reset() { *m = RpcObjectSubscrib func (m *RpcObjectSubscribeIdsResponse) String() string { return proto.CompactTextString(m) } func (*RpcObjectSubscribeIdsResponse) ProtoMessage() {} func (*RpcObjectSubscribeIdsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 20, 1} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 21, 1} } func (m *RpcObjectSubscribeIdsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14786,7 +15017,7 @@ func (m *RpcObjectSubscribeIdsResponseError) Reset() { *m = RpcObjectSub func (m *RpcObjectSubscribeIdsResponseError) String() string { return proto.CompactTextString(m) } func (*RpcObjectSubscribeIdsResponseError) ProtoMessage() {} func (*RpcObjectSubscribeIdsResponseError) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 20, 1, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 21, 1, 0} } func (m *RpcObjectSubscribeIdsResponseError) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14836,7 +15067,7 @@ func (m *RpcObjectSearchUnsubscribe) Reset() { *m = RpcObjectSearchUnsub func (m *RpcObjectSearchUnsubscribe) String() string { return proto.CompactTextString(m) } func (*RpcObjectSearchUnsubscribe) ProtoMessage() {} func (*RpcObjectSearchUnsubscribe) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 21} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 22} } func (m *RpcObjectSearchUnsubscribe) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14873,7 +15104,7 @@ func (m *RpcObjectSearchUnsubscribeRequest) Reset() { *m = RpcObjectSear func (m *RpcObjectSearchUnsubscribeRequest) String() string { return proto.CompactTextString(m) } func (*RpcObjectSearchUnsubscribeRequest) ProtoMessage() {} func (*RpcObjectSearchUnsubscribeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 21, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 22, 0} } func (m *RpcObjectSearchUnsubscribeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14917,7 +15148,7 @@ func (m *RpcObjectSearchUnsubscribeResponse) Reset() { *m = RpcObjectSea func (m *RpcObjectSearchUnsubscribeResponse) String() string { return proto.CompactTextString(m) } func (*RpcObjectSearchUnsubscribeResponse) ProtoMessage() {} func (*RpcObjectSearchUnsubscribeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 21, 1} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 22, 1} } func (m *RpcObjectSearchUnsubscribeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14964,7 +15195,7 @@ func (m *RpcObjectSearchUnsubscribeResponseError) Reset() { func (m *RpcObjectSearchUnsubscribeResponseError) String() string { return proto.CompactTextString(m) } func (*RpcObjectSearchUnsubscribeResponseError) ProtoMessage() {} func (*RpcObjectSearchUnsubscribeResponseError) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 21, 1, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 22, 1, 0} } func (m *RpcObjectSearchUnsubscribeResponseError) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -15014,7 +15245,7 @@ func (m *RpcObjectSetLayout) Reset() { *m = RpcObjectSetLayout{} } func (m *RpcObjectSetLayout) String() string { return proto.CompactTextString(m) } func (*RpcObjectSetLayout) ProtoMessage() {} func (*RpcObjectSetLayout) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 22} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 23} } func (m *RpcObjectSetLayout) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -15052,7 +15283,7 @@ func (m *RpcObjectSetLayoutRequest) Reset() { *m = RpcObjectSetLayoutReq func (m *RpcObjectSetLayoutRequest) String() string { return proto.CompactTextString(m) } func (*RpcObjectSetLayoutRequest) ProtoMessage() {} func (*RpcObjectSetLayoutRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 22, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 23, 0} } func (m *RpcObjectSetLayoutRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -15104,7 +15335,7 @@ func (m *RpcObjectSetLayoutResponse) Reset() { *m = RpcObjectSetLayoutRe func (m *RpcObjectSetLayoutResponse) String() string { return proto.CompactTextString(m) } func (*RpcObjectSetLayoutResponse) ProtoMessage() {} func (*RpcObjectSetLayoutResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 22, 1} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 23, 1} } func (m *RpcObjectSetLayoutResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -15156,7 +15387,7 @@ func (m *RpcObjectSetLayoutResponseError) Reset() { *m = RpcObjectSetLay func (m *RpcObjectSetLayoutResponseError) String() string { return proto.CompactTextString(m) } func (*RpcObjectSetLayoutResponseError) ProtoMessage() {} func (*RpcObjectSetLayoutResponseError) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 22, 1, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 23, 1, 0} } func (m *RpcObjectSetLayoutResponseError) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -15206,7 +15437,7 @@ func (m *RpcObjectSetIsFavorite) Reset() { *m = RpcObjectSetIsFavorite{} func (m *RpcObjectSetIsFavorite) String() string { return proto.CompactTextString(m) } func (*RpcObjectSetIsFavorite) ProtoMessage() {} func (*RpcObjectSetIsFavorite) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 23} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 24} } func (m *RpcObjectSetIsFavorite) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -15244,7 +15475,7 @@ func (m *RpcObjectSetIsFavoriteRequest) Reset() { *m = RpcObjectSetIsFav func (m *RpcObjectSetIsFavoriteRequest) String() string { return proto.CompactTextString(m) } func (*RpcObjectSetIsFavoriteRequest) ProtoMessage() {} func (*RpcObjectSetIsFavoriteRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 23, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 24, 0} } func (m *RpcObjectSetIsFavoriteRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -15296,7 +15527,7 @@ func (m *RpcObjectSetIsFavoriteResponse) Reset() { *m = RpcObjectSetIsFa func (m *RpcObjectSetIsFavoriteResponse) String() string { return proto.CompactTextString(m) } func (*RpcObjectSetIsFavoriteResponse) ProtoMessage() {} func (*RpcObjectSetIsFavoriteResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 23, 1} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 24, 1} } func (m *RpcObjectSetIsFavoriteResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -15348,7 +15579,7 @@ func (m *RpcObjectSetIsFavoriteResponseError) Reset() { *m = RpcObjectSe func (m *RpcObjectSetIsFavoriteResponseError) String() string { return proto.CompactTextString(m) } func (*RpcObjectSetIsFavoriteResponseError) ProtoMessage() {} func (*RpcObjectSetIsFavoriteResponseError) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 23, 1, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 24, 1, 0} } func (m *RpcObjectSetIsFavoriteResponseError) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -15398,7 +15629,7 @@ func (m *RpcObjectSetIsArchived) Reset() { *m = RpcObjectSetIsArchived{} func (m *RpcObjectSetIsArchived) String() string { return proto.CompactTextString(m) } func (*RpcObjectSetIsArchived) ProtoMessage() {} func (*RpcObjectSetIsArchived) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 24} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 25} } func (m *RpcObjectSetIsArchived) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -15436,7 +15667,7 @@ func (m *RpcObjectSetIsArchivedRequest) Reset() { *m = RpcObjectSetIsArc func (m *RpcObjectSetIsArchivedRequest) String() string { return proto.CompactTextString(m) } func (*RpcObjectSetIsArchivedRequest) ProtoMessage() {} func (*RpcObjectSetIsArchivedRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 24, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 25, 0} } func (m *RpcObjectSetIsArchivedRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -15488,7 +15719,7 @@ func (m *RpcObjectSetIsArchivedResponse) Reset() { *m = RpcObjectSetIsAr func (m *RpcObjectSetIsArchivedResponse) String() string { return proto.CompactTextString(m) } func (*RpcObjectSetIsArchivedResponse) ProtoMessage() {} func (*RpcObjectSetIsArchivedResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 24, 1} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 25, 1} } func (m *RpcObjectSetIsArchivedResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -15540,7 +15771,7 @@ func (m *RpcObjectSetIsArchivedResponseError) Reset() { *m = RpcObjectSe func (m *RpcObjectSetIsArchivedResponseError) String() string { return proto.CompactTextString(m) } func (*RpcObjectSetIsArchivedResponseError) ProtoMessage() {} func (*RpcObjectSetIsArchivedResponseError) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 24, 1, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 25, 1, 0} } func (m *RpcObjectSetIsArchivedResponseError) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -15590,7 +15821,7 @@ func (m *RpcObjectSetObjectType) Reset() { *m = RpcObjectSetObjectType{} func (m *RpcObjectSetObjectType) String() string { return proto.CompactTextString(m) } func (*RpcObjectSetObjectType) ProtoMessage() {} func (*RpcObjectSetObjectType) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 25} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 26} } func (m *RpcObjectSetObjectType) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -15628,7 +15859,7 @@ func (m *RpcObjectSetObjectTypeRequest) Reset() { *m = RpcObjectSetObjec func (m *RpcObjectSetObjectTypeRequest) String() string { return proto.CompactTextString(m) } func (*RpcObjectSetObjectTypeRequest) ProtoMessage() {} func (*RpcObjectSetObjectTypeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 25, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 26, 0} } func (m *RpcObjectSetObjectTypeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -15680,7 +15911,7 @@ func (m *RpcObjectSetObjectTypeResponse) Reset() { *m = RpcObjectSetObje func (m *RpcObjectSetObjectTypeResponse) String() string { return proto.CompactTextString(m) } func (*RpcObjectSetObjectTypeResponse) ProtoMessage() {} func (*RpcObjectSetObjectTypeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 25, 1} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 26, 1} } func (m *RpcObjectSetObjectTypeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -15732,7 +15963,7 @@ func (m *RpcObjectSetObjectTypeResponseError) Reset() { *m = RpcObjectSe func (m *RpcObjectSetObjectTypeResponseError) String() string { return proto.CompactTextString(m) } func (*RpcObjectSetObjectTypeResponseError) ProtoMessage() {} func (*RpcObjectSetObjectTypeResponseError) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 25, 1, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 26, 1, 0} } func (m *RpcObjectSetObjectTypeResponseError) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -15782,7 +16013,7 @@ func (m *RpcObjectSetInternalFlags) Reset() { *m = RpcObjectSetInternalF func (m *RpcObjectSetInternalFlags) String() string { return proto.CompactTextString(m) } func (*RpcObjectSetInternalFlags) ProtoMessage() {} func (*RpcObjectSetInternalFlags) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 26} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 27} } func (m *RpcObjectSetInternalFlags) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -15820,7 +16051,7 @@ func (m *RpcObjectSetInternalFlagsRequest) Reset() { *m = RpcObjectSetIn func (m *RpcObjectSetInternalFlagsRequest) String() string { return proto.CompactTextString(m) } func (*RpcObjectSetInternalFlagsRequest) ProtoMessage() {} func (*RpcObjectSetInternalFlagsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 26, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 27, 0} } func (m *RpcObjectSetInternalFlagsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -15872,7 +16103,7 @@ func (m *RpcObjectSetInternalFlagsResponse) Reset() { *m = RpcObjectSetI func (m *RpcObjectSetInternalFlagsResponse) String() string { return proto.CompactTextString(m) } func (*RpcObjectSetInternalFlagsResponse) ProtoMessage() {} func (*RpcObjectSetInternalFlagsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 26, 1} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 27, 1} } func (m *RpcObjectSetInternalFlagsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -15926,7 +16157,7 @@ func (m *RpcObjectSetInternalFlagsResponseError) Reset() { func (m *RpcObjectSetInternalFlagsResponseError) String() string { return proto.CompactTextString(m) } func (*RpcObjectSetInternalFlagsResponseError) ProtoMessage() {} func (*RpcObjectSetInternalFlagsResponseError) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 26, 1, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 27, 1, 0} } func (m *RpcObjectSetInternalFlagsResponseError) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -15976,7 +16207,7 @@ func (m *RpcObjectSetDetails) Reset() { *m = RpcObjectSetDetails{} } func (m *RpcObjectSetDetails) String() string { return proto.CompactTextString(m) } func (*RpcObjectSetDetails) ProtoMessage() {} func (*RpcObjectSetDetails) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 27} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 28} } func (m *RpcObjectSetDetails) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -16014,7 +16245,7 @@ func (m *RpcObjectSetDetailsDetail) Reset() { *m = RpcObjectSetDetailsDe func (m *RpcObjectSetDetailsDetail) String() string { return proto.CompactTextString(m) } func (*RpcObjectSetDetailsDetail) ProtoMessage() {} func (*RpcObjectSetDetailsDetail) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 27, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 28, 0} } func (m *RpcObjectSetDetailsDetail) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -16066,7 +16297,7 @@ func (m *RpcObjectSetDetailsRequest) Reset() { *m = RpcObjectSetDetailsR func (m *RpcObjectSetDetailsRequest) String() string { return proto.CompactTextString(m) } func (*RpcObjectSetDetailsRequest) ProtoMessage() {} func (*RpcObjectSetDetailsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 27, 1} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 28, 1} } func (m *RpcObjectSetDetailsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -16118,7 +16349,7 @@ func (m *RpcObjectSetDetailsResponse) Reset() { *m = RpcObjectSetDetails func (m *RpcObjectSetDetailsResponse) String() string { return proto.CompactTextString(m) } func (*RpcObjectSetDetailsResponse) ProtoMessage() {} func (*RpcObjectSetDetailsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 27, 2} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 28, 2} } func (m *RpcObjectSetDetailsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -16170,7 +16401,7 @@ func (m *RpcObjectSetDetailsResponseError) Reset() { *m = RpcObjectSetDe func (m *RpcObjectSetDetailsResponseError) String() string { return proto.CompactTextString(m) } func (*RpcObjectSetDetailsResponseError) ProtoMessage() {} func (*RpcObjectSetDetailsResponseError) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 27, 2, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 28, 2, 0} } func (m *RpcObjectSetDetailsResponseError) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -16220,7 +16451,7 @@ func (m *RpcObjectToSet) Reset() { *m = RpcObjectToSet{} } func (m *RpcObjectToSet) String() string { return proto.CompactTextString(m) } func (*RpcObjectToSet) ProtoMessage() {} func (*RpcObjectToSet) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 28} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 29} } func (m *RpcObjectToSet) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -16258,7 +16489,7 @@ func (m *RpcObjectToSetRequest) Reset() { *m = RpcObjectToSetRequest{} } func (m *RpcObjectToSetRequest) String() string { return proto.CompactTextString(m) } func (*RpcObjectToSetRequest) ProtoMessage() {} func (*RpcObjectToSetRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 28, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 29, 0} } func (m *RpcObjectToSetRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -16310,7 +16541,7 @@ func (m *RpcObjectToSetResponse) Reset() { *m = RpcObjectToSetResponse{} func (m *RpcObjectToSetResponse) String() string { return proto.CompactTextString(m) } func (*RpcObjectToSetResponse) ProtoMessage() {} func (*RpcObjectToSetResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 28, 1} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 29, 1} } func (m *RpcObjectToSetResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -16362,7 +16593,7 @@ func (m *RpcObjectToSetResponseError) Reset() { *m = RpcObjectToSetRespo func (m *RpcObjectToSetResponseError) String() string { return proto.CompactTextString(m) } func (*RpcObjectToSetResponseError) ProtoMessage() {} func (*RpcObjectToSetResponseError) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 28, 1, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 29, 1, 0} } func (m *RpcObjectToSetResponseError) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -16415,7 +16646,7 @@ func (m *RpcObjectUndoRedoCounter) Reset() { *m = RpcObjectUndoRedoCount func (m *RpcObjectUndoRedoCounter) String() string { return proto.CompactTextString(m) } func (*RpcObjectUndoRedoCounter) ProtoMessage() {} func (*RpcObjectUndoRedoCounter) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 29} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 30} } func (m *RpcObjectUndoRedoCounter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -16465,7 +16696,7 @@ func (m *RpcObjectUndo) Reset() { *m = RpcObjectUndo{} } func (m *RpcObjectUndo) String() string { return proto.CompactTextString(m) } func (*RpcObjectUndo) ProtoMessage() {} func (*RpcObjectUndo) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 30} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 31} } func (m *RpcObjectUndo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -16502,7 +16733,7 @@ func (m *RpcObjectUndoRequest) Reset() { *m = RpcObjectUndoRequest{} } func (m *RpcObjectUndoRequest) String() string { return proto.CompactTextString(m) } func (*RpcObjectUndoRequest) ProtoMessage() {} func (*RpcObjectUndoRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 30, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 31, 0} } func (m *RpcObjectUndoRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -16548,7 +16779,7 @@ func (m *RpcObjectUndoResponse) Reset() { *m = RpcObjectUndoResponse{} } func (m *RpcObjectUndoResponse) String() string { return proto.CompactTextString(m) } func (*RpcObjectUndoResponse) ProtoMessage() {} func (*RpcObjectUndoResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 30, 1} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 31, 1} } func (m *RpcObjectUndoResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -16607,7 +16838,7 @@ func (m *RpcObjectUndoResponseError) Reset() { *m = RpcObjectUndoRespons func (m *RpcObjectUndoResponseError) String() string { return proto.CompactTextString(m) } func (*RpcObjectUndoResponseError) ProtoMessage() {} func (*RpcObjectUndoResponseError) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 30, 1, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 31, 1, 0} } func (m *RpcObjectUndoResponseError) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -16657,7 +16888,7 @@ func (m *RpcObjectRedo) Reset() { *m = RpcObjectRedo{} } func (m *RpcObjectRedo) String() string { return proto.CompactTextString(m) } func (*RpcObjectRedo) ProtoMessage() {} func (*RpcObjectRedo) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 31} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 32} } func (m *RpcObjectRedo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -16694,7 +16925,7 @@ func (m *RpcObjectRedoRequest) Reset() { *m = RpcObjectRedoRequest{} } func (m *RpcObjectRedoRequest) String() string { return proto.CompactTextString(m) } func (*RpcObjectRedoRequest) ProtoMessage() {} func (*RpcObjectRedoRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 31, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 32, 0} } func (m *RpcObjectRedoRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -16740,7 +16971,7 @@ func (m *RpcObjectRedoResponse) Reset() { *m = RpcObjectRedoResponse{} } func (m *RpcObjectRedoResponse) String() string { return proto.CompactTextString(m) } func (*RpcObjectRedoResponse) ProtoMessage() {} func (*RpcObjectRedoResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 31, 1} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 32, 1} } func (m *RpcObjectRedoResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -16799,7 +17030,7 @@ func (m *RpcObjectRedoResponseError) Reset() { *m = RpcObjectRedoRespons func (m *RpcObjectRedoResponseError) String() string { return proto.CompactTextString(m) } func (*RpcObjectRedoResponseError) ProtoMessage() {} func (*RpcObjectRedoResponseError) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 31, 1, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 32, 1, 0} } func (m *RpcObjectRedoResponseError) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -16849,7 +17080,7 @@ func (m *RpcObjectListDuplicate) Reset() { *m = RpcObjectListDuplicate{} func (m *RpcObjectListDuplicate) String() string { return proto.CompactTextString(m) } func (*RpcObjectListDuplicate) ProtoMessage() {} func (*RpcObjectListDuplicate) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 32} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 33} } func (m *RpcObjectListDuplicate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -16886,7 +17117,7 @@ func (m *RpcObjectListDuplicateRequest) Reset() { *m = RpcObjectListDupl func (m *RpcObjectListDuplicateRequest) String() string { return proto.CompactTextString(m) } func (*RpcObjectListDuplicateRequest) ProtoMessage() {} func (*RpcObjectListDuplicateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 32, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 33, 0} } func (m *RpcObjectListDuplicateRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -16931,7 +17162,7 @@ func (m *RpcObjectListDuplicateResponse) Reset() { *m = RpcObjectListDup func (m *RpcObjectListDuplicateResponse) String() string { return proto.CompactTextString(m) } func (*RpcObjectListDuplicateResponse) ProtoMessage() {} func (*RpcObjectListDuplicateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 32, 1} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 33, 1} } func (m *RpcObjectListDuplicateResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -16983,7 +17214,7 @@ func (m *RpcObjectListDuplicateResponseError) Reset() { *m = RpcObjectLi func (m *RpcObjectListDuplicateResponseError) String() string { return proto.CompactTextString(m) } func (*RpcObjectListDuplicateResponseError) ProtoMessage() {} func (*RpcObjectListDuplicateResponseError) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 32, 1, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 33, 1, 0} } func (m *RpcObjectListDuplicateResponseError) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17033,7 +17264,7 @@ func (m *RpcObjectListDelete) Reset() { *m = RpcObjectListDelete{} } func (m *RpcObjectListDelete) String() string { return proto.CompactTextString(m) } func (*RpcObjectListDelete) ProtoMessage() {} func (*RpcObjectListDelete) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 33} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 34} } func (m *RpcObjectListDelete) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17071,7 +17302,7 @@ func (m *RpcObjectListDeleteRequest) Reset() { *m = RpcObjectListDeleteR func (m *RpcObjectListDeleteRequest) String() string { return proto.CompactTextString(m) } func (*RpcObjectListDeleteRequest) ProtoMessage() {} func (*RpcObjectListDeleteRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 33, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 34, 0} } func (m *RpcObjectListDeleteRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17116,7 +17347,7 @@ func (m *RpcObjectListDeleteResponse) Reset() { *m = RpcObjectListDelete func (m *RpcObjectListDeleteResponse) String() string { return proto.CompactTextString(m) } func (*RpcObjectListDeleteResponse) ProtoMessage() {} func (*RpcObjectListDeleteResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 33, 1} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 34, 1} } func (m *RpcObjectListDeleteResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17168,7 +17399,7 @@ func (m *RpcObjectListDeleteResponseError) Reset() { *m = RpcObjectListD func (m *RpcObjectListDeleteResponseError) String() string { return proto.CompactTextString(m) } func (*RpcObjectListDeleteResponseError) ProtoMessage() {} func (*RpcObjectListDeleteResponseError) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 33, 1, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 34, 1, 0} } func (m *RpcObjectListDeleteResponseError) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17218,7 +17449,7 @@ func (m *RpcObjectListSetIsArchived) Reset() { *m = RpcObjectListSetIsAr func (m *RpcObjectListSetIsArchived) String() string { return proto.CompactTextString(m) } func (*RpcObjectListSetIsArchived) ProtoMessage() {} func (*RpcObjectListSetIsArchived) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 34} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 35} } func (m *RpcObjectListSetIsArchived) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17256,7 +17487,7 @@ func (m *RpcObjectListSetIsArchivedRequest) Reset() { *m = RpcObjectList func (m *RpcObjectListSetIsArchivedRequest) String() string { return proto.CompactTextString(m) } func (*RpcObjectListSetIsArchivedRequest) ProtoMessage() {} func (*RpcObjectListSetIsArchivedRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 34, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 35, 0} } func (m *RpcObjectListSetIsArchivedRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17307,7 +17538,7 @@ func (m *RpcObjectListSetIsArchivedResponse) Reset() { *m = RpcObjectLis func (m *RpcObjectListSetIsArchivedResponse) String() string { return proto.CompactTextString(m) } func (*RpcObjectListSetIsArchivedResponse) ProtoMessage() {} func (*RpcObjectListSetIsArchivedResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 34, 1} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 35, 1} } func (m *RpcObjectListSetIsArchivedResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17354,7 +17585,7 @@ func (m *RpcObjectListSetIsArchivedResponseError) Reset() { func (m *RpcObjectListSetIsArchivedResponseError) String() string { return proto.CompactTextString(m) } func (*RpcObjectListSetIsArchivedResponseError) ProtoMessage() {} func (*RpcObjectListSetIsArchivedResponseError) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 34, 1, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 35, 1, 0} } func (m *RpcObjectListSetIsArchivedResponseError) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17404,7 +17635,7 @@ func (m *RpcObjectListSetIsFavorite) Reset() { *m = RpcObjectListSetIsFa func (m *RpcObjectListSetIsFavorite) String() string { return proto.CompactTextString(m) } func (*RpcObjectListSetIsFavorite) ProtoMessage() {} func (*RpcObjectListSetIsFavorite) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 35} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 36} } func (m *RpcObjectListSetIsFavorite) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17442,7 +17673,7 @@ func (m *RpcObjectListSetIsFavoriteRequest) Reset() { *m = RpcObjectList func (m *RpcObjectListSetIsFavoriteRequest) String() string { return proto.CompactTextString(m) } func (*RpcObjectListSetIsFavoriteRequest) ProtoMessage() {} func (*RpcObjectListSetIsFavoriteRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 35, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 36, 0} } func (m *RpcObjectListSetIsFavoriteRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17493,7 +17724,7 @@ func (m *RpcObjectListSetIsFavoriteResponse) Reset() { *m = RpcObjectLis func (m *RpcObjectListSetIsFavoriteResponse) String() string { return proto.CompactTextString(m) } func (*RpcObjectListSetIsFavoriteResponse) ProtoMessage() {} func (*RpcObjectListSetIsFavoriteResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 35, 1} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 36, 1} } func (m *RpcObjectListSetIsFavoriteResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17540,7 +17771,7 @@ func (m *RpcObjectListSetIsFavoriteResponseError) Reset() { func (m *RpcObjectListSetIsFavoriteResponseError) String() string { return proto.CompactTextString(m) } func (*RpcObjectListSetIsFavoriteResponseError) ProtoMessage() {} func (*RpcObjectListSetIsFavoriteResponseError) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 35, 1, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 36, 1, 0} } func (m *RpcObjectListSetIsFavoriteResponseError) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17590,7 +17821,7 @@ func (m *RpcObjectApplyTemplate) Reset() { *m = RpcObjectApplyTemplate{} func (m *RpcObjectApplyTemplate) String() string { return proto.CompactTextString(m) } func (*RpcObjectApplyTemplate) ProtoMessage() {} func (*RpcObjectApplyTemplate) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 36} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 37} } func (m *RpcObjectApplyTemplate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17629,7 +17860,7 @@ func (m *RpcObjectApplyTemplateRequest) Reset() { *m = RpcObjectApplyTem func (m *RpcObjectApplyTemplateRequest) String() string { return proto.CompactTextString(m) } func (*RpcObjectApplyTemplateRequest) ProtoMessage() {} func (*RpcObjectApplyTemplateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 36, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 37, 0} } func (m *RpcObjectApplyTemplateRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17680,7 +17911,7 @@ func (m *RpcObjectApplyTemplateResponse) Reset() { *m = RpcObjectApplyTe func (m *RpcObjectApplyTemplateResponse) String() string { return proto.CompactTextString(m) } func (*RpcObjectApplyTemplateResponse) ProtoMessage() {} func (*RpcObjectApplyTemplateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 36, 1} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 37, 1} } func (m *RpcObjectApplyTemplateResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17725,7 +17956,7 @@ func (m *RpcObjectApplyTemplateResponseError) Reset() { *m = RpcObjectAp func (m *RpcObjectApplyTemplateResponseError) String() string { return proto.CompactTextString(m) } func (*RpcObjectApplyTemplateResponseError) ProtoMessage() {} func (*RpcObjectApplyTemplateResponseError) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 36, 1, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 37, 1, 0} } func (m *RpcObjectApplyTemplateResponseError) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17775,7 +18006,7 @@ func (m *RpcObjectListExport) Reset() { *m = RpcObjectListExport{} } func (m *RpcObjectListExport) String() string { return proto.CompactTextString(m) } func (*RpcObjectListExport) ProtoMessage() {} func (*RpcObjectListExport) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 37} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 38} } func (m *RpcObjectListExport) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17823,7 +18054,7 @@ func (m *RpcObjectListExportRequest) Reset() { *m = RpcObjectListExportR func (m *RpcObjectListExportRequest) String() string { return proto.CompactTextString(m) } func (*RpcObjectListExportRequest) ProtoMessage() {} func (*RpcObjectListExportRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 37, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 38, 0} } func (m *RpcObjectListExportRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17905,7 +18136,7 @@ func (m *RpcObjectListExportResponse) Reset() { *m = RpcObjectListExport func (m *RpcObjectListExportResponse) String() string { return proto.CompactTextString(m) } func (*RpcObjectListExportResponse) ProtoMessage() {} func (*RpcObjectListExportResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 37, 1} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 38, 1} } func (m *RpcObjectListExportResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17971,7 +18202,7 @@ func (m *RpcObjectListExportResponseError) Reset() { *m = RpcObjectListE func (m *RpcObjectListExportResponseError) String() string { return proto.CompactTextString(m) } func (*RpcObjectListExportResponseError) ProtoMessage() {} func (*RpcObjectListExportResponseError) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 37, 1, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 38, 1, 0} } func (m *RpcObjectListExportResponseError) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18021,7 +18252,7 @@ func (m *RpcObjectImport) Reset() { *m = RpcObjectImport{} } func (m *RpcObjectImport) String() string { return proto.CompactTextString(m) } func (*RpcObjectImport) ProtoMessage() {} func (*RpcObjectImport) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 38} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 39} } func (m *RpcObjectImport) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18065,7 +18296,7 @@ func (m *RpcObjectImportRequest) Reset() { *m = RpcObjectImportRequest{} func (m *RpcObjectImportRequest) String() string { return proto.CompactTextString(m) } func (*RpcObjectImportRequest) ProtoMessage() {} func (*RpcObjectImportRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 38, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 39, 0} } func (m *RpcObjectImportRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18175,7 +18406,7 @@ func (m *RpcObjectImportRequestNotionParams) Reset() { *m = RpcObjectImp func (m *RpcObjectImportRequestNotionParams) String() string { return proto.CompactTextString(m) } func (*RpcObjectImportRequestNotionParams) ProtoMessage() {} func (*RpcObjectImportRequestNotionParams) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 38, 0, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 39, 0, 0} } func (m *RpcObjectImportRequestNotionParams) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18219,7 +18450,7 @@ func (m *RpcObjectImportRequestBookmarksParams) Reset() { *m = RpcObject func (m *RpcObjectImportRequestBookmarksParams) String() string { return proto.CompactTextString(m) } func (*RpcObjectImportRequestBookmarksParams) ProtoMessage() {} func (*RpcObjectImportRequestBookmarksParams) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 38, 0, 1} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 39, 0, 1} } func (m *RpcObjectImportRequestBookmarksParams) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18264,7 +18495,7 @@ func (m *RpcObjectImportRequestSnapshot) Reset() { *m = RpcObjectImportR func (m *RpcObjectImportRequestSnapshot) String() string { return proto.CompactTextString(m) } func (*RpcObjectImportRequestSnapshot) ProtoMessage() {} func (*RpcObjectImportRequestSnapshot) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 38, 0, 2} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 39, 0, 2} } func (m *RpcObjectImportRequestSnapshot) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18315,7 +18546,7 @@ func (m *RpcObjectImportResponse) Reset() { *m = RpcObjectImportResponse func (m *RpcObjectImportResponse) String() string { return proto.CompactTextString(m) } func (*RpcObjectImportResponse) ProtoMessage() {} func (*RpcObjectImportResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 38, 1} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 39, 1} } func (m *RpcObjectImportResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18360,7 +18591,7 @@ func (m *RpcObjectImportResponseError) Reset() { *m = RpcObjectImportRes func (m *RpcObjectImportResponseError) String() string { return proto.CompactTextString(m) } func (*RpcObjectImportResponseError) ProtoMessage() {} func (*RpcObjectImportResponseError) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 38, 1, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 39, 1, 0} } func (m *RpcObjectImportResponseError) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18410,7 +18641,7 @@ func (m *RpcObjectImportList) Reset() { *m = RpcObjectImportList{} } func (m *RpcObjectImportList) String() string { return proto.CompactTextString(m) } func (*RpcObjectImportList) ProtoMessage() {} func (*RpcObjectImportList) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 39} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 40} } func (m *RpcObjectImportList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18446,7 +18677,7 @@ func (m *RpcObjectImportListRequest) Reset() { *m = RpcObjectImportListR func (m *RpcObjectImportListRequest) String() string { return proto.CompactTextString(m) } func (*RpcObjectImportListRequest) ProtoMessage() {} func (*RpcObjectImportListRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 39, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 40, 0} } func (m *RpcObjectImportListRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18484,7 +18715,7 @@ func (m *RpcObjectImportListResponse) Reset() { *m = RpcObjectImportList func (m *RpcObjectImportListResponse) String() string { return proto.CompactTextString(m) } func (*RpcObjectImportListResponse) ProtoMessage() {} func (*RpcObjectImportListResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 39, 1} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 40, 1} } func (m *RpcObjectImportListResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18536,7 +18767,7 @@ func (m *RpcObjectImportListResponseError) Reset() { *m = RpcObjectImpor func (m *RpcObjectImportListResponseError) String() string { return proto.CompactTextString(m) } func (*RpcObjectImportListResponseError) ProtoMessage() {} func (*RpcObjectImportListResponseError) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 39, 1, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 40, 1, 0} } func (m *RpcObjectImportListResponseError) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18587,7 +18818,7 @@ func (m *RpcObjectImportListImportResponse) Reset() { *m = RpcObjectImpo func (m *RpcObjectImportListImportResponse) String() string { return proto.CompactTextString(m) } func (*RpcObjectImportListImportResponse) ProtoMessage() {} func (*RpcObjectImportListImportResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 39, 2} + return fileDescriptor_8261c968b2e6f45c, []int{0, 4, 40, 2} } func (m *RpcObjectImportListImportResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -42933,6 +43164,7 @@ func init() { proto.RegisterEnum("anytype.RpcObjectDuplicateResponseErrorCode", RpcObjectDuplicateResponseErrorCode_name, RpcObjectDuplicateResponseErrorCode_value) proto.RegisterEnum("anytype.RpcObjectOpenBreadcrumbsResponseErrorCode", RpcObjectOpenBreadcrumbsResponseErrorCode_name, RpcObjectOpenBreadcrumbsResponseErrorCode_value) proto.RegisterEnum("anytype.RpcObjectSetBreadcrumbsResponseErrorCode", RpcObjectSetBreadcrumbsResponseErrorCode_name, RpcObjectSetBreadcrumbsResponseErrorCode_value) + proto.RegisterEnum("anytype.RpcObjectImportMarkdownResponseErrorCode", RpcObjectImportMarkdownResponseErrorCode_name, RpcObjectImportMarkdownResponseErrorCode_value) proto.RegisterEnum("anytype.RpcObjectShareByLinkResponseErrorCode", RpcObjectShareByLinkResponseErrorCode_name, RpcObjectShareByLinkResponseErrorCode_value) proto.RegisterEnum("anytype.RpcObjectAddWithObjectIdResponseErrorCode", RpcObjectAddWithObjectIdResponseErrorCode_name, RpcObjectAddWithObjectIdResponseErrorCode_value) proto.RegisterEnum("anytype.RpcObjectSearchResponseErrorCode", RpcObjectSearchResponseErrorCode_name, RpcObjectSearchResponseErrorCode_value) @@ -43239,6 +43471,10 @@ func init() { proto.RegisterType((*RpcObjectSetBreadcrumbsRequest)(nil), "anytype.Rpc.Object.SetBreadcrumbs.Request") proto.RegisterType((*RpcObjectSetBreadcrumbsResponse)(nil), "anytype.Rpc.Object.SetBreadcrumbs.Response") proto.RegisterType((*RpcObjectSetBreadcrumbsResponseError)(nil), "anytype.Rpc.Object.SetBreadcrumbs.Response.Error") + proto.RegisterType((*RpcObjectImportMarkdown)(nil), "anytype.Rpc.Object.ImportMarkdown") + proto.RegisterType((*RpcObjectImportMarkdownRequest)(nil), "anytype.Rpc.Object.ImportMarkdown.Request") + proto.RegisterType((*RpcObjectImportMarkdownResponse)(nil), "anytype.Rpc.Object.ImportMarkdown.Response") + proto.RegisterType((*RpcObjectImportMarkdownResponseError)(nil), "anytype.Rpc.Object.ImportMarkdown.Response.Error") proto.RegisterType((*RpcObjectShareByLink)(nil), "anytype.Rpc.Object.ShareByLink") proto.RegisterType((*RpcObjectShareByLinkRequest)(nil), "anytype.Rpc.Object.ShareByLink.Request") proto.RegisterType((*RpcObjectShareByLinkResponse)(nil), "anytype.Rpc.Object.ShareByLink.Response") @@ -43831,747 +44067,750 @@ func init() { func init() { proto.RegisterFile("pb/protos/commands.proto", fileDescriptor_8261c968b2e6f45c) } var fileDescriptor_8261c968b2e6f45c = []byte{ - // 11825 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0xbd, 0x7b, 0x74, 0x23, 0xc7, - 0x75, 0x27, 0x3c, 0x40, 0xe3, 0x41, 0x5e, 0x3e, 0xa6, 0xd5, 0x1e, 0x8f, 0xe8, 0x92, 0x34, 0x56, - 0xa8, 0x67, 0x46, 0x12, 0x47, 0x1a, 0xf9, 0xa1, 0xd1, 0x1b, 0x04, 0x40, 0x12, 0x1a, 0x12, 0x60, - 0x1a, 0xe0, 0x4c, 0x94, 0xef, 0xcb, 0x72, 0x9b, 0x40, 0x91, 0x6c, 0x0d, 0x88, 0x46, 0x1a, 0x4d, - 0xce, 0x8c, 0xcf, 0xd9, 0x4d, 0x94, 0x44, 0x91, 0x92, 0x1c, 0xdb, 0x79, 0xae, 0xa3, 0x64, 0x6d, - 0xd9, 0x72, 0xec, 0xc4, 0x49, 0x1c, 0xc7, 0x71, 0x1c, 0xaf, 0xb3, 0xb6, 0xb2, 0x7e, 0xe5, 0x38, - 0x3e, 0x8e, 0xe5, 0xf8, 0x9d, 0xac, 0xed, 0x38, 0x72, 0xd6, 0xeb, 0x6c, 0xec, 0xf5, 0x71, 0xce, - 0xee, 0x66, 0x1d, 0x25, 0xeb, 0x3d, 0x5d, 0x55, 0xfd, 0x28, 0x10, 0xdd, 0xa8, 0x06, 0xd1, 0xa0, - 0xbc, 0xf9, 0x0b, 0xe8, 0xea, 0xea, 0xaa, 0x5b, 0xf7, 0x77, 0xeb, 0x56, 0xd5, 0xad, 0x5b, 0xb7, - 0x60, 0xa6, 0xbd, 0x71, 0xaa, 0x6d, 0x1a, 0x96, 0xd1, 0x39, 0x55, 0x37, 0x76, 0x76, 0xb4, 0x56, - 0xa3, 0x33, 0x47, 0x9e, 0x95, 0xac, 0xd6, 0xba, 0x6c, 0x5d, 0x6e, 0x63, 0x74, 0x7d, 0xfb, 0xc2, - 0xd6, 0xa9, 0xa6, 0xbe, 0x71, 0xaa, 0xbd, 0x71, 0x6a, 0xc7, 0x68, 0xe0, 0xa6, 0xf3, 0x01, 0x79, - 0x60, 0xd9, 0xd1, 0xcd, 0x41, 0xb9, 0x9a, 0x46, 0x5d, 0x6b, 0x76, 0x2c, 0xc3, 0xc4, 0x2c, 0xe7, - 0x71, 0xaf, 0x4a, 0xbc, 0x87, 0x5b, 0x96, 0x53, 0xc2, 0xd5, 0x5b, 0x86, 0xb1, 0xd5, 0xc4, 0xf4, - 0xdd, 0xc6, 0xee, 0xe6, 0xa9, 0x8e, 0x65, 0xee, 0xd6, 0x2d, 0xf6, 0xf6, 0xda, 0xee, 0xb7, 0x0d, - 0xdc, 0xa9, 0x9b, 0x7a, 0xdb, 0x32, 0x4c, 0x9a, 0x63, 0xf6, 0x83, 0x7f, 0x97, 0x02, 0x49, 0x6d, - 0xd7, 0xd1, 0x27, 0xc6, 0x40, 0xca, 0xb5, 0xdb, 0xe8, 0xdb, 0x49, 0x80, 0x45, 0x6c, 0x9d, 0xc3, - 0x66, 0x47, 0x37, 0x5a, 0x68, 0x1c, 0xb2, 0x2a, 0xfe, 0x91, 0x5d, 0xdc, 0xb1, 0xd0, 0xe7, 0x93, - 0x30, 0xa6, 0xe2, 0x4e, 0xdb, 0x68, 0x75, 0xb0, 0xf2, 0x20, 0xa4, 0xb1, 0x69, 0x1a, 0xe6, 0x4c, - 0xe2, 0xda, 0xc4, 0xcd, 0x13, 0xa7, 0x4f, 0xce, 0xb1, 0x86, 0xcf, 0xa9, 0xed, 0xfa, 0x5c, 0xae, - 0xdd, 0x9e, 0xf3, 0xca, 0x98, 0x73, 0x3e, 0x9a, 0x2b, 0xda, 0x5f, 0xa8, 0xf4, 0x43, 0x65, 0x06, - 0xb2, 0x7b, 0x34, 0xc3, 0x4c, 0xf2, 0xda, 0xc4, 0xcd, 0xe3, 0xaa, 0xf3, 0x68, 0xbf, 0x69, 0x60, - 0x4b, 0xd3, 0x9b, 0x9d, 0x19, 0x89, 0xbe, 0x61, 0x8f, 0xe8, 0x33, 0x09, 0x48, 0x93, 0x42, 0x94, - 0x3c, 0xa4, 0xea, 0x46, 0x03, 0x93, 0xea, 0xa7, 0x4f, 0x9f, 0x12, 0xaf, 0x7e, 0x2e, 0x6f, 0x34, - 0xb0, 0x4a, 0x3e, 0x56, 0xae, 0x85, 0x09, 0x87, 0x21, 0x1e, 0x19, 0xfe, 0xa4, 0xd9, 0x06, 0xa4, - 0xec, 0xfc, 0xca, 0x18, 0xa4, 0xca, 0x6b, 0xcb, 0xcb, 0xf2, 0x11, 0xe5, 0x0a, 0x98, 0x5a, 0x2b, - 0x9f, 0x2d, 0x57, 0xce, 0x97, 0xd7, 0x8b, 0xaa, 0x5a, 0x51, 0xe5, 0x84, 0x32, 0x05, 0xe3, 0xf3, - 0xb9, 0xc2, 0x7a, 0xa9, 0xbc, 0xba, 0x56, 0x93, 0x93, 0xca, 0x31, 0x90, 0xcf, 0x15, 0xd5, 0x6a, - 0xa9, 0x52, 0x5e, 0x2f, 0x55, 0xd7, 0x8b, 0x2b, 0xab, 0xb5, 0x87, 0x65, 0xc9, 0xce, 0x54, 0xae, - 0xd4, 0xd6, 0x17, 0x2a, 0x6b, 0xe5, 0x82, 0x8c, 0x95, 0x09, 0xc8, 0xd6, 0x4a, 0x2b, 0xc5, 0xca, - 0x5a, 0x4d, 0xde, 0x44, 0x7f, 0x20, 0xc1, 0x74, 0x15, 0x5b, 0x05, 0xbc, 0xa7, 0xd7, 0x71, 0xd5, - 0xd2, 0x2c, 0x8c, 0x5e, 0x9b, 0x70, 0x19, 0xaf, 0xac, 0xd9, 0x64, 0xba, 0xaf, 0x58, 0x93, 0xef, - 0xdc, 0xd7, 0x64, 0xbe, 0x84, 0x39, 0xf6, 0xf5, 0x9c, 0x2f, 0x4d, 0xf5, 0x97, 0x33, 0x7b, 0x1b, - 0x4c, 0xf8, 0xde, 0x29, 0xd3, 0x00, 0xf3, 0xb9, 0xfc, 0xd9, 0x45, 0x95, 0x50, 0x78, 0xc4, 0x7e, - 0x5e, 0xa8, 0xa8, 0x45, 0xf6, 0x9c, 0x40, 0xaf, 0xf5, 0xc3, 0x5f, 0xe0, 0xe1, 0x9f, 0xeb, 0x4f, - 0x4c, 0x0f, 0x11, 0x40, 0xef, 0x73, 0xe1, 0x5c, 0xe4, 0xe0, 0xbc, 0x33, 0x5a, 0x71, 0xd1, 0x20, - 0x5d, 0x1a, 0x0c, 0xd2, 0x72, 0xa5, 0x50, 0x5c, 0xb7, 0x11, 0xac, 0xd6, 0x72, 0x6a, 0xad, 0x58, - 0x90, 0x31, 0xfa, 0xb5, 0x24, 0x8c, 0x55, 0xb7, 0x77, 0xad, 0x86, 0x71, 0x91, 0xeb, 0x28, 0x3f, - 0xe1, 0xe7, 0xd4, 0xfd, 0x3c, 0xa7, 0x6e, 0xde, 0xdf, 0x34, 0x56, 0x42, 0x00, 0x8f, 0xfe, 0xd0, - 0xe5, 0x51, 0x8e, 0xe3, 0xd1, 0x6d, 0xa2, 0x05, 0x1d, 0x16, 0x77, 0x3e, 0x3b, 0x05, 0x99, 0xf3, - 0x5a, 0xb3, 0x89, 0x2d, 0xf4, 0x37, 0x49, 0xc8, 0xe4, 0x4d, 0x6c, 0xcb, 0xf5, 0x2d, 0x9e, 0x58, - 0x23, 0x18, 0x33, 0x0d, 0xc3, 0x5a, 0xd5, 0xac, 0x6d, 0xd2, 0xa6, 0x71, 0xd5, 0x7d, 0xbe, 0x3b, - 0xf5, 0xc4, 0xd7, 0xa4, 0x04, 0xfa, 0x1d, 0x3f, 0x23, 0x1f, 0xe0, 0x19, 0xf9, 0xfd, 0x5c, 0xfb, - 0x69, 0x45, 0x73, 0xb4, 0x92, 0x00, 0x85, 0x83, 0x60, 0x6c, 0xa7, 0x85, 0x77, 0x8c, 0x96, 0x5e, - 0x67, 0x2d, 0x77, 0x9f, 0xd1, 0x07, 0x5d, 0x2e, 0xcf, 0x73, 0x5c, 0x9e, 0x13, 0xae, 0x25, 0x1a, - 0x9b, 0xab, 0x03, 0xb0, 0xf9, 0xa5, 0x70, 0xd5, 0x42, 0xae, 0xb4, 0x5c, 0x2c, 0xac, 0xd7, 0x2a, - 0xeb, 0x79, 0xb5, 0x98, 0xab, 0x15, 0xd7, 0x97, 0x2b, 0xf9, 0xdc, 0xf2, 0xba, 0x5a, 0x5c, 0xad, - 0xc8, 0x18, 0xfd, 0xd7, 0xa4, 0xcd, 0xdc, 0xba, 0xb1, 0x87, 0x4d, 0xb4, 0x28, 0xc4, 0xe7, 0x30, - 0x9e, 0x30, 0x0c, 0x7e, 0x41, 0x58, 0xeb, 0x33, 0xee, 0x30, 0x0a, 0x02, 0xc4, 0xf9, 0x43, 0x42, - 0x1a, 0x3c, 0xb4, 0xa8, 0x17, 0x00, 0xa7, 0xff, 0x47, 0x12, 0xb2, 0x79, 0xa3, 0xb5, 0x87, 0x4d, - 0x0b, 0x3d, 0xc0, 0x71, 0xda, 0xe5, 0x66, 0x82, 0xe7, 0xa6, 0x3d, 0xa8, 0xe1, 0x96, 0x65, 0x1a, - 0xed, 0xcb, 0xce, 0x70, 0xc7, 0x1e, 0xd1, 0x6f, 0x44, 0xe5, 0x30, 0xab, 0x39, 0x78, 0x5c, 0xed, - 0x5d, 0x11, 0x47, 0x9e, 0xd4, 0xd5, 0x01, 0x9e, 0x8e, 0x82, 0x4b, 0x6f, 0x02, 0xa2, 0xe1, 0x72, - 0x3a, 0x3a, 0x2e, 0xe8, 0x53, 0x49, 0x98, 0xa2, 0x9d, 0xaf, 0x8a, 0x3b, 0x64, 0x7a, 0x72, 0x8b, - 0x10, 0xf3, 0x99, 0x28, 0xff, 0xa2, 0x9f, 0xd1, 0x0b, 0x3c, 0xa3, 0x6f, 0x0f, 0xee, 0xe8, 0xac, - 0xae, 0x00, 0x76, 0x1f, 0x83, 0xb4, 0x65, 0x5c, 0xc0, 0x4e, 0x1b, 0xe9, 0x03, 0xfa, 0x4d, 0x97, - 0x9d, 0x25, 0x8e, 0x9d, 0x2f, 0x8f, 0x5a, 0x4d, 0xfc, 0x4c, 0x7d, 0x7b, 0x12, 0x26, 0xf3, 0x4d, - 0xa3, 0xe3, 0xf2, 0xf4, 0xa5, 0x1e, 0x4f, 0xdd, 0xc6, 0x25, 0xfc, 0x8d, 0x7b, 0x3e, 0xe1, 0xe3, - 0x63, 0x91, 0xe7, 0x63, 0x6f, 0x79, 0xf1, 0x15, 0x1f, 0xa0, 0x17, 0x7e, 0xc3, 0x65, 0xd8, 0x12, - 0xc7, 0xb0, 0x97, 0x45, 0x2c, 0x2f, 0x7e, 0x7e, 0xfd, 0xe1, 0xf7, 0x41, 0x36, 0x57, 0xaf, 0x1b, - 0xbb, 0x2d, 0x0b, 0xfd, 0x55, 0x02, 0x32, 0x79, 0xa3, 0xb5, 0xa9, 0x6f, 0x29, 0x37, 0xc2, 0x34, - 0x6e, 0x69, 0x1b, 0x4d, 0x5c, 0xd0, 0x2c, 0x6d, 0x4f, 0xc7, 0x17, 0x49, 0x03, 0xc6, 0xd4, 0xae, - 0x54, 0x9b, 0x28, 0x96, 0x82, 0x37, 0x76, 0xb7, 0x08, 0x51, 0x63, 0xaa, 0x3f, 0x49, 0xb9, 0x0b, - 0xae, 0xa4, 0x8f, 0xab, 0x26, 0x36, 0x71, 0x13, 0x6b, 0x1d, 0x9c, 0xdf, 0xd6, 0x5a, 0x2d, 0xdc, - 0x24, 0xbd, 0x76, 0x4c, 0x0d, 0x7a, 0xad, 0xcc, 0xc2, 0x24, 0x7d, 0x55, 0x6d, 0x6b, 0x75, 0xdc, - 0x99, 0x49, 0x91, 0xec, 0x5c, 0x9a, 0x72, 0x1b, 0xa4, 0xf1, 0x25, 0xcb, 0xd4, 0x66, 0x1a, 0x04, - 0xaf, 0x2b, 0xe7, 0xe8, 0x12, 0x61, 0xce, 0x59, 0x22, 0xcc, 0x55, 0xc9, 0x02, 0x42, 0xa5, 0xb9, - 0xd0, 0x87, 0x32, 0xee, 0xd0, 0xfd, 0x26, 0xdf, 0x94, 0x54, 0x81, 0x54, 0x4b, 0xdb, 0xc1, 0x4c, - 0x2e, 0xc8, 0x7f, 0xe5, 0x24, 0x1c, 0xd5, 0xf6, 0x34, 0x4b, 0x33, 0x97, 0xed, 0xc5, 0x0b, 0x19, - 0x6e, 0x08, 0xcb, 0x97, 0x8e, 0xa8, 0xdd, 0x2f, 0x94, 0xab, 0x61, 0x9c, 0xac, 0x6e, 0x48, 0x2e, - 0xaa, 0x8b, 0xbc, 0x04, 0xe5, 0x66, 0x38, 0xaa, 0x35, 0xdb, 0xdb, 0x5a, 0xa9, 0xb5, 0xa7, 0x5b, - 0xd8, 0x46, 0x68, 0xe6, 0x18, 0xc9, 0xd3, 0x9d, 0x4c, 0x3b, 0xf6, 0xfc, 0x18, 0x64, 0x68, 0x05, - 0xe8, 0x97, 0xd2, 0xc2, 0x6b, 0x14, 0x0a, 0x61, 0xf8, 0x94, 0xe1, 0x76, 0xc8, 0x6a, 0x34, 0x1f, - 0x69, 0xca, 0xc4, 0xe9, 0xe3, 0x6e, 0x19, 0x64, 0xb9, 0xe6, 0x94, 0xa2, 0x3a, 0xd9, 0x94, 0x3b, - 0x21, 0x53, 0x27, 0x02, 0x41, 0x5a, 0x35, 0x71, 0xfa, 0xaa, 0xde, 0x95, 0x92, 0x2c, 0x2a, 0xcb, - 0x8a, 0xbe, 0x2c, 0x09, 0x2d, 0x6b, 0xc2, 0x28, 0x8e, 0x26, 0xf7, 0xdf, 0x4c, 0x0e, 0x30, 0x2a, - 0xde, 0x0a, 0x37, 0xe7, 0xf2, 0xf9, 0xca, 0x5a, 0xb9, 0xc6, 0xc6, 0xc4, 0xc2, 0xfa, 0xfc, 0x5a, - 0x6d, 0xdd, 0x1b, 0x29, 0xc9, 0xdc, 0x6f, 0xdd, 0x9e, 0x0a, 0xca, 0xb6, 0x34, 0xdc, 0xd8, 0x27, - 0x77, 0xb1, 0xb6, 0x5e, 0xce, 0xad, 0x14, 0xe5, 0x4d, 0x81, 0x92, 0x8b, 0xb5, 0xf5, 0xdc, 0xb9, - 0x5c, 0x2d, 0xa7, 0xca, 0x5b, 0xfc, 0xe8, 0x5c, 0xad, 0x55, 0x56, 0xd7, 0xd5, 0xb5, 0x72, 0xb9, - 0x54, 0x5e, 0xa4, 0x55, 0xdb, 0x93, 0x9a, 0xe3, 0x5e, 0x86, 0xf3, 0x6a, 0xa9, 0x56, 0x5c, 0xcf, - 0x57, 0xca, 0x0b, 0xa5, 0x45, 0x59, 0xef, 0x37, 0xb4, 0x3f, 0xa2, 0x1c, 0x83, 0xa3, 0xb4, 0xd1, - 0xe7, 0xe8, 0x77, 0x85, 0xa2, 0xfc, 0x93, 0x59, 0x65, 0x1a, 0xc6, 0xcb, 0xc5, 0x1a, 0xe3, 0xcc, - 0x63, 0x59, 0xe5, 0x2a, 0x38, 0x6e, 0x3f, 0xe7, 0x2b, 0xe5, 0x72, 0x31, 0x5f, 0xb3, 0x97, 0x7a, - 0x6a, 0x71, 0x61, 0xad, 0x5a, 0x2c, 0xc8, 0x3f, 0x95, 0x55, 0x64, 0x98, 0xb0, 0x5f, 0x56, 0x16, - 0x16, 0x96, 0x4b, 0xe5, 0xa2, 0xfc, 0x78, 0x16, 0xbd, 0x25, 0xe5, 0xcd, 0xcc, 0x7c, 0x0b, 0x85, - 0xd7, 0xa4, 0x7c, 0xd2, 0x9a, 0xe3, 0xa5, 0xf5, 0x96, 0x9e, 0xd8, 0x87, 0x4f, 0xae, 0x9e, 0x71, - 0xe5, 0xa8, 0xc0, 0xc9, 0xd1, 0xed, 0x11, 0xca, 0x8a, 0x26, 0x48, 0x1f, 0x1f, 0x44, 0x90, 0x5e, - 0x0c, 0x57, 0x94, 0x2b, 0xeb, 0x0c, 0xf1, 0xaa, 0xbb, 0x24, 0xbe, 0x16, 0xae, 0x2e, 0x17, 0x29, - 0x30, 0x6a, 0x31, 0x5f, 0x39, 0x57, 0x54, 0xd7, 0xcf, 0xe7, 0x96, 0x97, 0x8b, 0xb5, 0xf5, 0x85, - 0x92, 0x5a, 0xad, 0xc9, 0x9b, 0xfd, 0xc0, 0xdb, 0x52, 0xae, 0x83, 0x97, 0x7a, 0xcf, 0xeb, 0xc5, - 0x1f, 0x2c, 0x55, 0x6b, 0x55, 0x22, 0x4a, 0xf9, 0x8a, 0xaa, 0xae, 0xad, 0xda, 0x0b, 0x93, 0x6d, - 0xe5, 0x38, 0x28, 0x5e, 0x29, 0xea, 0x5a, 0x99, 0x8a, 0x8d, 0x6e, 0xd7, 0xcf, 0xea, 0x73, 0xaa, - 0xb7, 0x17, 0x34, 0xab, 0x45, 0x75, 0xa1, 0xa2, 0xae, 0x14, 0x0b, 0xf2, 0x23, 0xfd, 0x24, 0xef, - 0x82, 0x72, 0x23, 0xcc, 0xe6, 0xca, 0x95, 0xda, 0x52, 0x51, 0x5d, 0xcf, 0x95, 0x1f, 0xae, 0x3d, - 0xbc, 0x5a, 0x5c, 0x5f, 0x55, 0x2b, 0xf9, 0x62, 0xb5, 0xba, 0x5e, 0xaa, 0x3a, 0x99, 0xe5, 0xa6, - 0x4d, 0x82, 0x23, 0xf0, 0xa5, 0xea, 0x7a, 0xa1, 0xb8, 0x5c, 0xb4, 0x49, 0xdb, 0x41, 0xaf, 0x96, - 0x20, 0x53, 0xc0, 0x4d, 0x6c, 0x61, 0xf4, 0x7d, 0x9e, 0xb2, 0x3d, 0x0e, 0x19, 0x13, 0xdb, 0x13, - 0x2e, 0x36, 0xa4, 0xb0, 0x27, 0xf4, 0x57, 0xc9, 0xa8, 0xca, 0x8e, 0x96, 0x1d, 0xa0, 0xec, 0x5e, - 0x0e, 0x99, 0x8e, 0xa5, 0x59, 0xbb, 0x1d, 0xa6, 0xeb, 0xae, 0xe9, 0xad, 0xeb, 0xe6, 0xaa, 0x24, - 0x93, 0xca, 0x32, 0xa3, 0xbf, 0x48, 0x44, 0x51, 0x5e, 0x3d, 0x29, 0x88, 0x26, 0x73, 0xfa, 0x00, - 0x22, 0x77, 0x02, 0x90, 0x8f, 0xe1, 0xb9, 0x65, 0xb5, 0x98, 0x2b, 0x3c, 0xec, 0x32, 0x1e, 0xdb, - 0x22, 0xe9, 0x7f, 0x9f, 0xaf, 0x95, 0xce, 0x15, 0xe5, 0x4d, 0xf4, 0xa1, 0x34, 0x64, 0xaa, 0xb8, - 0x89, 0xeb, 0x16, 0xba, 0xc7, 0xc3, 0x63, 0x1a, 0x92, 0x7a, 0x83, 0x0d, 0x7d, 0x49, 0xbd, 0xc1, - 0x2d, 0xb0, 0x92, 0x3d, 0x17, 0xb2, 0xcf, 0xa7, 0xa2, 0x22, 0x45, 0x6b, 0x3d, 0xdc, 0x61, 0xe9, - 0x23, 0x91, 0x86, 0xa5, 0x9e, 0x14, 0x47, 0x43, 0xf6, 0x33, 0xc9, 0x18, 0x16, 0x6b, 0x22, 0x4a, - 0x61, 0x33, 0x40, 0x29, 0x74, 0x0d, 0x36, 0x0b, 0xa5, 0x72, 0x61, 0xdd, 0x95, 0x93, 0xf2, 0x42, - 0x45, 0xde, 0x56, 0xe6, 0xe0, 0xa4, 0xaf, 0x74, 0x5b, 0x63, 0xb0, 0x1a, 0x72, 0xe5, 0xc2, 0xfa, - 0x4a, 0xb9, 0xb8, 0x52, 0x29, 0x97, 0xf2, 0xd4, 0x34, 0x52, 0xac, 0x51, 0x2d, 0xd3, 0xa5, 0x43, - 0xaa, 0xc5, 0x9c, 0x9a, 0x5f, 0x22, 0xea, 0xa6, 0x50, 0x94, 0x1f, 0x51, 0x6e, 0x82, 0xeb, 0x7c, - 0xa4, 0x30, 0x55, 0xb4, 0xaa, 0x16, 0x0b, 0xc5, 0x85, 0x52, 0xd9, 0x1e, 0x1a, 0x97, 0x2b, 0xf9, - 0xb3, 0x55, 0x71, 0x6d, 0x83, 0xfe, 0x31, 0x09, 0xa9, 0xaa, 0x65, 0xb4, 0xd1, 0xf7, 0x7b, 0x32, - 0x7c, 0x02, 0xc0, 0xc4, 0x3b, 0xc6, 0x1e, 0x99, 0x98, 0x32, 0xbd, 0xe2, 0x4b, 0x41, 0x7f, 0x22, - 0x6e, 0xc3, 0x72, 0xd5, 0x82, 0xd1, 0x0e, 0x18, 0x97, 0xbe, 0x23, 0x66, 0xc3, 0x0a, 0x2e, 0x28, - 0x9a, 0x18, 0xfd, 0x4c, 0x62, 0x00, 0x31, 0x42, 0x70, 0xdc, 0xa7, 0x01, 0x6c, 0xbc, 0x1c, 0x06, - 0x62, 0xe5, 0x4a, 0x78, 0x51, 0x17, 0x66, 0x04, 0xaa, 0x4d, 0xe5, 0xfb, 0xe0, 0x1a, 0x3f, 0x54, - 0x2b, 0x95, 0x73, 0x45, 0x57, 0x3e, 0x0a, 0xb9, 0x5a, 0x4e, 0xde, 0x42, 0x9f, 0x96, 0x20, 0xb5, - 0x62, 0xec, 0x61, 0x74, 0x9d, 0xc7, 0xfc, 0x19, 0xc8, 0xb6, 0xf0, 0x45, 0x9f, 0x41, 0xc6, 0x79, - 0x44, 0x6f, 0x91, 0xa2, 0xb2, 0xdd, 0x2e, 0x3b, 0x80, 0xed, 0x5f, 0x48, 0x46, 0x61, 0x7b, 0x8f, - 0x82, 0xa2, 0xb1, 0xfd, 0x6f, 0x07, 0x61, 0x7b, 0x00, 0x6b, 0xb1, 0x32, 0x0b, 0x27, 0xbc, 0x17, - 0xa5, 0x42, 0xb1, 0x5c, 0x2b, 0x2d, 0x3c, 0xec, 0x31, 0xb7, 0xa4, 0x0a, 0xb1, 0xbf, 0x9f, 0x76, - 0x08, 0x9f, 0x2c, 0xce, 0xc0, 0x31, 0xef, 0xdd, 0x22, 0x9d, 0xef, 0xd9, 0x6f, 0x1e, 0x41, 0xbf, - 0x90, 0x86, 0x49, 0xaa, 0x2d, 0xd7, 0xda, 0x0d, 0x7b, 0x71, 0x74, 0x03, 0x67, 0x88, 0xb0, 0xf4, - 0x1d, 0xfc, 0x43, 0x46, 0xcb, 0x59, 0x1f, 0xb9, 0xcf, 0xe8, 0x93, 0xc2, 0x26, 0x08, 0x5e, 0x27, - 0xd3, 0x5a, 0x02, 0x70, 0x7e, 0x5e, 0xc8, 0xd8, 0x20, 0x50, 0x60, 0x34, 0xbc, 0x7f, 0x72, 0xd8, - 0xdd, 0x2c, 0x18, 0x8a, 0xcd, 0x40, 0x28, 0xb6, 0x66, 0x1f, 0x4f, 0xc2, 0x78, 0x4d, 0xdf, 0xc1, - 0xaf, 0x32, 0x5a, 0xb8, 0xa3, 0x64, 0x41, 0x5a, 0x5c, 0xa9, 0xc9, 0x47, 0xec, 0x3f, 0xc5, 0x7c, - 0x4d, 0x4e, 0x90, 0x3f, 0x45, 0xbb, 0x6a, 0xfb, 0x4f, 0xae, 0x26, 0x4b, 0xf6, 0x9f, 0x95, 0x62, - 0x4d, 0x4e, 0xd9, 0x7f, 0xca, 0xc5, 0x9a, 0x9c, 0xb6, 0xff, 0xac, 0x2e, 0xd7, 0xe4, 0x8c, 0xfd, - 0xa7, 0x54, 0xad, 0xc9, 0x59, 0xfb, 0xcf, 0x7c, 0xb5, 0x26, 0x8f, 0xd9, 0x7f, 0xce, 0x55, 0x6b, - 0xf2, 0xb8, 0xfd, 0x27, 0x5f, 0xab, 0xc9, 0x60, 0xff, 0x79, 0xa8, 0x5a, 0x93, 0x27, 0xec, 0x3f, - 0xb9, 0x7c, 0x4d, 0x9e, 0x24, 0x7f, 0x8a, 0x35, 0x79, 0xca, 0xfe, 0x53, 0xad, 0xd6, 0xe4, 0x69, - 0x52, 0x72, 0xb5, 0x26, 0x1f, 0x25, 0x75, 0x95, 0x6a, 0xb2, 0x6c, 0xff, 0x59, 0xaa, 0xd6, 0xe4, - 0x2b, 0x48, 0xe6, 0x6a, 0x4d, 0x56, 0x48, 0xa5, 0xd5, 0x9a, 0xfc, 0x22, 0x92, 0xa7, 0x5a, 0x93, - 0x8f, 0x91, 0x2a, 0xaa, 0x35, 0xf9, 0xc5, 0x84, 0x8c, 0x62, 0x4d, 0x3e, 0x4e, 0xf2, 0xa8, 0x35, - 0xf9, 0x4a, 0xf2, 0xaa, 0x5c, 0x93, 0x67, 0x08, 0x61, 0xc5, 0x9a, 0xfc, 0x12, 0xf2, 0x47, 0xad, - 0xc9, 0x88, 0xbc, 0xca, 0xd5, 0xe4, 0xab, 0xd0, 0x35, 0x30, 0xbe, 0x88, 0x2d, 0x8a, 0x2f, 0x92, - 0x41, 0x5a, 0xc4, 0x96, 0x7f, 0xb5, 0xf1, 0xfa, 0x19, 0x18, 0x3f, 0x6f, 0x98, 0x17, 0x3a, 0x6d, - 0xad, 0x8e, 0xd1, 0x7b, 0xe9, 0x3e, 0x5f, 0x7e, 0xd7, 0x34, 0x71, 0x8b, 0xcb, 0xf7, 0x94, 0xb8, - 0x99, 0xcc, 0x29, 0x6d, 0xce, 0x2b, 0x29, 0x60, 0xca, 0x72, 0x2d, 0x4c, 0x5c, 0x74, 0x72, 0x97, - 0x1a, 0x8e, 0x38, 0xf9, 0x92, 0x44, 0x4d, 0x66, 0xfd, 0xab, 0x8c, 0xdf, 0x04, 0xf4, 0x8e, 0x24, - 0x64, 0x16, 0xb1, 0x95, 0x6b, 0x36, 0xfd, 0x7c, 0x7b, 0xd2, 0xcf, 0xb7, 0x79, 0x9e, 0x6f, 0xb7, - 0x06, 0x37, 0x22, 0xd7, 0x6c, 0x06, 0xf0, 0x6c, 0x16, 0x26, 0x7d, 0x0c, 0xb2, 0xa7, 0xe5, 0xd2, - 0xcd, 0xe3, 0x2a, 0x97, 0x86, 0x7e, 0xdd, 0xe5, 0x5a, 0x91, 0xe3, 0xda, 0x1d, 0x51, 0x2a, 0x8c, - 0x9f, 0x63, 0x1f, 0xf0, 0x76, 0x80, 0xae, 0x09, 0xb5, 0x22, 0xa1, 0xd7, 0x0d, 0xc0, 0xc5, 0x50, - 0x1b, 0x4e, 0x7f, 0xc9, 0x8b, 0xca, 0xc3, 0x21, 0x18, 0x60, 0x06, 0xe1, 0xe1, 0x7b, 0xc7, 0x20, - 0x53, 0xd9, 0x78, 0xc4, 0x5e, 0x8c, 0x3c, 0x9f, 0x04, 0x29, 0xd7, 0x68, 0x74, 0x8d, 0x3a, 0x06, - 0x79, 0x59, 0x72, 0x96, 0x26, 0xee, 0x33, 0xfa, 0xf8, 0x00, 0x3d, 0x9a, 0xd6, 0x34, 0x97, 0x6b, - 0x34, 0x82, 0xb7, 0xd3, 0xdc, 0x0a, 0x93, 0x7c, 0x85, 0xca, 0x1d, 0xfc, 0x0e, 0x7e, 0x88, 0x99, - 0xd1, 0xdd, 0xda, 0x8f, 0xda, 0xfd, 0x03, 0xe9, 0x8b, 0x1f, 0x88, 0x2f, 0x24, 0x21, 0xbb, 0xac, - 0x77, 0x2c, 0x1b, 0x81, 0x9b, 0x3c, 0x04, 0xae, 0x86, 0x71, 0x87, 0x01, 0x9d, 0x99, 0x04, 0xe9, - 0xab, 0x5e, 0x02, 0x7a, 0xb3, 0x1f, 0x83, 0x87, 0x78, 0x0c, 0x5e, 0x16, 0xde, 0x46, 0x56, 0x57, - 0x00, 0x0e, 0x5c, 0xb5, 0xc9, 0xee, 0x6a, 0x7f, 0xc7, 0x65, 0xeb, 0x0a, 0xc7, 0xd6, 0x33, 0x83, - 0x54, 0x19, 0x3f, 0x6b, 0x3f, 0x9b, 0x04, 0xb0, 0xeb, 0x56, 0xc9, 0x4a, 0x44, 0x9c, 0xbb, 0xaf, - 0xf7, 0x73, 0x77, 0x85, 0xe7, 0xee, 0x2b, 0xfb, 0x37, 0x95, 0x56, 0x17, 0xc0, 0x60, 0x19, 0x24, - 0xdd, 0x65, 0xad, 0xfd, 0x17, 0xbd, 0xc3, 0x65, 0xea, 0x2a, 0xc7, 0xd4, 0x7b, 0x07, 0xac, 0x29, - 0x7e, 0xbe, 0xfe, 0x5d, 0x12, 0xe4, 0x2a, 0xb6, 0x4a, 0x9d, 0x25, 0x7d, 0x6b, 0xbb, 0xa9, 0x6f, - 0x6d, 0x5b, 0xb8, 0x81, 0xce, 0x0a, 0x69, 0x0f, 0xe5, 0x7a, 0x98, 0xd2, 0xfd, 0xdf, 0xb1, 0x3d, - 0x0b, 0x3e, 0x11, 0xfd, 0xb4, 0x1f, 0x81, 0x65, 0x1e, 0x81, 0x57, 0x04, 0xf0, 0xa5, 0x9b, 0xa2, - 0x80, 0xf9, 0xed, 0xef, 0xba, 0xec, 0xae, 0x70, 0xec, 0xbe, 0x67, 0xb0, 0x62, 0x47, 0xb2, 0xa5, - 0xe6, 0x98, 0x8d, 0x7c, 0x1b, 0x94, 0x5d, 0x03, 0x51, 0x62, 0xff, 0x40, 0xf4, 0x3f, 0x13, 0xd1, - 0xc7, 0xbe, 0x30, 0x43, 0x51, 0xe4, 0x91, 0x6d, 0x08, 0x36, 0x9c, 0x41, 0xf8, 0xf5, 0x13, 0x12, - 0x64, 0x8a, 0x97, 0xda, 0x06, 0xbf, 0x9b, 0xae, 0x40, 0xaa, 0xed, 0x2d, 0x91, 0xc9, 0x7f, 0x81, - 0xc1, 0xfc, 0x3d, 0x03, 0xcc, 0x1f, 0x68, 0xdd, 0x01, 0xdd, 0xdf, 0x21, 0x23, 0xe9, 0x23, 0xe3, - 0x56, 0x48, 0x13, 0x2f, 0x3c, 0x36, 0xba, 0x79, 0xe6, 0x37, 0xa7, 0x88, 0xa2, 0xfd, 0x56, 0xa5, - 0x99, 0x22, 0xa3, 0xd0, 0x93, 0x9c, 0xf8, 0x51, 0x78, 0xe3, 0x6b, 0x12, 0xee, 0x04, 0xe3, 0xa7, - 0x53, 0x90, 0xaa, 0xb4, 0x71, 0x0b, 0xbd, 0x3d, 0xc1, 0xa9, 0xe0, 0xba, 0xd1, 0xb2, 0xf0, 0x25, - 0x4f, 0x4b, 0x78, 0x09, 0xa1, 0xf3, 0x81, 0x19, 0xc8, 0x5a, 0x26, 0x85, 0x8c, 0x79, 0xf4, 0xb1, - 0x47, 0xa5, 0x0c, 0xb3, 0x7a, 0xab, 0xde, 0xdc, 0x6d, 0x60, 0x15, 0x37, 0x35, 0x9b, 0xf6, 0x4e, - 0xae, 0x53, 0xc0, 0x6d, 0xdc, 0x6a, 0xe0, 0x96, 0x45, 0xa9, 0x71, 0x36, 0x32, 0x05, 0x72, 0xf2, - 0x0b, 0xec, 0xfb, 0x78, 0xf8, 0x6f, 0xe2, 0xf8, 0xcd, 0x94, 0xb2, 0xdd, 0xca, 0x00, 0xe4, 0xcf, - 0x00, 0xd0, 0x16, 0x9c, 0xd3, 0xf1, 0x45, 0x66, 0x69, 0x7d, 0x49, 0x97, 0xa5, 0xb5, 0xe2, 0x66, - 0x50, 0x7d, 0x99, 0xd1, 0x9f, 0xba, 0x90, 0x3f, 0xc8, 0x41, 0x7e, 0xab, 0x20, 0x09, 0xd1, 0xd0, - 0xfe, 0xff, 0x07, 0x58, 0x88, 0x73, 0xfe, 0x88, 0x92, 0xf2, 0x12, 0x78, 0xb1, 0x63, 0x43, 0x2c, - 0x17, 0x8b, 0x85, 0xea, 0xfa, 0xda, 0xea, 0xa2, 0x9a, 0x2b, 0x14, 0x65, 0x40, 0xef, 0x4b, 0x42, - 0x9a, 0xec, 0xb8, 0xa3, 0xfc, 0x10, 0x64, 0x01, 0x7d, 0x33, 0x21, 0x6a, 0xe2, 0x62, 0xec, 0x21, - 0x75, 0x07, 0x28, 0xb8, 0x37, 0x0a, 0x59, 0x16, 0x43, 0x0a, 0x8a, 0xbf, 0x5b, 0xd9, 0x5d, 0xa9, - 0xba, 0x6d, 0x5c, 0xfc, 0x7f, 0xbf, 0x2b, 0xd9, 0xad, 0x3c, 0xe4, 0xae, 0xd4, 0x83, 0x84, 0x17, - 0x52, 0x57, 0x7a, 0x32, 0xe5, 0x2e, 0x83, 0x9f, 0xf2, 0x49, 0x83, 0x6f, 0xb9, 0x94, 0x10, 0x5b, - 0x2e, 0x29, 0x39, 0x98, 0xd2, 0x5b, 0x16, 0x36, 0x5b, 0x5a, 0x73, 0xa1, 0xa9, 0x6d, 0xd1, 0xe9, - 0xa9, 0x7f, 0x5f, 0x87, 0xf2, 0xb4, 0xe4, 0xcb, 0xa3, 0xf2, 0x5f, 0x28, 0x27, 0x00, 0x2c, 0xbc, - 0xd3, 0x6e, 0x6a, 0x96, 0x27, 0x4c, 0xbe, 0x14, 0xf4, 0x0d, 0x61, 0xef, 0x4b, 0xa7, 0x7f, 0xf5, - 0xf1, 0xbe, 0x74, 0x65, 0x5a, 0xea, 0x92, 0x69, 0x77, 0x38, 0x4d, 0x09, 0x0c, 0xa7, 0x7e, 0x6e, - 0xa5, 0x05, 0x17, 0x97, 0x6f, 0x12, 0x72, 0xef, 0x0c, 0x6b, 0x46, 0xfc, 0x7a, 0xe2, 0x29, 0x09, - 0xa6, 0x69, 0xd5, 0xf3, 0x86, 0x71, 0x61, 0x47, 0x33, 0x2f, 0xa0, 0x7b, 0x0f, 0x22, 0x22, 0xe8, - 0x13, 0x7e, 0xfc, 0x16, 0x79, 0xfc, 0xee, 0x08, 0x6e, 0xb8, 0x53, 0xfb, 0x68, 0x96, 0xfd, 0x6f, - 0x73, 0x91, 0x79, 0x88, 0x43, 0xe6, 0x15, 0x91, 0x09, 0x8c, 0x1f, 0xa1, 0x77, 0xba, 0x08, 0x39, - 0x6a, 0xf3, 0x80, 0x08, 0x7d, 0x65, 0x30, 0x84, 0x9c, 0xda, 0x07, 0x40, 0x48, 0x06, 0xe9, 0x02, - 0xbe, 0xcc, 0x3a, 0xa0, 0xfd, 0xd7, 0x4f, 0x76, 0x2a, 0x3e, 0xcc, 0x02, 0x48, 0x1e, 0x09, 0x66, - 0xc7, 0x78, 0x12, 0x2a, 0xed, 0x21, 0x20, 0xf7, 0x97, 0xc2, 0xf6, 0x86, 0x9e, 0x6c, 0xa0, 0x34, - 0x8c, 0xa6, 0x87, 0x89, 0x19, 0x2b, 0xc4, 0xc9, 0x8c, 0x1f, 0xb3, 0xcf, 0xa7, 0x60, 0xdc, 0xf1, - 0x89, 0xb5, 0xd0, 0x7b, 0x12, 0x9c, 0x27, 0x4c, 0xc7, 0xd8, 0x35, 0xeb, 0x98, 0x59, 0x80, 0xd8, - 0x93, 0x9f, 0x2d, 0x49, 0xc1, 0x01, 0xb4, 0xcf, 0xe8, 0xb7, 0x7f, 0x80, 0x4d, 0x45, 0x1d, 0x60, - 0xd1, 0x6b, 0x25, 0xd1, 0xa5, 0x28, 0xc7, 0xfd, 0x2a, 0xb6, 0x5e, 0x88, 0x63, 0xe8, 0x07, 0x84, - 0x56, 0xb1, 0x7d, 0x5a, 0x12, 0x4d, 0x78, 0x2a, 0x03, 0x4c, 0xc6, 0xae, 0x82, 0x2b, 0x9d, 0x1c, - 0x95, 0xf9, 0x87, 0x8a, 0xf9, 0xda, 0x3a, 0x99, 0x89, 0xad, 0xa9, 0xcb, 0xb2, 0x84, 0x1e, 0x4b, - 0x81, 0x4c, 0x49, 0xa3, 0x74, 0xd6, 0x2e, 0xb7, 0x31, 0xfa, 0xd1, 0x43, 0x9e, 0x88, 0xa1, 0x6f, - 0xf9, 0x95, 0x49, 0x89, 0x97, 0x93, 0x3b, 0x83, 0xb9, 0xeb, 0x35, 0x21, 0x40, 0x5c, 0x06, 0xe8, - 0x15, 0x21, 0x12, 0x86, 0x3e, 0xea, 0x0a, 0xc0, 0x32, 0x27, 0x00, 0x77, 0x0d, 0x40, 0xe2, 0x21, - 0xcb, 0xc1, 0xc7, 0x92, 0x30, 0xe5, 0x4c, 0x23, 0x16, 0xb0, 0x55, 0xdf, 0x46, 0x67, 0x44, 0xd7, - 0x66, 0x32, 0x48, 0xbb, 0x66, 0x93, 0x51, 0x69, 0xff, 0x45, 0xff, 0x9c, 0x10, 0xdd, 0x5d, 0x61, - 0xbc, 0xe1, 0x6a, 0x0e, 0x58, 0xd8, 0x8a, 0x6d, 0x87, 0x08, 0x14, 0x18, 0xbf, 0xba, 0xfe, 0x52, - 0x12, 0xa0, 0x66, 0xb8, 0x93, 0xd6, 0x03, 0x70, 0x92, 0x3b, 0xa0, 0x91, 0xe7, 0x39, 0xd9, 0x73, - 0x45, 0xef, 0x55, 0x1b, 0x7d, 0x2c, 0x45, 0x6f, 0x71, 0x59, 0xbc, 0xc0, 0xb1, 0xf8, 0x74, 0xa4, - 0x9a, 0xe2, 0xe7, 0xef, 0xfb, 0x92, 0x30, 0x5e, 0xd8, 0x6d, 0x37, 0xf5, 0xba, 0xbd, 0x6e, 0xbc, - 0x49, 0x90, 0xbd, 0xe8, 0xb1, 0x64, 0xc4, 0xd1, 0xc7, 0xad, 0x23, 0x80, 0x97, 0xd4, 0xed, 0x31, - 0xe9, 0xb8, 0x3d, 0x0a, 0x9a, 0x35, 0xfb, 0x14, 0x3e, 0x02, 0xf1, 0x94, 0xe0, 0x68, 0xa5, 0x8d, - 0x5b, 0xf3, 0x26, 0xd6, 0x1a, 0x75, 0x73, 0x77, 0x67, 0xa3, 0x83, 0x72, 0xa2, 0x32, 0xea, 0xb3, - 0xb6, 0x24, 0x39, 0x6b, 0x0b, 0xfa, 0x29, 0xff, 0xe0, 0xbe, 0xc4, 0xb3, 0xf7, 0x74, 0x90, 0x95, - 0xcf, 0x47, 0xc3, 0x00, 0x93, 0xbf, 0x48, 0x56, 0xe7, 0x2e, 0x93, 0x4b, 0x2a, 0x8a, 0xc9, 0xe5, - 0xb7, 0x5c, 0x64, 0xcf, 0x72, 0xc8, 0xbe, 0x32, 0x7a, 0xbb, 0x46, 0xb2, 0x79, 0x30, 0x5d, 0xc5, - 0x56, 0x00, 0xbc, 0xd7, 0xc3, 0xd4, 0x86, 0xf7, 0xc6, 0x85, 0x98, 0x4f, 0xec, 0xb1, 0xc5, 0xf7, - 0xf6, 0xa8, 0x4b, 0x33, 0x9e, 0x84, 0x00, 0x74, 0x5d, 0x04, 0x93, 0x22, 0xfb, 0x06, 0x91, 0xd6, - 0x59, 0xa1, 0xf5, 0xc7, 0x8f, 0xc2, 0x87, 0x93, 0x30, 0x51, 0xdd, 0xd6, 0x4c, 0x3c, 0x7f, 0x79, - 0x59, 0x6f, 0x5d, 0x10, 0xf5, 0x4c, 0x78, 0xb5, 0x9f, 0xcd, 0x0a, 0xa4, 0x9a, 0x7a, 0xeb, 0x82, - 0xb3, 0xe1, 0x63, 0xff, 0xf7, 0x0e, 0x9a, 0x27, 0x7b, 0x1c, 0x34, 0x77, 0x8d, 0x7e, 0x6e, 0xbd, - 0x01, 0xa3, 0xe9, 0x5b, 0x85, 0x0e, 0x9a, 0xf7, 0x2d, 0x2e, 0x7e, 0x36, 0x7e, 0x2e, 0x09, 0x47, - 0x73, 0x8d, 0xc6, 0x79, 0xdd, 0xda, 0xae, 0x38, 0x3c, 0x7a, 0x40, 0x6c, 0x9b, 0x76, 0x06, 0xb2, - 0x6d, 0xed, 0x72, 0xd3, 0xd0, 0x5c, 0x55, 0xc5, 0x1e, 0xd1, 0xa3, 0xc9, 0x88, 0xaa, 0xaa, 0x8b, - 0x82, 0x00, 0xa6, 0x46, 0xd2, 0x12, 0xe1, 0x45, 0xc6, 0xcf, 0xd8, 0x3f, 0x4b, 0x41, 0xa6, 0x8a, - 0x35, 0xb3, 0xbe, 0x8d, 0x5e, 0x9f, 0xf4, 0x18, 0xba, 0x00, 0xd9, 0x4d, 0xbd, 0x69, 0x61, 0x93, - 0xfa, 0x14, 0xf8, 0x47, 0x46, 0xaa, 0x21, 0xe7, 0x9b, 0x46, 0xfd, 0xc2, 0x5c, 0xde, 0x1e, 0x10, - 0x5a, 0xd6, 0x9c, 0x73, 0x8a, 0x6f, 0x6e, 0x81, 0x7c, 0xa4, 0x3a, 0x1f, 0x2b, 0x0f, 0x42, 0xba, - 0x63, 0x98, 0x96, 0x33, 0xfb, 0x3f, 0x29, 0x56, 0x4a, 0xd5, 0x30, 0x2d, 0x95, 0x7e, 0x68, 0x43, - 0xbb, 0xb9, 0xdb, 0x6c, 0xd6, 0xf0, 0x25, 0xcb, 0x99, 0x79, 0x3b, 0xcf, 0xf6, 0xb2, 0xd7, 0xd8, - 0xdc, 0xec, 0x60, 0xba, 0xb8, 0x4b, 0xab, 0xec, 0x49, 0x39, 0x06, 0xe9, 0xa6, 0xbe, 0xa3, 0x5b, - 0x64, 0x0d, 0x97, 0x56, 0xe9, 0x83, 0x72, 0x12, 0x64, 0xc3, 0x9d, 0x77, 0x53, 0x42, 0x67, 0x32, - 0x44, 0xb3, 0xed, 0x4b, 0xb7, 0xbb, 0xdc, 0x05, 0x7c, 0xb9, 0x33, 0x93, 0x25, 0xef, 0xc9, 0x7f, - 0xf4, 0x74, 0x54, 0xbb, 0x2f, 0xe5, 0x6b, 0xf0, 0x22, 0xc4, 0xc4, 0x75, 0xc3, 0x6c, 0x38, 0xbc, - 0x09, 0x5e, 0x84, 0xb0, 0x7c, 0xd1, 0xac, 0xb5, 0x3d, 0x2b, 0x8f, 0x5f, 0x9e, 0x9e, 0xce, 0x40, - 0x7a, 0xd1, 0xd4, 0xda, 0xdb, 0xe8, 0x37, 0x12, 0xc3, 0x17, 0x27, 0x17, 0xd8, 0x64, 0x3f, 0x60, - 0xa5, 0x3e, 0xc0, 0xa6, 0x7c, 0xc0, 0x3e, 0x99, 0x84, 0x54, 0xb1, 0xb1, 0x85, 0x39, 0x33, 0x4a, - 0xc2, 0x67, 0x46, 0x39, 0x0e, 0x19, 0x4b, 0x33, 0xb7, 0xb0, 0xc5, 0xb8, 0xc4, 0x9e, 0x5c, 0x3f, - 0x3d, 0xc9, 0x77, 0xda, 0xf3, 0x95, 0x90, 0xb2, 0xdb, 0x45, 0x24, 0x72, 0xfa, 0xf4, 0x75, 0xbd, - 0xa0, 0x21, 0xfc, 0x99, 0xb3, 0x6b, 0x9c, 0xb3, 0x29, 0x53, 0xc9, 0x07, 0xdd, 0x78, 0xa4, 0xf7, - 0xe1, 0x61, 0x4f, 0xc9, 0xf4, 0xba, 0xd1, 0x2a, 0xed, 0x68, 0x5b, 0x78, 0x26, 0x43, 0xa7, 0x64, - 0x6e, 0x82, 0xf3, 0xb6, 0xb8, 0x63, 0x3c, 0xa2, 0xcf, 0x64, 0xbd, 0xb7, 0x24, 0xc1, 0x6e, 0xc2, - 0xb6, 0xde, 0x68, 0xe0, 0xd6, 0xcc, 0x18, 0x3d, 0x2b, 0x45, 0x9f, 0x66, 0x4f, 0x40, 0xca, 0xa6, - 0xc1, 0xc6, 0xd8, 0x56, 0xec, 0xf2, 0x11, 0x65, 0xd2, 0x96, 0x72, 0x6a, 0xe7, 0x92, 0x13, 0xe8, - 0x53, 0xc9, 0x88, 0xbb, 0x92, 0xb4, 0x71, 0xbd, 0x65, 0xfe, 0x36, 0x48, 0xb7, 0x8c, 0x06, 0xee, - 0x2b, 0xf1, 0x34, 0x97, 0xf2, 0x32, 0x48, 0xe3, 0xc6, 0x16, 0xee, 0x10, 0x30, 0x27, 0x4e, 0x9f, - 0x08, 0xe7, 0xa5, 0x4a, 0x33, 0x47, 0xdb, 0xfa, 0xec, 0x45, 0x6d, 0xfc, 0x9d, 0xe4, 0x7f, 0x67, - 0xe0, 0x28, 0xed, 0x9f, 0xd5, 0xdd, 0x0d, 0xbb, 0xa8, 0x0d, 0x8c, 0x7e, 0x5e, 0xe2, 0x8e, 0x97, - 0x77, 0x76, 0x37, 0xdc, 0xb1, 0x8c, 0x3e, 0xf8, 0x3b, 0x51, 0x72, 0x28, 0x3a, 0x59, 0x1a, 0x54, - 0x27, 0x73, 0xfa, 0x55, 0x72, 0xba, 0xa1, 0xa7, 0x8d, 0x33, 0x24, 0xd9, 0xd1, 0xc6, 0x3d, 0x74, - 0xa9, 0x3d, 0x28, 0x6b, 0x9b, 0x16, 0x36, 0x4b, 0x0d, 0x22, 0x8f, 0xe3, 0xaa, 0xf3, 0x68, 0xeb, - 0xfb, 0x0d, 0xbc, 0x69, 0x98, 0xf6, 0xd2, 0x62, 0x9c, 0xea, 0x7b, 0xe7, 0xd9, 0xd7, 0x3f, 0x81, - 0x33, 0x73, 0xde, 0x0c, 0x47, 0xf5, 0xad, 0x96, 0x61, 0x62, 0xd7, 0x57, 0x64, 0x66, 0x92, 0x9e, - 0x8b, 0xee, 0x4a, 0x56, 0x6e, 0x85, 0x2b, 0x5a, 0x46, 0x01, 0xb7, 0x19, 0xdf, 0x29, 0xaa, 0x53, - 0xa4, 0x47, 0xec, 0x7f, 0x81, 0x3e, 0x19, 0x75, 0x2d, 0xd3, 0x05, 0xea, 0xd0, 0x54, 0xbf, 0x72, - 0x0f, 0x4c, 0x36, 0xd8, 0x3e, 0x74, 0x5d, 0x77, 0x7b, 0x44, 0xe0, 0x77, 0x5c, 0x66, 0x4f, 0x9c, - 0x52, 0x7e, 0x71, 0x5a, 0x84, 0x31, 0x72, 0xf0, 0xc1, 0x96, 0xa7, 0x74, 0xd7, 0xd1, 0x5a, 0x32, - 0xdd, 0x76, 0x1b, 0xe5, 0x63, 0xc9, 0x5c, 0x9e, 0x7d, 0xa2, 0xba, 0x1f, 0x47, 0x9b, 0xef, 0x84, - 0x73, 0x28, 0xfe, 0xae, 0xf7, 0x4b, 0x29, 0x38, 0xba, 0x68, 0x1a, 0xbb, 0xed, 0x8e, 0xd7, 0xf5, - 0xfc, 0x07, 0xf8, 0x7b, 0x77, 0xbd, 0x6b, 0x61, 0xc2, 0x64, 0x3a, 0xf1, 0x2c, 0x76, 0xe2, 0x87, - 0xf8, 0x93, 0xfc, 0x9d, 0x53, 0x3a, 0x48, 0xe7, 0xf4, 0x44, 0x3c, 0xe5, 0x17, 0x71, 0xf4, 0xc5, - 0xa8, 0x73, 0xd5, 0xae, 0x46, 0x06, 0x88, 0x62, 0x1e, 0x32, 0x5b, 0x24, 0x23, 0x93, 0xc4, 0x5b, - 0xc4, 0xa8, 0x26, 0x85, 0xab, 0xec, 0x53, 0x8f, 0x67, 0x92, 0x8f, 0x67, 0xd1, 0xc4, 0x22, 0x9c, - 0xda, 0x11, 0x2c, 0x96, 0x53, 0x30, 0xe9, 0xd6, 0x5e, 0x6a, 0x74, 0x90, 0xd1, 0x4f, 0x24, 0xf6, - 0x2d, 0x8d, 0x5d, 0x3d, 0x27, 0xf9, 0xf4, 0x5c, 0x0f, 0xcd, 0x34, 0xd1, 0x53, 0x33, 0xa1, 0x47, - 0x25, 0xd1, 0xe0, 0x21, 0x7c, 0xb7, 0x24, 0xe4, 0xbe, 0x90, 0x15, 0x8d, 0x60, 0x08, 0x93, 0xfe, - 0xad, 0x8a, 0x5f, 0x0a, 0x9e, 0x49, 0xc2, 0x15, 0x54, 0x41, 0xad, 0xb5, 0x3a, 0xae, 0x7a, 0xe0, - 0x4f, 0x9c, 0x93, 0x36, 0x75, 0xdc, 0x7d, 0x36, 0xf2, 0xc4, 0xdb, 0x14, 0x43, 0x9d, 0xd8, 0x39, - 0x35, 0xe8, 0xab, 0x25, 0x60, 0x2d, 0x29, 0xe6, 0xa6, 0x2e, 0x58, 0xe8, 0x08, 0xb4, 0xab, 0x04, - 0xe3, 0x55, 0x6c, 0x2d, 0x6b, 0x97, 0x8d, 0x5d, 0x0b, 0x69, 0xa2, 0xd6, 0xc4, 0xbb, 0x20, 0xd3, - 0x24, 0x9f, 0x10, 0x0d, 0x32, 0x7d, 0xfa, 0xda, 0x9e, 0xe6, 0x38, 0xb2, 0x5d, 0x42, 0x8b, 0x56, - 0x59, 0x7e, 0xfe, 0xf4, 0x80, 0x88, 0x31, 0xd7, 0xa5, 0x6e, 0x28, 0x96, 0xa8, 0x48, 0xa6, 0xde, - 0xa0, 0xaa, 0xe3, 0x87, 0xe5, 0xa7, 0x24, 0x98, 0x22, 0xce, 0xdf, 0x0b, 0xda, 0x9e, 0x61, 0xea, - 0x16, 0xf6, 0x87, 0x41, 0x0b, 0x87, 0xe6, 0x04, 0x80, 0xee, 0x7e, 0xc6, 0x3c, 0xdc, 0x7d, 0x29, - 0xe8, 0xb7, 0x93, 0x11, 0x37, 0x79, 0x38, 0x3a, 0x86, 0x02, 0x42, 0xa4, 0x2d, 0xa1, 0xb0, 0xea, - 0x47, 0x08, 0x44, 0xce, 0xac, 0x6f, 0xeb, 0x7b, 0xb8, 0x11, 0x11, 0x08, 0xe7, 0x33, 0x0f, 0x08, - 0xb7, 0xa0, 0xc1, 0x80, 0x70, 0x3e, 0x3f, 0x24, 0x20, 0x02, 0xaa, 0x8f, 0x1f, 0x88, 0xb7, 0x51, - 0x20, 0x7c, 0xbb, 0xdd, 0x2b, 0xa2, 0x40, 0x5c, 0x0f, 0x53, 0x9e, 0x55, 0x61, 0xcd, 0x6c, 0xb2, - 0x59, 0x0f, 0x9f, 0x88, 0x3e, 0x3a, 0x00, 0x1c, 0x7d, 0x37, 0xae, 0xa3, 0xc1, 0xf1, 0x91, 0x88, - 0x70, 0xbc, 0x50, 0x37, 0xa5, 0x9f, 0x95, 0xe8, 0x19, 0x1d, 0xce, 0x37, 0xe0, 0x11, 0x51, 0xb8, - 0xf6, 0xf9, 0x21, 0x64, 0x23, 0xfb, 0x21, 0x7c, 0x22, 0xaa, 0x1f, 0x42, 0x37, 0xb5, 0x43, 0x81, - 0x33, 0x92, 0x9b, 0x41, 0x1f, 0x0a, 0x0e, 0x19, 0xd1, 0xaf, 0x4b, 0x00, 0x24, 0x72, 0x2d, 0xf5, - 0xa0, 0x59, 0x82, 0x0c, 0xfd, 0xeb, 0xb8, 0xe1, 0x25, 0x3c, 0x37, 0xbc, 0x5b, 0x21, 0xbd, 0xa7, - 0x35, 0x77, 0xb1, 0xcb, 0xa3, 0xee, 0x89, 0xe8, 0x39, 0xfb, 0xad, 0x4a, 0x33, 0xa1, 0x6d, 0x51, - 0xa9, 0x78, 0xc0, 0xef, 0x02, 0x62, 0xcb, 0xc3, 0x0d, 0x01, 0x5c, 0x64, 0x34, 0xce, 0xd1, 0x5f, - 0xcf, 0xeb, 0xe7, 0x2d, 0x51, 0xb7, 0xe4, 0x7d, 0x65, 0x0d, 0x43, 0x1a, 0x22, 0x6d, 0xd2, 0x07, - 0xd6, 0x1d, 0xbf, 0xa2, 0xfd, 0x44, 0x12, 0xd2, 0x35, 0xa3, 0x8a, 0xb9, 0x13, 0x4c, 0xe1, 0xd8, - 0x78, 0x4b, 0xe0, 0x24, 0xb7, 0x04, 0xfe, 0x89, 0xa8, 0xa6, 0x48, 0x52, 0x6f, 0x70, 0x78, 0xca, - 0x0e, 0xf6, 0x36, 0x93, 0xe9, 0x43, 0x34, 0xdb, 0x61, 0xaf, 0xe2, 0xe3, 0x67, 0xe8, 0x19, 0x38, - 0xba, 0xd6, 0x6a, 0x18, 0x2a, 0x6e, 0x18, 0xcc, 0x16, 0x63, 0x2f, 0x3c, 0x77, 0x5b, 0x0d, 0x83, - 0xd0, 0x9a, 0x56, 0xc9, 0x7f, 0x3b, 0xcd, 0xc4, 0x0d, 0x83, 0x19, 0xca, 0xc9, 0x7f, 0xf4, 0x06, - 0x09, 0x52, 0xf6, 0xb7, 0xe2, 0xbe, 0x12, 0xdf, 0x88, 0x7a, 0xd4, 0xc1, 0x2e, 0x7e, 0x18, 0xf2, - 0xad, 0x3c, 0xe0, 0xb3, 0x4e, 0xd1, 0x6d, 0xfd, 0xeb, 0x82, 0xea, 0xf3, 0xb1, 0xc2, 0x67, 0x95, - 0x7a, 0x67, 0x94, 0xe3, 0x11, 0x3d, 0xc8, 0x8e, 0x86, 0x64, 0x61, 0x00, 0x15, 0x29, 0xc3, 0x64, - 0x3e, 0x57, 0x26, 0xb1, 0x3e, 0x56, 0x2a, 0xe7, 0x8a, 0xb2, 0x44, 0x00, 0xb2, 0x5b, 0x13, 0x23, - 0x40, 0x76, 0xf1, 0xdf, 0x83, 0x00, 0xf5, 0x20, 0xfb, 0x30, 0x00, 0xfa, 0x58, 0x12, 0xa6, 0x96, - 0xf5, 0x8e, 0x15, 0xe4, 0x76, 0x14, 0x72, 0x12, 0xfb, 0xb5, 0x51, 0x27, 0x84, 0x5c, 0x3d, 0xc2, - 0x47, 0xb0, 0x23, 0xcd, 0xc1, 0xc3, 0xaa, 0x18, 0x8d, 0x7f, 0x1c, 0xa1, 0x80, 0x06, 0xf6, 0x13, - 0xe6, 0x64, 0xe4, 0xa1, 0xd7, 0xab, 0x64, 0xf4, 0x43, 0x6f, 0x60, 0xdd, 0xf1, 0xf3, 0xf7, 0x6f, - 0x92, 0x70, 0x85, 0x5d, 0x7d, 0xd8, 0x82, 0x33, 0x98, 0xcd, 0x7d, 0x17, 0x9c, 0x91, 0x6d, 0x5e, - 0xfb, 0x68, 0x19, 0x86, 0xcd, 0xab, 0x5f, 0xa1, 0x23, 0x66, 0x73, 0x80, 0x81, 0xa5, 0x1f, 0x9b, - 0x43, 0x0c, 0x2c, 0x83, 0xb3, 0x39, 0xdc, 0xc8, 0x32, 0x20, 0x9b, 0x0f, 0xcd, 0x74, 0xf2, 0x85, - 0x24, 0x4c, 0xe5, 0xda, 0xed, 0xe6, 0xe5, 0x1a, 0x3b, 0x8b, 0x10, 0xc9, 0x74, 0xe2, 0x3b, 0xd2, - 0x90, 0xdc, 0x77, 0xa0, 0x2f, 0xb2, 0xa3, 0x32, 0x47, 0xc7, 0x30, 0x1c, 0x95, 0xc3, 0x0a, 0x8c, - 0x9f, 0xb5, 0xaf, 0x4e, 0x53, 0x45, 0xcc, 0x42, 0x0d, 0x7c, 0x2e, 0x11, 0x1e, 0x6b, 0x20, 0x34, - 0xb0, 0x8a, 0x72, 0x1f, 0x64, 0x36, 0x0d, 0x73, 0x47, 0x73, 0x6c, 0xb9, 0x37, 0x04, 0x89, 0x13, - 0x3b, 0xcd, 0xbf, 0x40, 0x32, 0xab, 0xec, 0x23, 0x7b, 0x44, 0x7b, 0x95, 0xde, 0x66, 0xa7, 0x71, - 0xed, 0xbf, 0x24, 0xcc, 0x06, 0x3d, 0x94, 0x5b, 0xc6, 0x1d, 0x0b, 0x37, 0xc8, 0x66, 0xe5, 0x98, - 0xca, 0x27, 0x2a, 0xb3, 0x30, 0xc9, 0x12, 0x16, 0xf4, 0x26, 0xee, 0x90, 0x2d, 0xe8, 0x31, 0x95, - 0x4b, 0x43, 0x9f, 0x1e, 0x64, 0xe0, 0x88, 0x1c, 0x03, 0x61, 0x06, 0xb2, 0x9d, 0xdd, 0x7a, 0x1d, - 0xe3, 0x06, 0xf3, 0x4a, 0x72, 0x1e, 0x23, 0x46, 0x47, 0x88, 0x3c, 0xcc, 0x1c, 0x4e, 0x78, 0x84, - 0xd9, 0x55, 0xc8, 0x50, 0x0c, 0x95, 0x49, 0x18, 0x5b, 0xd1, 0xcc, 0x0b, 0x0d, 0xe3, 0x62, 0x8b, - 0xfa, 0x91, 0xac, 0xb2, 0x45, 0xba, 0x9c, 0xb0, 0x4b, 0x7c, 0xa8, 0x5a, 0x29, 0xd3, 0x70, 0x73, - 0x85, 0x0a, 0x0b, 0x37, 0x57, 0x3d, 0xb7, 0x28, 0xa7, 0x94, 0x69, 0x80, 0x45, 0x35, 0xb7, 0xba, - 0xb4, 0x4e, 0x72, 0xa4, 0xd1, 0xb3, 0x59, 0xc8, 0x94, 0x76, 0x88, 0x2c, 0x3e, 0x93, 0xf6, 0x5f, - 0xf7, 0x33, 0xd9, 0x32, 0x6c, 0x32, 0x57, 0x35, 0x53, 0xdb, 0xe9, 0x84, 0xed, 0x8d, 0xd1, 0xaf, - 0xdd, 0xab, 0x7e, 0xca, 0xbe, 0xcf, 0x96, 0x8e, 0xa8, 0x5c, 0x31, 0xca, 0xbf, 0x82, 0xa3, 0x1b, - 0xcc, 0x85, 0xbd, 0xc3, 0x4a, 0x4e, 0x06, 0x6f, 0xab, 0x76, 0x95, 0x3c, 0xcf, 0x7f, 0xb9, 0x74, - 0x44, 0xed, 0x2e, 0x4c, 0x29, 0xc1, 0x78, 0xa7, 0xa5, 0xb5, 0x3b, 0xdb, 0x86, 0xeb, 0x72, 0x71, - 0x8b, 0x40, 0xc9, 0x55, 0xf6, 0x8d, 0xea, 0x7d, 0xad, 0xbc, 0x0c, 0x5e, 0xbc, 0x4b, 0xe2, 0x13, - 0x16, 0x2f, 0xe9, 0x1d, 0x4b, 0x6f, 0x6d, 0xf1, 0x87, 0xd7, 0x7b, 0xbf, 0x54, 0xee, 0x61, 0x1e, - 0x49, 0x69, 0x22, 0x3e, 0x37, 0x09, 0xd4, 0xed, 0xf3, 0x4a, 0xba, 0x07, 0x52, 0x3b, 0xb6, 0xec, - 0x65, 0x84, 0x3f, 0x5e, 0x21, 0x02, 0x67, 0x7f, 0x84, 0x66, 0x61, 0xd2, 0xcf, 0xfa, 0x5e, 0xda, - 0x04, 0x5d, 0x07, 0x47, 0xbb, 0x98, 0xe8, 0x1c, 0x80, 0x48, 0x78, 0x07, 0x20, 0x7e, 0x18, 0xc6, - 0x1c, 0x7e, 0xec, 0x8b, 0x32, 0x9c, 0x83, 0x31, 0x87, 0x43, 0x0c, 0xb8, 0x1b, 0xba, 0x6c, 0x7b, - 0xd5, 0x1d, 0xcd, 0xb4, 0xc8, 0x4e, 0xb6, 0x53, 0xc8, 0xbc, 0xd6, 0xc1, 0xaa, 0xfb, 0xd9, 0xec, - 0x6d, 0x90, 0xb2, 0xa9, 0x56, 0x14, 0x98, 0xce, 0x2d, 0x2f, 0xaf, 0x57, 0x48, 0x84, 0xeb, 0xa5, - 0x52, 0x79, 0x91, 0x76, 0x80, 0xd2, 0x62, 0xb9, 0xa2, 0x16, 0xa9, 0xfc, 0x57, 0xe5, 0xc4, 0xec, - 0xb5, 0xcc, 0x67, 0x0a, 0x20, 0x43, 0x9b, 0x47, 0xa5, 0xbd, 0x78, 0x89, 0x1a, 0xdc, 0x64, 0x12, - 0x78, 0xbf, 0x4d, 0xda, 0xc2, 0x1b, 0x2d, 0x44, 0x9c, 0x06, 0x5d, 0x6e, 0xf6, 0x1a, 0x54, 0xde, - 0x1d, 0xc5, 0x03, 0xb0, 0x67, 0x49, 0xd1, 0xf4, 0xc1, 0xc2, 0x3e, 0x7d, 0xa0, 0xc0, 0x74, 0xa9, - 0x5c, 0x2b, 0xaa, 0xe5, 0xdc, 0xb2, 0xab, 0x10, 0xf6, 0xe9, 0x88, 0x24, 0xaf, 0x23, 0x24, 0xf4, - 0x65, 0x09, 0x80, 0x92, 0x63, 0x2b, 0x2a, 0x7f, 0x70, 0xc0, 0xcf, 0x45, 0xd5, 0xc9, 0x5e, 0x31, - 0x01, 0x3a, 0xb9, 0x04, 0x63, 0x26, 0x7b, 0xc1, 0x6c, 0x7b, 0xfd, 0xca, 0xa1, 0x7f, 0x9d, 0xd2, - 0x54, 0xf7, 0x73, 0xf4, 0xde, 0x28, 0x2a, 0x38, 0x90, 0xb0, 0xc3, 0x61, 0x79, 0x13, 0xa6, 0xf9, - 0x76, 0xd9, 0x6d, 0x20, 0x7a, 0x40, 0xac, 0x0d, 0xfc, 0xc7, 0x3e, 0x95, 0x30, 0xab, 0xec, 0x17, - 0x7f, 0xf4, 0xe1, 0xa3, 0x30, 0x4d, 0xcb, 0x70, 0x8f, 0x80, 0xff, 0x13, 0x8b, 0xc5, 0x77, 0x56, - 0x74, 0x9a, 0x36, 0x0b, 0x93, 0x3e, 0x8f, 0x1a, 0x37, 0xac, 0xa3, 0x3f, 0x8d, 0xbf, 0x13, 0x28, - 0xf4, 0xb2, 0x35, 0x9e, 0x9a, 0x90, 0x78, 0x7d, 0xd1, 0x16, 0x7f, 0x51, 0x3c, 0xe6, 0x43, 0x2a, - 0x8f, 0x7f, 0x52, 0xf7, 0x98, 0x17, 0x32, 0x7f, 0xa8, 0x08, 0x44, 0x3d, 0x00, 0xe2, 0x32, 0x41, - 0x6c, 0x05, 0x2e, 0x0d, 0xfb, 0x00, 0x48, 0x78, 0xfd, 0xf1, 0xe3, 0xf0, 0x5d, 0x66, 0x32, 0xca, - 0xed, 0x69, 0x7a, 0x53, 0xdb, 0x68, 0x46, 0x38, 0xa9, 0xf6, 0x61, 0x3f, 0xab, 0xcb, 0x3c, 0xab, - 0xef, 0x0a, 0x6b, 0x2a, 0x57, 0x5f, 0xe0, 0xad, 0x06, 0xe3, 0x0e, 0xae, 0x9e, 0x77, 0x10, 0x3f, - 0x6e, 0x3a, 0xe5, 0xa9, 0x5e, 0x4e, 0xf4, 0x7b, 0x2e, 0xeb, 0x7f, 0x80, 0x63, 0xfd, 0x7d, 0x83, - 0xd2, 0x13, 0x3f, 0x02, 0xaf, 0x91, 0x60, 0x22, 0xd7, 0x68, 0x2c, 0x60, 0xcd, 0xda, 0x35, 0x71, - 0x03, 0x15, 0x45, 0xbb, 0xc3, 0xd5, 0xdd, 0x2c, 0x1a, 0xf7, 0x73, 0xe2, 0x3d, 0xc2, 0x81, 0xfd, - 0xf6, 0x6b, 0x03, 0x87, 0x96, 0xa1, 0xa8, 0x24, 0xb1, 0x30, 0x80, 0xc2, 0x44, 0xc4, 0x0f, 0xc8, - 0xeb, 0x24, 0x98, 0xa6, 0xf1, 0x1e, 0x87, 0x8d, 0xc9, 0xfb, 0xfd, 0x98, 0x54, 0x78, 0x4c, 0xce, - 0x84, 0xb1, 0x83, 0x27, 0x67, 0x28, 0xb0, 0x78, 0xf6, 0x6d, 0x95, 0x83, 0xe5, 0xfe, 0x81, 0xe9, - 0x88, 0x1f, 0x99, 0x6f, 0x02, 0x80, 0xcf, 0x27, 0xe2, 0xcb, 0xe0, 0x9d, 0x05, 0x40, 0x9f, 0x90, - 0xe8, 0x78, 0x5e, 0xe5, 0x0e, 0x11, 0xf2, 0xae, 0x10, 0x89, 0x1e, 0xae, 0x10, 0x42, 0xa3, 0xca, - 0xb7, 0x23, 0x6e, 0xb1, 0x33, 0x2f, 0x85, 0xbe, 0x83, 0xfb, 0x80, 0x5a, 0xee, 0xb9, 0x08, 0x7b, - 0xed, 0xfd, 0x48, 0x89, 0xff, 0x12, 0x97, 0xb0, 0xbd, 0x76, 0x65, 0x06, 0x8e, 0xa9, 0xc5, 0x5c, - 0xa1, 0x52, 0x5e, 0x7e, 0xd8, 0xff, 0x56, 0x4e, 0xa1, 0x37, 0x4a, 0x90, 0x61, 0xf1, 0x64, 0x63, - 0xc1, 0xf4, 0x3f, 0x45, 0x54, 0x90, 0x3c, 0x23, 0xc3, 0x42, 0xcf, 0xa2, 0xff, 0x12, 0x41, 0xe5, - 0x09, 0x14, 0xfb, 0x82, 0x85, 0xe8, 0x4b, 0x12, 0xa4, 0xc8, 0x8a, 0x69, 0x37, 0x2a, 0x40, 0x05, - 0xb8, 0x46, 0x6b, 0xb7, 0x71, 0xab, 0xe1, 0x46, 0xb2, 0x5b, 0x30, 0x8d, 0x9d, 0x8a, 0xb5, 0x8d, - 0x4d, 0x3b, 0x4b, 0x87, 0x59, 0x9a, 0xc3, 0x33, 0xa1, 0x2f, 0x45, 0x34, 0x3e, 0xf3, 0xbc, 0x0e, - 0x59, 0xa4, 0x9d, 0xd9, 0xdf, 0x2f, 0xaf, 0x0a, 0xe8, 0x97, 0xcb, 0x7a, 0xeb, 0x82, 0xbf, 0x6f, - 0xfe, 0x69, 0x04, 0xbb, 0x75, 0x5f, 0x7a, 0x0e, 0xd9, 0x11, 0xe6, 0xd1, 0x8c, 0x4f, 0xc1, 0xfe, - 0xb4, 0x04, 0xb2, 0x17, 0x0a, 0x99, 0x85, 0x63, 0xaa, 0xf0, 0xfb, 0x08, 0x24, 0xd1, 0xbf, 0x8f, - 0xe0, 0x24, 0x28, 0x37, 0xc2, 0x74, 0x7d, 0x1b, 0xd7, 0x2f, 0x94, 0x5a, 0x8e, 0x51, 0x88, 0x22, - 0xdc, 0x95, 0xca, 0x7b, 0xcc, 0x9e, 0xe5, 0x21, 0xe5, 0x6d, 0xd3, 0x1c, 0xdf, 0xfc, 0x44, 0x05, - 0x74, 0x4a, 0x0f, 0x98, 0x32, 0x07, 0xcc, 0xdd, 0x03, 0x95, 0x1a, 0x0d, 0x99, 0xf2, 0x60, 0x57, - 0x6e, 0x54, 0x56, 0xc9, 0x1d, 0x75, 0x6b, 0xd5, 0x62, 0x61, 0x7d, 0xde, 0xe9, 0x7c, 0x55, 0x59, - 0x42, 0x5f, 0x4f, 0x42, 0x96, 0x92, 0xd5, 0xe9, 0x0a, 0x55, 0xec, 0x3f, 0x07, 0x92, 0xd8, 0x77, - 0x0e, 0x04, 0xbd, 0x43, 0xd8, 0x21, 0xd9, 0x65, 0x04, 0xab, 0x27, 0xa0, 0xa7, 0xdc, 0x05, 0x59, - 0x0a, 0xb2, 0x63, 0x96, 0x3c, 0x11, 0xd0, 0x4f, 0x58, 0x31, 0xaa, 0x93, 0x5d, 0xd0, 0x39, 0xb9, - 0x0f, 0x19, 0xf1, 0xcf, 0x39, 0xde, 0x3a, 0x01, 0xd9, 0x25, 0xbd, 0x63, 0x19, 0xe6, 0x65, 0xf4, - 0x96, 0x04, 0x64, 0xd9, 0xf5, 0xf4, 0xfb, 0xec, 0x7c, 0xd7, 0xc2, 0x44, 0xdb, 0xc4, 0x7b, 0xba, - 0xb1, 0xdb, 0xf1, 0x36, 0x1e, 0xfc, 0x49, 0x0a, 0x82, 0x31, 0x6d, 0xd7, 0xda, 0x36, 0x4c, 0x2f, - 0x48, 0x8f, 0xf3, 0xac, 0x9c, 0x00, 0xa0, 0xff, 0xcb, 0xda, 0x0e, 0x66, 0xe7, 0x13, 0x7c, 0x29, - 0x8a, 0x02, 0x29, 0x4b, 0xdf, 0xc1, 0xec, 0x44, 0x1b, 0xf9, 0xaf, 0xcc, 0x40, 0x96, 0x9c, 0x70, - 0x29, 0x35, 0xd8, 0x89, 0x36, 0xe7, 0x11, 0xfd, 0xa6, 0x04, 0x13, 0xde, 0x4d, 0xfa, 0x1d, 0xbf, - 0xa7, 0x7b, 0x9f, 0x88, 0xe1, 0x4d, 0xad, 0xe3, 0x7c, 0xe6, 0xee, 0x45, 0xf1, 0x89, 0xde, 0xe9, - 0x3a, 0xc9, 0x77, 0xc8, 0x15, 0xbd, 0x3b, 0x29, 0x7a, 0x3e, 0x84, 0x31, 0xd3, 0x77, 0xd5, 0x7f, - 0xb0, 0x6c, 0x8d, 0xed, 0xb1, 0x1c, 0x4c, 0x09, 0x5f, 0xdd, 0xb3, 0x24, 0x56, 0x8c, 0xea, 0xe6, - 0x16, 0x3c, 0xd3, 0xd1, 0x9f, 0x92, 0xf8, 0xc5, 0xeb, 0x1f, 0x24, 0x98, 0xa8, 0x6e, 0x1b, 0x17, - 0x19, 0x01, 0xe8, 0x87, 0xc5, 0xa0, 0xba, 0x1a, 0xc6, 0xf7, 0xba, 0x60, 0xf2, 0x12, 0x82, 0x83, - 0xcd, 0xa2, 0x27, 0xa4, 0xa8, 0x30, 0xf9, 0x88, 0x1b, 0x7a, 0x90, 0x58, 0xe5, 0x15, 0x90, 0x65, - 0x54, 0x33, 0xcb, 0x4a, 0x38, 0xc0, 0x4e, 0x66, 0x7f, 0x03, 0x53, 0x7c, 0x03, 0xa3, 0x21, 0x1f, - 0xdc, 0xb8, 0x11, 0x84, 0x36, 0x48, 0x12, 0x2f, 0x53, 0x07, 0xf8, 0xfc, 0x10, 0x80, 0x47, 0xdf, - 0x49, 0x88, 0xda, 0x1f, 0x5d, 0x0e, 0xb8, 0x14, 0x1c, 0x28, 0x06, 0x47, 0xdf, 0xe2, 0xe2, 0xe7, - 0xe7, 0x8f, 0x5f, 0x01, 0xa9, 0x05, 0xbd, 0x89, 0xed, 0xf5, 0x7b, 0xb6, 0xb2, 0xb9, 0x49, 0x62, - 0x68, 0x14, 0x83, 0xaf, 0x7f, 0x3c, 0x09, 0xb2, 0xb3, 0x47, 0x6b, 0x58, 0xab, 0x7a, 0xab, 0xe5, - 0xba, 0x91, 0xec, 0x4b, 0xe7, 0x4d, 0x5d, 0xa1, 0xbe, 0x9d, 0x36, 0x05, 0x73, 0xac, 0xf6, 0x80, - 0xfe, 0x72, 0x23, 0x4c, 0x6f, 0x5c, 0xb6, 0x70, 0x87, 0xe5, 0x62, 0xd5, 0xa6, 0xd4, 0xae, 0x54, - 0xf4, 0xac, 0x90, 0xb7, 0x67, 0x48, 0x85, 0xd1, 0x78, 0xae, 0x0d, 0x30, 0x47, 0x39, 0x06, 0x72, - 0xb9, 0x52, 0x28, 0xd2, 0x7b, 0x12, 0x6b, 0x39, 0xb5, 0x56, 0x2c, 0xc8, 0x5b, 0xe4, 0x72, 0xb8, - 0xd2, 0x32, 0x4d, 0x7d, 0xb8, 0x58, 0x5b, 0x5f, 0x2d, 0x95, 0xcb, 0xc5, 0x82, 0xbc, 0x8d, 0xde, - 0x27, 0xc1, 0x84, 0x3d, 0xaf, 0x72, 0xd0, 0xa9, 0x70, 0x77, 0xeb, 0x19, 0xad, 0xe6, 0x65, 0x6f, - 0xee, 0xe8, 0x3c, 0x46, 0xc2, 0xe9, 0x3f, 0x0b, 0x4f, 0x6f, 0x08, 0xdb, 0x7c, 0xb4, 0x04, 0x63, - 0xb5, 0xa9, 0x37, 0xbb, 0xb1, 0x4a, 0xab, 0x5d, 0xa9, 0x3d, 0x30, 0x95, 0x7a, 0x62, 0xfa, 0x47, - 0x42, 0x93, 0x9e, 0x3e, 0xc4, 0x45, 0xc3, 0x75, 0x69, 0x58, 0xb8, 0xa2, 0x6f, 0x49, 0x90, 0x59, - 0x6b, 0x13, 0xe4, 0x9e, 0xf3, 0x39, 0x61, 0xec, 0xdb, 0x0f, 0xb5, 0x95, 0x54, 0x93, 0xbf, 0x4c, - 0x5c, 0xf5, 0x12, 0x94, 0xbb, 0xd9, 0x46, 0x0f, 0x75, 0xc0, 0xb8, 0x31, 0xf4, 0x48, 0x2f, 0xe1, - 0x84, 0x6f, 0xbf, 0xf7, 0x56, 0xb8, 0xa2, 0xa1, 0x77, 0xb4, 0x8d, 0x26, 0x2e, 0xb6, 0xea, 0xe6, - 0x65, 0xda, 0x68, 0xba, 0xbd, 0xbc, 0xff, 0x85, 0x72, 0x1f, 0xa4, 0x3b, 0xd6, 0xe5, 0xe6, 0xfe, - 0xbd, 0xe5, 0xc0, 0xaa, 0xaa, 0x76, 0x76, 0x95, 0x7e, 0x85, 0xbe, 0x9b, 0x10, 0xf5, 0x5e, 0x25, - 0xdf, 0x52, 0xd6, 0x04, 0xbb, 0x62, 0x6c, 0x6b, 0x1d, 0xd7, 0x15, 0xc3, 0xfe, 0x8f, 0x9e, 0x12, - 0x72, 0x31, 0x0d, 0x2e, 0x3b, 0x7e, 0x9d, 0xfa, 0xc5, 0x24, 0x8c, 0x15, 0x8c, 0x8b, 0x2d, 0x82, - 0xf9, 0x1d, 0x9c, 0xdf, 0x0d, 0x69, 0x4d, 0xc2, 0x6b, 0x4d, 0x2f, 0x67, 0x13, 0xf4, 0xef, 0x85, - 0xb7, 0x97, 0x49, 0x2b, 0x9d, 0xaa, 0x82, 0xaf, 0x4c, 0x0a, 0x16, 0x2b, 0x9f, 0xe9, 0x3f, 0x6c, - 0xf3, 0x39, 0xac, 0x9e, 0x68, 0xfc, 0xcc, 0x1d, 0x38, 0xe4, 0x3c, 0x7a, 0x56, 0x82, 0x54, 0xc1, - 0x34, 0xda, 0xe8, 0x77, 0x13, 0x11, 0xf6, 0xc0, 0x1a, 0xa6, 0xd1, 0xae, 0x91, 0x08, 0x2f, 0xee, - 0x14, 0x80, 0x4b, 0x53, 0xce, 0xc0, 0x58, 0xdb, 0xe8, 0xe8, 0x96, 0x33, 0xad, 0x9a, 0xde, 0x77, - 0x27, 0x34, 0x95, 0xfc, 0x55, 0x96, 0x49, 0x75, 0xb3, 0xdb, 0x7a, 0x8c, 0x70, 0xd4, 0x66, 0x93, - 0xcd, 0x55, 0x27, 0x12, 0x4d, 0x57, 0x2a, 0xfa, 0x65, 0x3f, 0xb0, 0xf7, 0xf0, 0xc0, 0xde, 0xd0, - 0x83, 0xe1, 0x66, 0xd0, 0x25, 0xb3, 0x11, 0xad, 0xd6, 0xaf, 0x77, 0x41, 0xbe, 0x9f, 0x03, 0xf9, - 0xa4, 0x50, 0x9d, 0xf1, 0x77, 0x98, 0x6f, 0x64, 0x01, 0xca, 0xda, 0x9e, 0xbe, 0x45, 0x6d, 0x26, - 0x9f, 0x77, 0x06, 0x3c, 0x66, 0xdd, 0x78, 0x8d, 0x0f, 0xe7, 0x33, 0x90, 0x65, 0xb0, 0xb2, 0x36, - 0xbc, 0x94, 0x6b, 0x83, 0x57, 0x0a, 0xd5, 0x50, 0x97, 0x2c, 0xd5, 0xc9, 0xcf, 0x05, 0x9d, 0x4a, - 0x76, 0x05, 0x9d, 0xea, 0xb9, 0x3c, 0x0b, 0x0a, 0x45, 0x85, 0xfe, 0x50, 0x38, 0x6e, 0x83, 0x8f, - 0x1e, 0x5f, 0x8b, 0x02, 0x40, 0xbd, 0x13, 0xb2, 0x86, 0x6b, 0xe6, 0x91, 0x02, 0xd7, 0x03, 0xa5, - 0xd6, 0xa6, 0xa1, 0x3a, 0x39, 0x05, 0x23, 0x32, 0x08, 0xd1, 0x11, 0x3f, 0xd0, 0x9f, 0x94, 0xe0, - 0xf8, 0xa2, 0x73, 0x28, 0xd1, 0x6e, 0xc7, 0x79, 0xdd, 0xda, 0x5e, 0xd6, 0x5b, 0x17, 0x3a, 0xe8, - 0x5f, 0x8b, 0xcd, 0xe4, 0x7d, 0xf8, 0x27, 0xa3, 0xe1, 0xcf, 0x7b, 0x0a, 0x56, 0x79, 0xd4, 0xee, - 0x0b, 0x2a, 0xa5, 0x37, 0xb5, 0x01, 0x00, 0xde, 0x0d, 0x19, 0x4a, 0x28, 0xeb, 0x96, 0xb3, 0x81, - 0xf8, 0xb9, 0x25, 0xa9, 0xec, 0x0b, 0x9f, 0x17, 0xd0, 0x39, 0x0e, 0xc7, 0xf9, 0x03, 0x51, 0x16, - 0xbf, 0xa7, 0xe0, 0x1d, 0x90, 0x65, 0x9c, 0x56, 0xa6, 0xfd, 0xbd, 0x58, 0x3e, 0xa2, 0x00, 0x64, - 0x56, 0x8c, 0x3d, 0x5c, 0x33, 0xe4, 0x84, 0xfd, 0xdf, 0xa6, 0xaf, 0x66, 0xc8, 0x49, 0xf4, 0xdf, - 0x00, 0xc6, 0x5c, 0x87, 0xdf, 0xcf, 0x26, 0x9d, 0x28, 0xd5, 0xc4, 0x4c, 0x4d, 0x99, 0x21, 0xbc, - 0x9b, 0xfe, 0x3a, 0x61, 0xc3, 0xa7, 0xeb, 0x88, 0xdb, 0x5d, 0x99, 0x60, 0x00, 0xd8, 0xb7, 0x0b, - 0x19, 0x42, 0x45, 0x6b, 0x89, 0xbf, 0xab, 0x7d, 0x35, 0xe9, 0xdc, 0x05, 0xe0, 0x11, 0x41, 0xf6, - 0xff, 0xf8, 0x7b, 0xd1, 0xbd, 0x0d, 0x06, 0xc6, 0x5c, 0x5f, 0x0a, 0x7f, 0x39, 0x6e, 0xe8, 0xce, - 0x6b, 0x60, 0xbb, 0x43, 0x0e, 0x3e, 0x77, 0x73, 0x58, 0x6c, 0x6f, 0x35, 0x4a, 0x4d, 0xf1, 0x73, - 0xf9, 0x0f, 0xe8, 0x75, 0x51, 0xad, 0x08, 0x0e, 0x20, 0x5c, 0x80, 0xca, 0x07, 0x79, 0xa6, 0x9e, - 0x0c, 0x68, 0xaa, 0x5d, 0x83, 0x20, 0x17, 0x9f, 0x76, 0xb9, 0x98, 0xe7, 0xb8, 0x78, 0x4a, 0xbc, - 0xe8, 0xf8, 0xd9, 0xf6, 0xf5, 0x24, 0x8c, 0x53, 0xcf, 0xe6, 0x5c, 0xb3, 0xd9, 0x75, 0x49, 0xee, - 0x3e, 0x67, 0xd2, 0xff, 0x28, 0xec, 0x1e, 0xe6, 0xb6, 0xca, 0x2d, 0x3b, 0xb6, 0x6b, 0xee, 0xc4, - 0x0c, 0x3c, 0x7d, 0x09, 0x1a, 0x49, 0x90, 0xd5, 0x09, 0x5b, 0xf3, 0xae, 0x9a, 0x78, 0x4f, 0xc7, - 0x17, 0xd1, 0x55, 0x21, 0x4b, 0x50, 0xf4, 0x36, 0xe1, 0x93, 0x87, 0xbe, 0x22, 0x03, 0x78, 0x7c, - 0x2f, 0x4c, 0x34, 0xbd, 0x4c, 0x6c, 0x44, 0x44, 0x5d, 0x23, 0xa2, 0xaf, 0x18, 0xd5, 0x9f, 0x5d, - 0x70, 0x95, 0x17, 0x4c, 0x45, 0xfc, 0x8c, 0xfd, 0x5a, 0x06, 0xc6, 0xd6, 0x5a, 0x9d, 0x76, 0xd3, - 0x5e, 0x94, 0xfe, 0x93, 0xe4, 0x46, 0x5c, 0x7d, 0x39, 0x17, 0x64, 0xea, 0x47, 0x76, 0xb1, 0xe9, - 0xec, 0x29, 0xd1, 0x87, 0xde, 0xf1, 0x2e, 0xd1, 0x1f, 0xf9, 0x6d, 0xcc, 0x39, 0x9e, 0xf5, 0xbc, - 0x6b, 0xb9, 0x53, 0x69, 0x78, 0x28, 0xd2, 0x12, 0x8c, 0xb5, 0xf5, 0xba, 0xb5, 0x6b, 0xba, 0x91, - 0x19, 0x6f, 0x13, 0x2b, 0x65, 0x95, 0x7e, 0xa5, 0xba, 0x9f, 0x23, 0x0d, 0xb2, 0x2c, 0x71, 0x9f, - 0x39, 0x70, 0x5f, 0x58, 0x7b, 0x7b, 0xce, 0xac, 0x99, 0x96, 0xde, 0x71, 0x02, 0xbb, 0xb2, 0x27, - 0x5b, 0x29, 0xd2, 0x7f, 0x6b, 0x66, 0x93, 0x99, 0x9f, 0xbd, 0x04, 0xf4, 0x3e, 0x17, 0xee, 0x02, - 0x07, 0xf7, 0xed, 0x11, 0x5a, 0x1e, 0x0d, 0xf2, 0xb3, 0x03, 0x2c, 0x44, 0xaf, 0x84, 0x17, 0xa9, - 0xb9, 0x5a, 0x71, 0x7d, 0xb9, 0xb4, 0x52, 0xaa, 0xad, 0x17, 0x7f, 0x30, 0x5f, 0x2c, 0x16, 0x8a, - 0x05, 0xb9, 0x41, 0x6e, 0xc8, 0x71, 0x57, 0xfc, 0xfc, 0x48, 0xc0, 0xb8, 0xe8, 0x8d, 0x04, 0x6e, - 0x02, 0xfa, 0x75, 0x61, 0x37, 0x69, 0xb7, 0xe1, 0x7d, 0xd6, 0xfa, 0xbd, 0xec, 0x25, 0xcf, 0x08, - 0xf9, 0x3b, 0xf7, 0xab, 0xe1, 0x10, 0x99, 0xfb, 0xae, 0x1f, 0x82, 0x34, 0x59, 0x7a, 0xa3, 0xdf, - 0x27, 0xe1, 0x34, 0xdb, 0x4d, 0xad, 0x8e, 0xd1, 0x4e, 0x84, 0xa8, 0xf6, 0x1b, 0xf6, 0xd7, 0x5e, - 0x54, 0x7b, 0xf6, 0xa8, 0x9c, 0x84, 0x34, 0xf9, 0xcb, 0x34, 0xfe, 0xb1, 0x5e, 0xcb, 0x7d, 0x95, - 0x66, 0xe1, 0x1d, 0x03, 0x43, 0x6d, 0x32, 0xd4, 0x4a, 0xc0, 0xc8, 0x0c, 0xc0, 0x29, 0x98, 0xa6, - 0x68, 0xa3, 0x90, 0x58, 0xf0, 0xe0, 0x30, 0x8a, 0xe2, 0xd7, 0x93, 0x7f, 0x99, 0x82, 0x74, 0xb5, - 0xdd, 0xd4, 0x2d, 0xf4, 0xab, 0xc9, 0xa1, 0x60, 0x66, 0x6a, 0xad, 0x2d, 0x1c, 0x80, 0x99, 0x6a, - 0xbf, 0x53, 0x69, 0x16, 0xcf, 0x90, 0x99, 0x12, 0x30, 0x64, 0xd6, 0xf0, 0x25, 0x8b, 0x33, 0x64, - 0x2a, 0x67, 0xd8, 0x29, 0x99, 0x74, 0x8f, 0x23, 0x6f, 0xf4, 0x5b, 0xd2, 0xac, 0x1e, 0x67, 0x64, - 0x66, 0xef, 0x60, 0x67, 0x4f, 0x00, 0x32, 0xf3, 0x95, 0x5a, 0xad, 0xb2, 0x22, 0x1f, 0x51, 0xb2, - 0x20, 0xd5, 0x2a, 0xab, 0x72, 0x42, 0x19, 0x87, 0x74, 0xa9, 0x5c, 0x2e, 0xaa, 0x72, 0xd2, 0xfe, - 0x5b, 0x2b, 0xd5, 0x96, 0x8b, 0xb2, 0x84, 0xde, 0x25, 0x3c, 0xf4, 0xf2, 0x75, 0xc7, 0x29, 0x5e, - 0x62, 0x83, 0x70, 0x30, 0x3d, 0xf1, 0x0b, 0xd7, 0xbf, 0x93, 0x20, 0xbd, 0x82, 0xcd, 0x2d, 0x8c, - 0x7e, 0x24, 0x82, 0x2d, 0x70, 0x53, 0x37, 0x3b, 0xf4, 0xec, 0x90, 0x67, 0x0b, 0xf4, 0xa7, 0x29, - 0xd7, 0xc3, 0x54, 0x07, 0xd7, 0x8d, 0x56, 0xc3, 0xc9, 0xc4, 0xc2, 0x41, 0x71, 0x89, 0xe8, 0xc9, - 0x88, 0x90, 0x11, 0x42, 0x87, 0x62, 0xd0, 0x8b, 0x02, 0x4c, 0xaf, 0x5a, 0xe3, 0x07, 0xe6, 0x7f, - 0x49, 0xf6, 0x47, 0xed, 0xcb, 0xe8, 0x49, 0x61, 0x23, 0xed, 0xad, 0x90, 0x21, 0x62, 0xea, 0xcc, - 0x57, 0x7a, 0xeb, 0x63, 0x96, 0x47, 0x99, 0x87, 0x2b, 0x3a, 0xe4, 0x02, 0x6f, 0xdc, 0xb0, 0xbb, - 0xae, 0xda, 0x57, 0x29, 0xec, 0xcf, 0x8e, 0xfe, 0xdc, 0x0f, 0xe0, 0xbd, 0x3c, 0x80, 0x37, 0xf6, - 0x60, 0xa5, 0xdd, 0xa0, 0xe0, 0xab, 0x4c, 0xec, 0x66, 0x54, 0x9b, 0x86, 0x6b, 0x5c, 0x74, 0x9e, - 0xed, 0x77, 0xdb, 0xd6, 0x4e, 0x93, 0xbc, 0x63, 0x2e, 0x2c, 0xce, 0xb3, 0x32, 0x07, 0x59, 0xad, - 0x75, 0x99, 0xbc, 0x4a, 0x85, 0xb4, 0xda, 0xc9, 0x84, 0xde, 0xe0, 0x22, 0xff, 0x00, 0x87, 0xfc, - 0x2d, 0x62, 0xe4, 0xc6, 0x0f, 0xfc, 0xdf, 0x67, 0x20, 0xbd, 0xaa, 0x75, 0x2c, 0x8c, 0xbe, 0x2c, - 0x89, 0x22, 0x7f, 0x23, 0x4c, 0x6f, 0x1a, 0xf5, 0xdd, 0x0e, 0x6e, 0xf0, 0x9d, 0xb2, 0x2b, 0x75, - 0x18, 0x98, 0x2b, 0x27, 0x41, 0x76, 0x12, 0x59, 0xb1, 0x8e, 0xb5, 0x7e, 0x5f, 0x3a, 0x39, 0xa5, - 0xdc, 0x59, 0xd5, 0x4c, 0xab, 0xb2, 0x49, 0xd2, 0xdc, 0x53, 0xca, 0xfe, 0x44, 0x0e, 0xfa, 0x4c, - 0x08, 0xf4, 0xd9, 0x60, 0xe8, 0xc7, 0x04, 0xa0, 0x57, 0x72, 0x30, 0xb6, 0xa9, 0x37, 0x31, 0xf9, - 0x60, 0xbc, 0x47, 0x7c, 0x2b, 0xb6, 0x3d, 0x61, 0xf3, 0xde, 0x1d, 0x93, 0x16, 0xf4, 0x26, 0x56, - 0xdd, 0xcf, 0xd0, 0x32, 0xdd, 0xec, 0x77, 0x63, 0xdc, 0x27, 0x7c, 0x31, 0xee, 0x15, 0x48, 0x35, - 0x34, 0x4b, 0x23, 0xac, 0x9f, 0x54, 0xc9, 0x7f, 0x7e, 0xef, 0x48, 0xea, 0xde, 0x3b, 0x7a, 0x5c, - 0x8a, 0xa6, 0xff, 0x1c, 0xd2, 0x02, 0xfa, 0xcf, 0x86, 0x03, 0x07, 0xf5, 0x02, 0x73, 0x9f, 0x6d, - 0x18, 0xea, 0x9a, 0x89, 0xad, 0x55, 0xff, 0xf6, 0x4c, 0x5a, 0xe5, 0x13, 0xc9, 0x8e, 0x77, 0xa7, - 0xaa, 0xed, 0x60, 0x52, 0x59, 0xde, 0x7e, 0xc7, 0xf6, 0x38, 0xf7, 0xa5, 0x7b, 0xda, 0x36, 0x3d, - 0x6c, 0x6d, 0xdb, 0xab, 0x8d, 0xf1, 0x77, 0xba, 0x37, 0xa5, 0x40, 0xca, 0xef, 0x5a, 0x2f, 0x68, - 0x65, 0xfb, 0xcf, 0xc2, 0x9b, 0x5f, 0x4c, 0x7b, 0xed, 0x5a, 0x87, 0xab, 0x6b, 0x23, 0x4a, 0x89, - 0xd8, 0x26, 0x5b, 0x50, 0xdb, 0x46, 0x72, 0x40, 0xc7, 0xf1, 0x43, 0x30, 0x0e, 0x3e, 0x0f, 0x47, - 0x54, 0x19, 0xf9, 0x14, 0x83, 0xfb, 0xec, 0x18, 0x05, 0x52, 0x9e, 0x5d, 0xe9, 0xd7, 0x84, 0x3d, - 0x81, 0x28, 0x7f, 0x42, 0x9d, 0x02, 0xa2, 0x4d, 0x95, 0xc4, 0xa2, 0xbf, 0x85, 0x54, 0x1b, 0x3f, - 0x32, 0xdf, 0xf2, 0x5b, 0x0f, 0x72, 0x07, 0xc6, 0x86, 0x37, 0xdb, 0x87, 0x5a, 0x98, 0x69, 0xb3, - 0xfb, 0x18, 0x15, 0xa2, 0xf1, 0x5b, 0xcc, 0xfe, 0x1c, 0x5a, 0xf1, 0x08, 0x8e, 0x44, 0x49, 0xee, - 0xd5, 0xf4, 0xbf, 0x25, 0xac, 0x32, 0x6d, 0xb5, 0xc3, 0x3b, 0x10, 0xb8, 0xcf, 0x51, 0x4c, 0x09, - 0x9c, 0xa3, 0x41, 0x2a, 0x92, 0xa3, 0x01, 0xef, 0x2f, 0x2c, 0xd0, 0x8f, 0x42, 0x2f, 0xa9, 0x1f, - 0xd6, 0x2a, 0x31, 0x4a, 0x0f, 0x3b, 0xa4, 0xeb, 0xe6, 0x9f, 0x4d, 0xc1, 0x24, 0xad, 0xfa, 0xbc, - 0xde, 0xd8, 0xc2, 0x16, 0xfa, 0xc7, 0xef, 0x21, 0xd4, 0x95, 0x32, 0x4c, 0x5e, 0x24, 0x64, 0xd3, - 0x48, 0xe3, 0xcc, 0x20, 0x11, 0x7e, 0xc5, 0x0b, 0x6d, 0xa7, 0x13, 0x59, 0x9d, 0xfb, 0x1e, 0x7d, - 0x40, 0x78, 0x43, 0xc5, 0x0f, 0x1a, 0x2b, 0x31, 0x5e, 0x59, 0x12, 0xdb, 0x56, 0xe9, 0x4b, 0xd6, - 0x08, 0x3c, 0xd0, 0xf9, 0x38, 0x77, 0xf9, 0x08, 0xe2, 0x14, 0x34, 0xcf, 0x8d, 0x10, 0xf7, 0x9e, - 0x32, 0x60, 0xc8, 0x21, 0xf0, 0xc4, 0x8e, 0x96, 0xf4, 0xa9, 0x3a, 0x7e, 0xce, 0xbf, 0x99, 0x5e, - 0x47, 0xb0, 0xa0, 0xe3, 0x66, 0xa3, 0x83, 0xcc, 0x83, 0x4f, 0x65, 0x4e, 0x41, 0x66, 0x93, 0x14, - 0xd6, 0xef, 0x96, 0x79, 0x96, 0x0d, 0xbd, 0x29, 0x29, 0xba, 0x55, 0xc3, 0x4c, 0x63, 0x0e, 0xb5, - 0x43, 0x81, 0xe9, 0xcd, 0x42, 0x5b, 0x25, 0xe1, 0x35, 0xc7, 0x8f, 0xd2, 0x3b, 0x24, 0x98, 0x64, - 0xf1, 0xe5, 0x72, 0x4d, 0x7d, 0xab, 0xe5, 0x3f, 0xec, 0x38, 0x70, 0x0f, 0x51, 0x6e, 0x87, 0xb4, - 0x66, 0x97, 0xc6, 0x1c, 0xf4, 0x50, 0x4f, 0x15, 0x48, 0xea, 0x53, 0x69, 0xc6, 0x08, 0xb1, 0x45, - 0x3c, 0xc1, 0x76, 0x68, 0x1e, 0x61, 0x6c, 0x91, 0xbe, 0x95, 0xc7, 0x8f, 0xd8, 0x57, 0x24, 0x38, - 0xc6, 0x08, 0x38, 0x87, 0x4d, 0x4b, 0xaf, 0x6b, 0x4d, 0x8a, 0xdc, 0xab, 0x13, 0xc3, 0x80, 0x6e, - 0x09, 0xa6, 0xf6, 0xfc, 0xc5, 0x32, 0x08, 0x67, 0x7b, 0x42, 0xc8, 0x11, 0xa0, 0xf2, 0x1f, 0x46, - 0x88, 0xd1, 0xc0, 0x71, 0x95, 0x2b, 0x73, 0x84, 0x31, 0x1a, 0x84, 0x89, 0x88, 0x1f, 0xe2, 0x5f, - 0x4e, 0xd1, 0xb0, 0x25, 0x9e, 0xfa, 0xfc, 0xbc, 0x30, 0xb6, 0x6b, 0x30, 0x41, 0xb0, 0xa4, 0x1f, - 0x32, 0xab, 0x41, 0x88, 0x10, 0xbb, 0x7a, 0x87, 0xc5, 0x54, 0x73, 0xbf, 0x55, 0xfd, 0xe5, 0xa0, - 0xf3, 0x00, 0xde, 0x2b, 0xbf, 0x92, 0x4e, 0x04, 0x29, 0xe9, 0xa4, 0x98, 0x92, 0x7e, 0x9b, 0xf0, - 0xd1, 0xba, 0xde, 0x64, 0x1f, 0x5c, 0x3c, 0xc4, 0x0e, 0x55, 0xf5, 0xaf, 0x3d, 0x7e, 0xb9, 0x78, - 0x43, 0xaa, 0x3b, 0x02, 0xf2, 0x87, 0x87, 0x32, 0x3f, 0xf6, 0xeb, 0x03, 0xa9, 0x4b, 0x1f, 0x1c, - 0x60, 0x3e, 0x7c, 0x33, 0x1c, 0xa5, 0x55, 0xe4, 0x5d, 0xb2, 0xe8, 0xc5, 0x9a, 0xdd, 0xc9, 0xe8, - 0x23, 0x03, 0x08, 0x41, 0xbf, 0xf0, 0xcc, 0x61, 0x4a, 0x2e, 0xda, 0x64, 0x37, 0xaa, 0x80, 0x1c, - 0x5e, 0x54, 0xe7, 0xaf, 0xa7, 0xe8, 0x6c, 0x77, 0x8d, 0xc4, 0x22, 0x44, 0x7f, 0x91, 0x1a, 0xc6, - 0x88, 0xf0, 0x20, 0xa4, 0x2c, 0xe7, 0x02, 0xe0, 0xde, 0x86, 0x09, 0xaf, 0x4a, 0x2f, 0x8a, 0x21, - 0xbe, 0x64, 0x2d, 0x1d, 0x51, 0xc9, 0x97, 0xca, 0x49, 0x38, 0xba, 0xa1, 0xd5, 0x2f, 0x6c, 0x99, - 0xc6, 0x6e, 0xab, 0x91, 0x37, 0x9a, 0x86, 0x49, 0x8d, 0x4e, 0x24, 0x62, 0x23, 0xff, 0x42, 0x39, - 0xed, 0x4c, 0x1d, 0xd2, 0xfd, 0xa6, 0x0e, 0x4b, 0x47, 0xd8, 0xe4, 0x41, 0xb9, 0xc3, 0x55, 0x3a, - 0x99, 0x50, 0xa5, 0xb3, 0x74, 0xc4, 0x51, 0x3b, 0x4a, 0x01, 0xc6, 0x1a, 0xfa, 0x1e, 0xd9, 0x47, - 0x26, 0x06, 0xff, 0x7e, 0x47, 0x75, 0x0a, 0xfa, 0x1e, 0xdd, 0x75, 0x5e, 0x3a, 0xa2, 0xba, 0x5f, - 0x2a, 0x8b, 0x30, 0x4e, 0x6c, 0xf6, 0xa4, 0x98, 0xb1, 0x48, 0xc7, 0x70, 0x96, 0x8e, 0xa8, 0xde, - 0xb7, 0xf6, 0xec, 0x23, 0x45, 0x1c, 0xdc, 0x1f, 0x70, 0xf6, 0xc2, 0x13, 0x91, 0xf6, 0xc2, 0x6d, - 0x5e, 0xd0, 0xdd, 0xf0, 0xe3, 0x90, 0xae, 0x13, 0x0e, 0x27, 0x19, 0x87, 0xe9, 0xa3, 0x72, 0x2f, - 0xa4, 0x76, 0x34, 0xd3, 0x59, 0x02, 0xdf, 0xd8, 0xbf, 0xdc, 0x15, 0xcd, 0xbc, 0x60, 0x23, 0x68, - 0x7f, 0x35, 0x9f, 0x85, 0x34, 0x61, 0x9c, 0xfb, 0x07, 0x3d, 0xcb, 0xa6, 0x21, 0x79, 0xa3, 0x65, - 0x0f, 0xfb, 0x35, 0xc3, 0x39, 0x05, 0x50, 0x1f, 0x86, 0xcc, 0xf1, 0x1e, 0xaf, 0xd2, 0x3e, 0x8f, - 0xd7, 0x3f, 0x1f, 0x60, 0x6e, 0xd1, 0x4d, 0x69, 0xf0, 0x12, 0xb9, 0xa9, 0xb7, 0x7c, 0x54, 0x39, - 0x8f, 0x11, 0xb5, 0x46, 0xd4, 0x59, 0x47, 0x1f, 0xf2, 0xe2, 0x57, 0x1e, 0xbf, 0x9d, 0x82, 0x19, - 0x9b, 0x10, 0xea, 0x0b, 0xce, 0x07, 0x32, 0x45, 0x1f, 0x1f, 0xca, 0xe4, 0xb2, 0xc7, 0x88, 0x20, - 0xf5, 0x1c, 0x11, 0xf6, 0x9d, 0x04, 0x4a, 0xf5, 0x39, 0x09, 0x94, 0x8e, 0x66, 0xa0, 0xfb, 0x63, - 0xbf, 0xfc, 0xac, 0xf2, 0xf2, 0x73, 0x77, 0x00, 0x40, 0xbd, 0xf8, 0x32, 0x94, 0x09, 0xc8, 0xef, - 0xbb, 0x92, 0x52, 0xe5, 0x24, 0xe5, 0x81, 0xc1, 0x09, 0x89, 0x5f, 0x5a, 0xde, 0x9f, 0x82, 0x17, - 0x79, 0xc4, 0x94, 0xf1, 0x45, 0x26, 0x28, 0x9f, 0x1d, 0x8a, 0xa0, 0xdc, 0xe1, 0x5d, 0x11, 0xd4, - 0x67, 0xb1, 0xef, 0xe4, 0x8b, 0x5b, 0x62, 0xfe, 0x4c, 0xf8, 0x04, 0x43, 0x37, 0x50, 0x2e, 0x6f, - 0x02, 0x84, 0xe5, 0x38, 0x64, 0xa8, 0x86, 0x71, 0x2e, 0x38, 0xa7, 0x4f, 0x11, 0xd5, 0x8d, 0xd8, - 0xb9, 0x07, 0x51, 0xda, 0x46, 0x20, 0x3f, 0xcc, 0xf0, 0x50, 0xdb, 0x35, 0x5b, 0xa5, 0x96, 0x65, - 0xa0, 0x1f, 0x1f, 0x8a, 0xe0, 0xb8, 0xbe, 0x64, 0xd2, 0x20, 0xbe, 0x64, 0x03, 0x99, 0x21, 0x9c, - 0x16, 0x1c, 0x8a, 0x19, 0x22, 0xa0, 0xf2, 0xf8, 0xf1, 0x7b, 0xa7, 0x04, 0xc7, 0xd9, 0x6a, 0x68, - 0x9e, 0x9f, 0xc2, 0xa1, 0x87, 0x87, 0x01, 0xe4, 0x31, 0x67, 0x1e, 0xc3, 0xee, 0x35, 0x26, 0x0f, - 0xfc, 0x19, 0x83, 0xd0, 0xa8, 0x9c, 0xdc, 0x7a, 0xad, 0x8b, 0xc2, 0xa1, 0x20, 0x25, 0x16, 0x8c, - 0x33, 0x02, 0x19, 0xf1, 0x63, 0xf6, 0xf3, 0x12, 0x64, 0xd8, 0x3d, 0x03, 0x6b, 0xb1, 0x38, 0x20, - 0xf0, 0x11, 0x98, 0x04, 0x36, 0xbe, 0x22, 0x07, 0xf8, 0x8f, 0x6f, 0xcb, 0xeb, 0x70, 0x22, 0xf8, - 0xa3, 0x27, 0x25, 0x66, 0x59, 0x59, 0xd6, 0x2c, 0x7c, 0x09, 0xfd, 0x8c, 0x04, 0xd9, 0x2a, 0xb6, - 0x6c, 0xcd, 0x24, 0x8e, 0x51, 0xb0, 0xcd, 0x5c, 0xf1, 0xad, 0xdd, 0xc6, 0xe9, 0x6a, 0x2c, 0xaa, - 0x8e, 0x23, 0x74, 0xcd, 0x31, 0x9a, 0x46, 0xad, 0xe3, 0xc2, 0x2a, 0x1f, 0xc1, 0x79, 0xe7, 0xeb, - 0x61, 0x9c, 0x90, 0x41, 0xe0, 0xf8, 0xa8, 0x0f, 0x9a, 0x5f, 0x4a, 0xc4, 0x82, 0x8d, 0x3d, 0x7c, - 0x91, 0x60, 0xfc, 0x64, 0xf6, 0x32, 0x21, 0x32, 0x7c, 0xd9, 0xcb, 0xb4, 0x8e, 0x4a, 0xbf, 0x8a, - 0x70, 0x3b, 0x93, 0xdb, 0xac, 0xa1, 0x22, 0x2b, 0x76, 0x6d, 0x46, 0xbf, 0xba, 0x47, 0x70, 0xe9, - 0x8a, 0x04, 0x63, 0x55, 0x7b, 0xb9, 0x61, 0x8f, 0x29, 0xe7, 0x0f, 0x0e, 0x65, 0xef, 0xc1, 0x2a, - 0x62, 0x47, 0x73, 0x38, 0x32, 0xbc, 0x21, 0x2a, 0x42, 0x47, 0x0b, 0xab, 0x3c, 0x7e, 0x3c, 0xde, - 0x45, 0xf1, 0x20, 0xb2, 0x8c, 0xde, 0x2a, 0x81, 0xb4, 0x88, 0xad, 0x21, 0x9d, 0x1c, 0x11, 0x3d, - 0x85, 0xc0, 0x0f, 0x5d, 0xa1, 0xc1, 0x02, 0x38, 0x86, 0x11, 0x9a, 0xe7, 0x16, 0xf1, 0x70, 0x3a, - 0x90, 0x58, 0x94, 0x00, 0x21, 0x02, 0xe2, 0x47, 0xed, 0x3d, 0x14, 0x35, 0x6a, 0xc1, 0xfa, 0xb1, - 0x21, 0x68, 0xc4, 0xd1, 0x4e, 0xde, 0x1d, 0x06, 0x92, 0x32, 0x0e, 0xab, 0xbf, 0xf5, 0xaa, 0x7c, - 0x24, 0x3e, 0x86, 0x60, 0x77, 0xf6, 0x6d, 0x5c, 0xbf, 0x80, 0x1b, 0xe8, 0xff, 0x3b, 0x38, 0x74, - 0x33, 0x90, 0xad, 0xd3, 0xd2, 0x08, 0x78, 0x63, 0xaa, 0xf3, 0x18, 0xe1, 0x6e, 0x74, 0x5e, 0x11, - 0xd1, 0xcf, 0x47, 0x78, 0x37, 0xba, 0x40, 0xf5, 0xf1, 0x23, 0xf3, 0x7b, 0x74, 0x92, 0x51, 0xaa, - 0x1b, 0x2d, 0xf4, 0x6f, 0x0e, 0x0e, 0xcb, 0xd5, 0x30, 0xae, 0xd7, 0x8d, 0x56, 0x69, 0x47, 0xdb, - 0x72, 0xcc, 0xa8, 0x5e, 0x82, 0xf3, 0xb6, 0xb8, 0x63, 0x3c, 0xa2, 0xb3, 0xad, 0x19, 0x2f, 0x61, - 0xd0, 0xc9, 0x84, 0x4d, 0xfa, 0x61, 0x4d, 0x26, 0x7a, 0xd4, 0x1d, 0x3f, 0x64, 0x1f, 0xf1, 0x5c, - 0x28, 0xa8, 0x2a, 0x7c, 0x41, 0x58, 0x32, 0x06, 0x19, 0xce, 0xfc, 0xad, 0x38, 0x94, 0xe1, 0x2c, - 0x84, 0x80, 0xf8, 0x71, 0xfc, 0x35, 0x0f, 0xc7, 0xd8, 0xed, 0x18, 0x07, 0x40, 0x67, 0x78, 0xd3, - 0xc3, 0x01, 0xd1, 0x39, 0x9c, 0x29, 0xe2, 0x33, 0x2c, 0xd8, 0x14, 0x9b, 0xf1, 0xa0, 0x1f, 0x1d, - 0x06, 0x38, 0x77, 0x0f, 0xb2, 0x29, 0x46, 0xb7, 0xc4, 0x22, 0xdc, 0xc5, 0xb3, 0x8f, 0x83, 0x76, - 0x29, 0x43, 0x41, 0x50, 0xec, 0x2e, 0x1e, 0x91, 0xfa, 0xe3, 0x07, 0xf0, 0x67, 0x25, 0x98, 0x26, - 0xfb, 0x5c, 0x4d, 0xac, 0x99, 0x54, 0x51, 0x0e, 0xc5, 0x1b, 0xf3, 0x5d, 0xc2, 0x61, 0xf2, 0x79, - 0x3e, 0x78, 0x74, 0x0c, 0x05, 0x0a, 0xb1, 0x1b, 0x5d, 0x05, 0x49, 0x18, 0x89, 0x29, 0x50, 0x76, - 0x49, 0x60, 0x22, 0x3e, 0x1c, 0x3c, 0x22, 0xba, 0x7d, 0xf1, 0xcc, 0x70, 0x3a, 0xdb, 0x88, 0xdd, - 0xbe, 0x44, 0x88, 0x18, 0x41, 0x30, 0xf6, 0xdb, 0x99, 0x29, 0xb0, 0x46, 0xae, 0xaa, 0x7a, 0x2a, - 0xe5, 0x1e, 0x7e, 0xf8, 0xd4, 0x50, 0xdc, 0x7c, 0x0e, 0x10, 0x39, 0x51, 0x81, 0x94, 0x69, 0x5c, - 0xa4, 0x66, 0xa9, 0x29, 0x95, 0xfc, 0x27, 0x53, 0x7e, 0xa3, 0xb9, 0xbb, 0xd3, 0xea, 0x90, 0xb9, - 0xe3, 0x94, 0xea, 0x3c, 0x2a, 0xd7, 0xc3, 0xd4, 0x45, 0xdd, 0xda, 0x5e, 0xc2, 0x5a, 0x03, 0x9b, - 0xaa, 0x71, 0x91, 0x5d, 0x08, 0xcb, 0x27, 0xf2, 0x7b, 0xb0, 0x02, 0xf3, 0x4b, 0x72, 0x7f, 0xd5, - 0x48, 0x4e, 0x4a, 0x44, 0x99, 0x79, 0x06, 0x53, 0x15, 0xbf, 0xc0, 0xbc, 0x57, 0x82, 0x71, 0xd5, - 0xb8, 0xc8, 0x84, 0xe4, 0xdf, 0x1e, 0xae, 0x8c, 0x44, 0x5e, 0xe8, 0xd1, 0xfb, 0xc8, 0x1c, 0xf2, - 0x47, 0xbe, 0xd0, 0x0b, 0xad, 0x7e, 0x24, 0xee, 0xf1, 0x93, 0xaa, 0x71, 0xb1, 0x8a, 0x2d, 0xda, - 0x23, 0xd0, 0xfa, 0x90, 0x3c, 0xf9, 0xf4, 0x0e, 0x2d, 0x90, 0xad, 0xc3, 0xdd, 0x67, 0xf4, 0x4e, - 0xe1, 0x6b, 0x9e, 0x78, 0x06, 0xb9, 0x24, 0x0e, 0x05, 0xa2, 0xdf, 0x16, 0xba, 0xdd, 0x49, 0x8c, - 0x82, 0xf8, 0x51, 0xfa, 0x49, 0x09, 0x26, 0x54, 0xe3, 0xa2, 0x3d, 0x34, 0x2c, 0xe8, 0xcd, 0xe6, - 0x70, 0x46, 0xc8, 0xa8, 0x93, 0x7f, 0x87, 0x0d, 0x0e, 0x15, 0x23, 0x9f, 0xfc, 0xf7, 0x21, 0x20, - 0x7e, 0x18, 0x1e, 0xa7, 0x9d, 0xc5, 0x19, 0xa1, 0x5b, 0xc3, 0xc1, 0x61, 0xd0, 0x0e, 0xe1, 0x92, - 0x71, 0x68, 0x1d, 0x22, 0x88, 0x82, 0x91, 0xec, 0x9c, 0x4c, 0xe7, 0xc9, 0x30, 0x3f, 0xdc, 0x3e, - 0xf1, 0xee, 0x68, 0xee, 0x35, 0x6c, 0xd8, 0xe5, 0x08, 0x19, 0x0a, 0x1a, 0x11, 0xdc, 0x68, 0x04, - 0x68, 0x88, 0x1f, 0x8f, 0x0f, 0x4a, 0x30, 0x49, 0x49, 0x78, 0x81, 0xcc, 0x02, 0x06, 0xea, 0x54, - 0xfe, 0x16, 0x1c, 0x4e, 0xa7, 0x0a, 0xa1, 0x20, 0x7e, 0x10, 0xff, 0x4f, 0x92, 0xcc, 0xe3, 0x06, - 0x38, 0xa3, 0x18, 0x84, 0xe0, 0xc0, 0x93, 0xb1, 0x21, 0x9e, 0x53, 0x1c, 0x64, 0x32, 0x76, 0x48, - 0x67, 0x15, 0x1f, 0x77, 0x7b, 0xd1, 0x30, 0x31, 0x38, 0x40, 0x57, 0x18, 0x22, 0x0c, 0x03, 0x76, - 0x85, 0x43, 0x42, 0xe2, 0xaf, 0x25, 0x00, 0x4a, 0xc0, 0x8a, 0xb1, 0x87, 0xd1, 0xd3, 0x43, 0x59, - 0xf8, 0x76, 0xbb, 0x86, 0x4a, 0x7d, 0x5c, 0x43, 0x23, 0x9e, 0xf6, 0x8f, 0x6a, 0x09, 0xf4, 0x71, - 0x79, 0x25, 0xf0, 0x9a, 0xcd, 0x18, 0x2d, 0x81, 0xe1, 0xf5, 0xc7, 0x8f, 0xf1, 0x97, 0xe8, 0x6c, - 0xce, 0x3b, 0xc5, 0xf4, 0x2b, 0x43, 0x41, 0xd9, 0xb7, 0xfa, 0x97, 0xf8, 0xd5, 0xff, 0x01, 0xb0, - 0x1d, 0x74, 0x8e, 0xd8, 0xef, 0x74, 0x52, 0xfc, 0x73, 0xc4, 0xc3, 0x3b, 0x85, 0xf4, 0x63, 0x29, - 0x38, 0xca, 0x94, 0xc8, 0xf7, 0x02, 0xc4, 0x11, 0xcf, 0x92, 0x70, 0x4a, 0xb2, 0x0f, 0xca, 0xc3, - 0x32, 0x48, 0x45, 0x31, 0x65, 0x0a, 0x90, 0x37, 0x12, 0xeb, 0x46, 0xa6, 0x78, 0xa9, 0xad, 0xb5, - 0x1a, 0xe2, 0x01, 0x1f, 0xfb, 0x00, 0xef, 0xd8, 0x1a, 0x25, 0xde, 0xd6, 0xd8, 0xc3, 0x32, 0x19, - 0x79, 0xe7, 0x9a, 0xb0, 0x8c, 0x92, 0x3b, 0xf2, 0x9d, 0xeb, 0xe0, 0xba, 0xe3, 0x47, 0xe9, 0xdd, - 0x12, 0xa4, 0xaa, 0x86, 0x69, 0xa1, 0x27, 0xa2, 0xf4, 0x4e, 0xca, 0x79, 0x0f, 0x24, 0xe7, 0x59, - 0xc9, 0x73, 0x57, 0x5f, 0x9d, 0x0a, 0x3f, 0x4f, 0xa7, 0x59, 0x1a, 0x09, 0x07, 0x6e, 0xd7, 0xef, - 0xbb, 0x03, 0x2b, 0x6a, 0xd0, 0x06, 0xca, 0xbf, 0x6a, 0xb0, 0x13, 0x71, 0x6c, 0x41, 0x1b, 0x02, - 0x6b, 0x1e, 0x81, 0xdd, 0x77, 0x82, 0xf9, 0xa5, 0x92, 0x1b, 0x01, 0x9f, 0xa0, 0x2e, 0x23, 0x65, - 0x6d, 0x07, 0x0f, 0xc9, 0x65, 0x98, 0xc4, 0x1c, 0x94, 0xbc, 0x98, 0x83, 0x51, 0x3b, 0x14, 0x3d, - 0xe5, 0x48, 0x49, 0x1a, 0x75, 0x87, 0x0a, 0xa9, 0x3b, 0x7e, 0x60, 0xbe, 0x60, 0x8f, 0x7c, 0x64, - 0x0d, 0x99, 0x6b, 0x35, 0x58, 0x10, 0xb7, 0xbf, 0x3f, 0xec, 0xbd, 0x9b, 0x7d, 0x61, 0xde, 0xf8, - 0x70, 0x91, 0xe9, 0xee, 0x1b, 0xec, 0xe6, 0x69, 0xc8, 0x38, 0x72, 0xf2, 0x32, 0x13, 0xe9, 0x16, - 0x3b, 0xf7, 0x3b, 0xf4, 0x6c, 0x34, 0x73, 0x0e, 0x29, 0xa2, 0x8b, 0x71, 0x31, 0x0f, 0xa9, 0x11, - 0x0c, 0x3d, 0x02, 0xd4, 0xfd, 0xcb, 0xf0, 0x32, 0xda, 0x7f, 0x89, 0x60, 0x44, 0x53, 0xb6, 0x7b, - 0xf5, 0xe3, 0x61, 0x79, 0x19, 0xf5, 0x23, 0x60, 0x04, 0x21, 0xce, 0xd2, 0x6c, 0x93, 0x97, 0xb8, - 0xe0, 0xa1, 0x2f, 0x26, 0x63, 0x57, 0xde, 0xe2, 0xd7, 0xe6, 0x7a, 0x74, 0x85, 0x6b, 0xef, 0x28, - 0x8e, 0xae, 0x61, 0xc5, 0x8d, 0xc0, 0x9c, 0x90, 0x24, 0x2e, 0xca, 0xe7, 0xf5, 0x86, 0xb5, 0x3d, - 0x24, 0x47, 0xff, 0x8b, 0x76, 0x59, 0xce, 0xfd, 0x73, 0xe4, 0x01, 0x3d, 0x9f, 0x88, 0x14, 0xbe, - 0xc2, 0x65, 0x09, 0x21, 0x2b, 0x80, 0xc5, 0x11, 0x82, 0x4e, 0x84, 0x96, 0x37, 0x42, 0x89, 0x3e, - 0xa7, 0x37, 0xb0, 0xf1, 0x02, 0x94, 0x68, 0x42, 0xd7, 0xf0, 0x24, 0x3a, 0xac, 0xb8, 0x7f, 0xa1, - 0x12, 0xed, 0xb2, 0x64, 0x48, 0x12, 0x1d, 0x5a, 0xde, 0x08, 0x62, 0xa3, 0x03, 0x9b, 0x5f, 0x2f, - 0xeb, 0xad, 0x0b, 0xe8, 0x63, 0x69, 0xe7, 0xe6, 0xbb, 0xf3, 0xba, 0xb5, 0xcd, 0x8e, 0xb9, 0x7f, - 0x44, 0xf8, 0x8e, 0x8c, 0x01, 0x8e, 0xb2, 0x9f, 0x00, 0xb0, 0xd8, 0x8d, 0x54, 0x6e, 0xcc, 0x1c, - 0x5f, 0x8a, 0x92, 0x83, 0x29, 0xbd, 0x65, 0x61, 0xb3, 0xa5, 0x35, 0x17, 0x9a, 0xda, 0x56, 0x67, - 0x26, 0x4b, 0x8e, 0x66, 0x5e, 0xd5, 0x35, 0x78, 0x97, 0x7c, 0x79, 0x54, 0xfe, 0x0b, 0xe1, 0xb9, - 0x66, 0xc4, 0x90, 0x3f, 0xa7, 0x04, 0x23, 0xb1, 0xb8, 0xe1, 0x9f, 0xbe, 0x19, 0xcd, 0xf8, 0x62, - 0x03, 0x32, 0xd7, 0x0d, 0x46, 0xe4, 0x99, 0xa2, 0xbf, 0xf1, 0x52, 0x57, 0xe3, 0xdd, 0xa9, 0x47, - 0x6a, 0xc8, 0x86, 0x19, 0x11, 0xd2, 0x47, 0x70, 0xf2, 0x23, 0x0d, 0x57, 0x38, 0xe1, 0xeb, 0xda, - 0x6d, 0xac, 0x99, 0x5a, 0xab, 0x8e, 0x23, 0x48, 0x73, 0xd8, 0x5c, 0x72, 0x01, 0xc6, 0xf4, 0xba, - 0xd1, 0xaa, 0xea, 0xaf, 0x72, 0xae, 0x72, 0x09, 0x8f, 0x7d, 0x4a, 0x38, 0x52, 0x62, 0x5f, 0xa8, - 0xee, 0xb7, 0x4a, 0x09, 0xc6, 0xeb, 0x9a, 0xd9, 0xa8, 0xfa, 0x2e, 0xb7, 0xbe, 0xa5, 0x7f, 0x41, - 0x79, 0xe7, 0x13, 0xd5, 0xfb, 0x5a, 0xa9, 0xf0, 0x4c, 0xcc, 0x74, 0x9d, 0xfe, 0x0d, 0x2c, 0xac, - 0xe0, 0x7d, 0xc4, 0xf1, 0xdc, 0xe6, 0x8e, 0x89, 0x9b, 0xe4, 0xe6, 0x4c, 0xda, 0xed, 0xc6, 0x55, - 0x2f, 0x01, 0xbd, 0xd7, 0x2f, 0xcd, 0x2b, 0xbc, 0x34, 0xbf, 0x32, 0x40, 0x24, 0xf6, 0xa1, 0x31, - 0x94, 0x39, 0xf1, 0x3b, 0x5c, 0xc1, 0x5c, 0xe5, 0x04, 0xf3, 0xde, 0x01, 0xa9, 0x88, 0x5f, 0x32, - 0x7f, 0x3f, 0x03, 0x53, 0xf4, 0x30, 0x39, 0x63, 0x27, 0xfa, 0x59, 0x72, 0x59, 0x9b, 0x75, 0x16, - 0x5f, 0x46, 0xd5, 0x83, 0x0f, 0x74, 0x32, 0x48, 0x17, 0xf0, 0x65, 0xd6, 0xdf, 0xed, 0xbf, 0x51, - 0xf7, 0x48, 0x1d, 0xba, 0xe6, 0x28, 0x4d, 0xa3, 0xde, 0x23, 0x0d, 0xaf, 0x3e, 0x7e, 0x7c, 0x7e, - 0x41, 0x02, 0x29, 0xd7, 0x68, 0x88, 0xc7, 0x77, 0x0a, 0x86, 0xe2, 0x5a, 0x98, 0x70, 0xfa, 0xcc, - 0x59, 0x17, 0x12, 0x7f, 0x52, 0x54, 0x83, 0x93, 0xcb, 0x9b, 0x5c, 0x63, 0xe4, 0x16, 0xdc, 0x90, - 0xba, 0xe3, 0x07, 0xe5, 0x57, 0xb2, 0xac, 0xd3, 0xcc, 0x1b, 0xc6, 0x05, 0x72, 0x2c, 0xe1, 0x09, - 0x09, 0xd2, 0x0b, 0xd8, 0xaa, 0x6f, 0x0f, 0xa9, 0xcf, 0xec, 0x9a, 0x4d, 0xa7, 0xcf, 0xec, 0xbb, - 0x79, 0xb2, 0xff, 0xc4, 0xd0, 0x21, 0x6b, 0x8e, 0x90, 0x34, 0xea, 0x70, 0x8d, 0xa1, 0xb5, 0xc7, - 0x0f, 0xce, 0xf3, 0x12, 0x4c, 0xbb, 0x66, 0x23, 0x8a, 0xc9, 0xcf, 0xbd, 0xe0, 0x8c, 0x81, 0xe8, - 0xb3, 0xd1, 0x42, 0xaa, 0xb8, 0x3c, 0xe5, 0x5b, 0x16, 0xb3, 0xb5, 0x2e, 0x42, 0xb0, 0x15, 0x31, - 0x02, 0x47, 0xb0, 0x2c, 0x96, 0x60, 0x8c, 0x10, 0x54, 0xd0, 0xf7, 0x88, 0x9b, 0x16, 0x67, 0xbd, - 0x7b, 0x74, 0x28, 0xd6, 0xbb, 0x7b, 0x79, 0xeb, 0x9d, 0x60, 0x08, 0x43, 0xc7, 0x78, 0x17, 0xd1, - 0x6f, 0xc1, 0xfe, 0x7e, 0xe8, 0xb6, 0xbb, 0x08, 0x7e, 0x0b, 0x7d, 0xea, 0x1f, 0xc1, 0x15, 0xbd, - 0x27, 0x99, 0xb2, 0x75, 0x36, 0xaf, 0xd0, 0xa3, 0x0a, 0xa4, 0xce, 0xd9, 0x7f, 0xbe, 0xe8, 0x5d, - 0x54, 0xf1, 0xe8, 0x10, 0x0e, 0xc2, 0xdf, 0x0f, 0x29, 0x72, 0x19, 0x6f, 0xaa, 0x2b, 0xe4, 0x66, - 0xe8, 0x4e, 0x9a, 0x4d, 0x88, 0x4a, 0xbe, 0x8b, 0x1a, 0xac, 0x8c, 0x2b, 0x62, 0x6e, 0x78, 0x6e, - 0x78, 0xca, 0x71, 0xc8, 0xd8, 0xe5, 0xba, 0xcb, 0x2c, 0xf6, 0x14, 0xc5, 0xf8, 0x2e, 0x40, 0x5b, - 0xfc, 0xc8, 0x7f, 0x91, 0xdc, 0xc9, 0x43, 0x62, 0xaa, 0x3e, 0x39, 0x04, 0x78, 0x03, 0xd8, 0x72, - 0x60, 0xd8, 0xdf, 0x7d, 0x10, 0xd8, 0xdd, 0x00, 0xae, 0x23, 0x75, 0xa2, 0x15, 0xa0, 0x61, 0x24, - 0x27, 0x7f, 0x33, 0xcc, 0xf1, 0xef, 0xe1, 0x61, 0xa2, 0x9b, 0xe2, 0x84, 0xfe, 0x40, 0xe8, 0x0c, - 0xd1, 0x21, 0x70, 0x60, 0x74, 0x0e, 0xc9, 0x25, 0xf0, 0x4f, 0x24, 0x98, 0xa8, 0x7a, 0x17, 0xc8, - 0x89, 0xdf, 0x50, 0x10, 0x19, 0x22, 0x7b, 0xac, 0xe5, 0xe2, 0x43, 0x4e, 0x0d, 0x1e, 0x32, 0x94, - 0x67, 0x9d, 0x8f, 0xfe, 0x51, 0x87, 0x0c, 0x15, 0x25, 0x24, 0x7e, 0x20, 0x3f, 0x4d, 0x6f, 0x04, - 0xc9, 0xd5, 0x2d, 0x7d, 0x0f, 0xa3, 0xc7, 0x63, 0x54, 0xa4, 0xc7, 0x21, 0x63, 0x6c, 0x6e, 0x76, - 0xd8, 0xcd, 0x82, 0x53, 0x2a, 0x7b, 0xf2, 0xae, 0x74, 0xa7, 0xe0, 0xb2, 0x2b, 0xdd, 0x23, 0x06, - 0x15, 0xdc, 0xc7, 0x50, 0xda, 0xa0, 0x51, 0x07, 0x15, 0x14, 0x23, 0x63, 0x04, 0x61, 0x83, 0xc1, - 0xe6, 0x1e, 0x33, 0xd9, 0xbc, 0x95, 0x19, 0x09, 0xf0, 0xc1, 0xb1, 0x9d, 0x85, 0x49, 0x9f, 0x45, - 0xc0, 0x09, 0x4c, 0xcf, 0xa5, 0x45, 0x3d, 0x6b, 0xec, 0xb2, 0x6c, 0xe8, 0xf6, 0x82, 0x08, 0x76, - 0x60, 0x11, 0x22, 0x46, 0x72, 0xef, 0x8b, 0x33, 0xe4, 0x8d, 0x08, 0xab, 0xf7, 0xfb, 0xb1, 0xaa, - 0xf0, 0x58, 0x9d, 0x11, 0x61, 0x93, 0xd8, 0x10, 0x28, 0xb4, 0x9c, 0x7c, 0xa7, 0x0b, 0x97, 0xca, - 0xc1, 0x75, 0xff, 0xc0, 0x74, 0xc4, 0x8f, 0xd8, 0x87, 0x24, 0x7a, 0xf9, 0x43, 0x6e, 0x4f, 0xd3, - 0x9b, 0xe4, 0x80, 0xf8, 0x10, 0xae, 0x20, 0xfc, 0xef, 0x7e, 0x50, 0xce, 0xf1, 0xa0, 0x3c, 0x28, - 0xc2, 0x0c, 0x8e, 0xa2, 0x00, 0x6c, 0x5e, 0xee, 0xb7, 0x99, 0xd3, 0x28, 0xa2, 0x57, 0x76, 0x47, - 0x62, 0x63, 0xef, 0xfd, 0xc6, 0xf4, 0x4f, 0xb9, 0x20, 0x3d, 0xcc, 0x81, 0x54, 0x3c, 0x28, 0x5d, - 0xd1, 0xb0, 0x5a, 0x8e, 0x8e, 0x95, 0x32, 0x03, 0xc7, 0xca, 0x95, 0xda, 0x7a, 0x6e, 0xbd, 0x90, - 0xab, 0xe5, 0xce, 0x95, 0x8a, 0xe7, 0xd7, 0xe7, 0x97, 0x2b, 0xf9, 0xb3, 0xb2, 0x84, 0x7e, 0x95, - 0x8e, 0x81, 0x55, 0x63, 0xd7, 0xac, 0x0f, 0x6b, 0xb6, 0xd9, 0x21, 0x85, 0xb1, 0x4e, 0xc7, 0x9e, - 0xa2, 0x3a, 0xae, 0x7b, 0xfe, 0x98, 0x0e, 0x71, 0xfd, 0x3a, 0x5a, 0x6a, 0xc8, 0x8e, 0xeb, 0x7d, - 0x29, 0x88, 0xbf, 0x8b, 0x7d, 0x5b, 0x02, 0x58, 0x34, 0x8d, 0xdd, 0x76, 0xc5, 0x6c, 0x60, 0x13, - 0x3d, 0xe7, 0xad, 0xfa, 0x7e, 0x71, 0x08, 0x93, 0x95, 0x55, 0x80, 0x2d, 0xb7, 0x70, 0xa6, 0xa7, - 0x6e, 0x17, 0x5b, 0xe3, 0x79, 0x44, 0xa9, 0xbe, 0x32, 0xf8, 0x0b, 0x02, 0x7f, 0x80, 0xc7, 0x38, - 0x6c, 0xe4, 0xf1, 0x8a, 0x1b, 0xe6, 0xaa, 0xef, 0x5d, 0x2e, 0xd6, 0x35, 0x0e, 0xeb, 0x07, 0x0f, - 0x40, 0x49, 0xfc, 0x98, 0x7f, 0x47, 0x82, 0x09, 0xba, 0x17, 0x4b, 0x79, 0xfa, 0xb7, 0x1e, 0xe8, - 0xbf, 0x32, 0x04, 0xd0, 0xd7, 0x60, 0xd2, 0xf0, 0x4a, 0xa7, 0x23, 0xa3, 0xdf, 0xba, 0x16, 0x0a, - 0xbb, 0x8f, 0x2e, 0x95, 0x2b, 0x06, 0x7d, 0xc8, 0x8f, 0xbc, 0xca, 0x23, 0x7f, 0x6f, 0x08, 0xbf, - 0x7d, 0x25, 0x0e, 0x13, 0xfa, 0x3f, 0x70, 0xa1, 0x5f, 0xe3, 0xa0, 0xcf, 0x1d, 0x84, 0x94, 0xf8, - 0xb1, 0x7f, 0xcc, 0x35, 0xd0, 0xbb, 0xdb, 0x27, 0xb1, 0x6c, 0x9a, 0xbc, 0x7e, 0xc0, 0x05, 0x06, - 0x4f, 0x5b, 0x00, 0x52, 0xd3, 0x90, 0xd4, 0x1d, 0x1a, 0x92, 0x7a, 0x63, 0xa0, 0x25, 0x44, 0x68, - 0x45, 0xf1, 0xe3, 0xf0, 0xeb, 0x2f, 0x81, 0x74, 0x01, 0x6f, 0xec, 0x6e, 0xa1, 0xb7, 0x49, 0x90, - 0x6d, 0x1a, 0x5b, 0xa5, 0xd6, 0xa6, 0xc1, 0x1a, 0x96, 0x70, 0x1a, 0xa6, 0x28, 0x90, 0xda, 0xc6, - 0x9a, 0xd3, 0x54, 0xf2, 0x5f, 0xb9, 0x11, 0xa6, 0xed, 0x5f, 0xe7, 0x82, 0x62, 0x37, 0xfa, 0x64, - 0x57, 0xaa, 0x3d, 0x41, 0xb5, 0x0c, 0x4b, 0x6b, 0xaa, 0xb8, 0x6e, 0x98, 0x0d, 0x7a, 0x5a, 0x24, - 0xad, 0x72, 0x69, 0x36, 0xde, 0xe4, 0x99, 0xf8, 0x2f, 0xa4, 0x49, 0x06, 0x2f, 0x41, 0xb9, 0x1e, - 0xa6, 0x36, 0x75, 0xb3, 0x63, 0xd1, 0xdc, 0x35, 0xea, 0xe0, 0x92, 0x56, 0xf9, 0x44, 0x9b, 0x1e, - 0x5f, 0xc2, 0x39, 0x6c, 0x92, 0xcb, 0x85, 0xd2, 0x6a, 0x57, 0xaa, 0x4d, 0x4f, 0x53, 0xf3, 0x15, - 0x36, 0x46, 0xe9, 0xf1, 0xa7, 0xd9, 0x35, 0x7a, 0xcf, 0x76, 0x51, 0xe3, 0xb4, 0x46, 0x2e, 0xd1, - 0xae, 0xd1, 0x4e, 0x58, 0xdd, 0x6d, 0x36, 0xab, 0xb8, 0x9e, 0xdb, 0x32, 0x66, 0x80, 0xd6, 0xc8, - 0xa7, 0x2a, 0x08, 0xc6, 0x76, 0xdb, 0x55, 0x4b, 0xb3, 0x76, 0x3b, 0x33, 0x13, 0x74, 0x3f, 0xc9, - 0x79, 0x56, 0x4e, 0x00, 0x34, 0x8c, 0x8b, 0x2d, 0xf6, 0x76, 0x92, 0xfa, 0x1b, 0x79, 0x29, 0xf6, - 0xb2, 0x99, 0x8a, 0xec, 0x14, 0x8d, 0x61, 0x47, 0xfd, 0xb9, 0x3e, 0x23, 0x01, 0x58, 0xdb, 0x26, - 0xd6, 0x1a, 0x3d, 0xe1, 0x7a, 0x05, 0x1c, 0x6f, 0x1a, 0x5b, 0x9d, 0xf3, 0xba, 0xb5, 0xed, 0x01, - 0xb1, 0xe4, 0x00, 0x98, 0x56, 0x03, 0xde, 0x2a, 0x0f, 0xc2, 0x55, 0xce, 0x9b, 0xf3, 0xdb, 0x46, - 0x13, 0xd7, 0x4c, 0x8c, 0xbb, 0xf0, 0x4d, 0xab, 0x61, 0x59, 0x94, 0x39, 0x48, 0xd9, 0xaf, 0xd9, - 0xe5, 0xf1, 0x88, 0x93, 0x7b, 0x22, 0x66, 0x73, 0x4c, 0xc4, 0x54, 0x92, 0x4f, 0xb9, 0x0b, 0xae, - 0x34, 0x2e, 0xb6, 0x96, 0x8d, 0xad, 0x25, 0xad, 0x93, 0xd7, 0x36, 0xb1, 0x8a, 0xe9, 0xb1, 0x29, - 0xc3, 0x24, 0x62, 0x30, 0xa6, 0x06, 0xbd, 0x56, 0xe6, 0x40, 0xa9, 0x6b, 0x9b, 0x78, 0x99, 0x07, - 0x80, 0x4a, 0x46, 0x8f, 0x37, 0x36, 0xec, 0x76, 0xea, 0x9a, 0x03, 0x44, 0x96, 0x1e, 0x44, 0xf5, - 0xa7, 0xd9, 0x80, 0xda, 0xcf, 0x05, 0x0f, 0x90, 0x31, 0x92, 0xab, 0x2b, 0x75, 0x9f, 0x48, 0x8f, - 0xf7, 0x13, 0x69, 0xe8, 0x16, 0x69, 0x17, 0xd6, 0x09, 0x3f, 0xac, 0x9f, 0x4f, 0x43, 0xaa, 0x7a, - 0xb9, 0x55, 0x47, 0x6f, 0xf6, 0x0d, 0x7f, 0xa7, 0xe1, 0x98, 0x49, 0xcb, 0xac, 0x99, 0xda, 0x1e, - 0x36, 0x3b, 0x78, 0x99, 0xd8, 0x51, 0x12, 0xa4, 0xcc, 0x9e, 0xef, 0x6c, 0xf9, 0xed, 0x5c, 0xd0, - 0xdb, 0xc5, 0x9d, 0xb6, 0x75, 0x79, 0xd9, 0xc6, 0x23, 0x49, 0xa3, 0x40, 0x71, 0x89, 0xca, 0xfd, - 0x80, 0x2c, 0xf3, 0x72, 0xcd, 0x70, 0xf0, 0x53, 0xf1, 0x8e, 0x61, 0x61, 0xa7, 0x51, 0xb4, 0x37, - 0x87, 0xe4, 0x40, 0xbf, 0x99, 0xf2, 0xe9, 0xd6, 0x7b, 0x79, 0xdd, 0x7a, 0x63, 0x0f, 0xe8, 0xed, - 0xa6, 0x05, 0x68, 0xd2, 0x57, 0x42, 0x96, 0xca, 0xb3, 0xb3, 0x4a, 0xb9, 0xa6, 0xc7, 0xf7, 0x9e, - 0xc4, 0xab, 0x4e, 0x6e, 0xbb, 0x6f, 0x35, 0xf0, 0x9e, 0x5e, 0xc7, 0x9e, 0x3f, 0x99, 0xf3, 0xec, - 0xc2, 0x54, 0x63, 0x25, 0xfb, 0x35, 0x0f, 0x4b, 0x23, 0x3c, 0xa0, 0x7f, 0x6d, 0x91, 0x36, 0x76, - 0x2d, 0x5b, 0xc4, 0x4a, 0xad, 0x0a, 0x91, 0x3a, 0xa6, 0x8a, 0x42, 0x72, 0x28, 0xf3, 0x70, 0x35, - 0xff, 0x76, 0x89, 0xd7, 0x89, 0x54, 0x20, 0x43, 0xf3, 0xec, 0x13, 0xa7, 0x6c, 0x3f, 0x71, 0x1a, - 0xeb, 0x12, 0x27, 0xf4, 0x06, 0x77, 0xe0, 0x79, 0x80, 0x1b, 0x78, 0x6e, 0x11, 0x43, 0x61, 0x24, - 0xe1, 0xb2, 0x32, 0x94, 0xe5, 0xe8, 0x67, 0x7d, 0xb2, 0x8d, 0x60, 0x8c, 0x81, 0xea, 0xa8, 0x2f, - 0xf7, 0x79, 0x44, 0x32, 0xfc, 0x46, 0xe1, 0x5b, 0x33, 0x28, 0xf7, 0x68, 0x23, 0x02, 0xa4, 0xf8, - 0x0e, 0x48, 0xe9, 0xad, 0x4d, 0x83, 0x4d, 0xdc, 0xfa, 0x88, 0x30, 0xc9, 0x2a, 0x78, 0x4d, 0x46, - 0x48, 0xdd, 0xf1, 0x63, 0xf7, 0x5a, 0x09, 0x52, 0xb6, 0x9a, 0xf7, 0xc7, 0xfd, 0x44, 0x30, 0x46, - 0x27, 0xc5, 0x1e, 0x70, 0xce, 0x73, 0xcf, 0xbb, 0x43, 0x66, 0x61, 0x72, 0xb7, 0xa5, 0xb5, 0x8c, - 0xd6, 0xe5, 0x1d, 0xfd, 0x55, 0xee, 0x54, 0x81, 0x4b, 0xb3, 0xa9, 0xdf, 0xc2, 0x2d, 0x6c, 0x6a, - 0x16, 0xae, 0xee, 0x6d, 0x91, 0xde, 0x3a, 0xa6, 0xfa, 0x93, 0xd0, 0x63, 0xc9, 0x68, 0x0a, 0xc7, - 0xa6, 0x3a, 0xf8, 0x8a, 0xca, 0x4d, 0xbd, 0x89, 0x89, 0x7f, 0x3b, 0xf3, 0xf1, 0x70, 0x9e, 0x23, - 0xf5, 0xa6, 0x1e, 0x55, 0x8c, 0x04, 0x11, 0x99, 0xde, 0x99, 0xb2, 0x6c, 0xd4, 0xb5, 0x66, 0xc7, - 0x32, 0x4c, 0x8c, 0x5e, 0xee, 0xa1, 0xe3, 0x20, 0x90, 0xf0, 0x21, 0x70, 0x1c, 0x32, 0x0d, 0xa3, - 0xee, 0x79, 0x32, 0xb0, 0x27, 0x7e, 0x39, 0x13, 0x7a, 0x8c, 0x88, 0x36, 0xb8, 0xbb, 0xde, 0xd8, - 0x2e, 0x90, 0x11, 0x3b, 0x5a, 0x24, 0x44, 0xd4, 0x08, 0xe2, 0x2a, 0x24, 0x21, 0xb5, 0xaa, 0xb7, - 0xb6, 0xfc, 0x8b, 0x98, 0x63, 0x90, 0xd6, 0x5b, 0x0d, 0x7c, 0x89, 0x8d, 0xd4, 0xf4, 0xc1, 0x1e, - 0xce, 0x5b, 0xbb, 0x3b, 0x1b, 0xd8, 0xac, 0x6c, 0x92, 0xe6, 0x76, 0x6a, 0x46, 0x15, 0xb7, 0x9c, - 0x99, 0x59, 0xcf, 0x77, 0xe8, 0xbb, 0x89, 0x68, 0x72, 0x6f, 0x53, 0x12, 0x80, 0x8b, 0x4b, 0x54, - 0xd2, 0x47, 0x54, 0x24, 0x89, 0xef, 0x51, 0x78, 0xfc, 0xfc, 0xfd, 0x58, 0x12, 0xb2, 0x2b, 0xd8, - 0x32, 0xf5, 0x7a, 0x07, 0x3d, 0x93, 0x84, 0xa9, 0x2a, 0xb6, 0x56, 0x35, 0x53, 0xdb, 0xc1, 0x96, - 0xbd, 0x24, 0xbf, 0x85, 0x53, 0x4c, 0xed, 0xa6, 0x66, 0x6d, 0x1a, 0xe6, 0x8e, 0xa3, 0x98, 0x9c, - 0xe7, 0xbb, 0x53, 0x4f, 0x7c, 0x4d, 0x4a, 0xf0, 0xcc, 0x0c, 0x75, 0xbd, 0x61, 0x15, 0xce, 0x71, - 0x95, 0x05, 0x9c, 0xb0, 0x10, 0x73, 0xa6, 0x11, 0x29, 0x31, 0x7e, 0x66, 0xfe, 0xb1, 0x04, 0xd2, - 0xb2, 0xb1, 0x85, 0xde, 0x23, 0x41, 0x8a, 0xc8, 0xd7, 0x6f, 0xf9, 0x86, 0xe4, 0x19, 0xc8, 0xee, - 0xe0, 0x4e, 0x47, 0xdb, 0xc2, 0xce, 0xfd, 0xd2, 0xec, 0x51, 0x39, 0x03, 0xe9, 0x26, 0xde, 0xc3, - 0x4d, 0x42, 0xc6, 0xf4, 0xe9, 0xeb, 0xb8, 0x96, 0x2d, 0x1b, 0x5b, 0x73, 0x76, 0x59, 0xee, 0x2d, - 0xb4, 0xcb, 0x76, 0x56, 0x95, 0x7e, 0x31, 0xfb, 0x10, 0xa4, 0xc9, 0xb3, 0x32, 0x0e, 0xe9, 0x42, - 0x71, 0x7e, 0x6d, 0x51, 0x3e, 0x62, 0xff, 0x75, 0xe8, 0x1b, 0x87, 0xf4, 0x42, 0xae, 0x96, 0x5b, - 0x96, 0x93, 0x76, 0x3b, 0x4a, 0xe5, 0x85, 0x8a, 0x2c, 0xd9, 0x89, 0xab, 0xb9, 0x72, 0x29, 0x2f, - 0xa7, 0x94, 0x09, 0xc8, 0x9e, 0xcf, 0xa9, 0xe5, 0x52, 0x79, 0x51, 0x4e, 0xa3, 0x47, 0xfd, 0x0a, - 0xeb, 0x6e, 0x1e, 0xbf, 0xeb, 0x83, 0x68, 0xea, 0x05, 0xd9, 0x7f, 0x70, 0x21, 0xbb, 0x8f, 0x83, - 0xec, 0xfb, 0x45, 0x0a, 0x89, 0x86, 0x52, 0x79, 0x00, 0x43, 0xf6, 0x14, 0x8c, 0x97, 0x2b, 0xb5, - 0xf5, 0x85, 0xca, 0x5a, 0xb9, 0x20, 0x63, 0x9b, 0x07, 0xb5, 0xd2, 0x4a, 0xb1, 0xb2, 0x56, 0x93, - 0x37, 0xd1, 0x9b, 0x93, 0x90, 0x5d, 0x35, 0x8d, 0x3a, 0xee, 0x74, 0xd0, 0xeb, 0x92, 0x90, 0xc9, - 0x6b, 0xad, 0x3a, 0x6e, 0xa2, 0x97, 0x78, 0x30, 0x76, 0x2d, 0x09, 0xd1, 0xb7, 0xfd, 0x52, 0xff, - 0x20, 0xcf, 0x35, 0xfe, 0x5e, 0x61, 0x56, 0xee, 0x1c, 0x2d, 0x33, 0x80, 0x77, 0x4f, 0xbb, 0xbc, - 0xcb, 0x73, 0xbc, 0x3b, 0x25, 0x5e, 0x54, 0xfc, 0x72, 0xfe, 0x0f, 0x09, 0x38, 0xb6, 0x68, 0x4f, - 0x1f, 0xf4, 0x3a, 0x25, 0xde, 0x69, 0xff, 0x7d, 0x7c, 0xfb, 0x6f, 0xe2, 0x88, 0xee, 0xf5, 0x05, - 0xdf, 0xf8, 0xa7, 0xdc, 0xc6, 0x3f, 0xc8, 0x35, 0xfe, 0x56, 0xc1, 0x72, 0x62, 0x6f, 0xf9, 0x6c, - 0x16, 0xd2, 0x64, 0x8a, 0x3c, 0x7b, 0x03, 0x4c, 0x55, 0x2d, 0x13, 0x6b, 0x3b, 0xbe, 0x41, 0xc9, - 0x32, 0x2e, 0xe0, 0x16, 0x13, 0x0d, 0xfa, 0x70, 0xf7, 0x19, 0xc8, 0xb6, 0x8c, 0x75, 0x6d, 0xd7, - 0xda, 0x56, 0x5e, 0xba, 0xef, 0xd8, 0xd0, 0x0a, 0xed, 0xff, 0x95, 0x36, 0xdd, 0x45, 0xfa, 0xeb, - 0x7b, 0xc9, 0xc4, 0x2c, 0xd3, 0x32, 0x72, 0xbb, 0xd6, 0xf6, 0xfc, 0xd5, 0x1f, 0x7d, 0xee, 0x44, - 0xe2, 0x93, 0xcf, 0x9d, 0x48, 0x7c, 0xe5, 0xb9, 0x13, 0x89, 0x9f, 0xfb, 0xea, 0x89, 0x23, 0x9f, - 0xfc, 0xea, 0x89, 0x23, 0x5f, 0xf8, 0xea, 0x89, 0x23, 0x3f, 0x94, 0x6c, 0x6f, 0x6c, 0x64, 0x48, - 0x29, 0x77, 0xfe, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xfb, 0xa6, 0xfc, 0x6d, 0x22, 0x37, 0x01, - 0x00, + // 11881 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x7d, 0x7d, 0x98, 0x23, 0xc7, + 0x59, 0xe7, 0x4a, 0xad, 0x8f, 0x99, 0x77, 0x3e, 0xb6, 0xdd, 0xd9, 0xac, 0x27, 0x65, 0x7b, 0x63, + 0xc6, 0x9f, 0xac, 0xed, 0x59, 0x7b, 0x9d, 0x0f, 0xaf, 0xbf, 0x35, 0x92, 0x66, 0x46, 0xde, 0x19, + 0x69, 0x68, 0x69, 0x76, 0x31, 0x77, 0xdc, 0x5c, 0x8f, 0x54, 0x33, 0xd3, 0x5e, 0x8d, 0x5a, 0xb4, + 0x7a, 0x66, 0x77, 0xf3, 0x3c, 0x77, 0x60, 0xc0, 0xd8, 0xc0, 0x13, 0xc2, 0xe7, 0x05, 0xc3, 0x25, + 0x26, 0x0e, 0x09, 0x84, 0x10, 0x42, 0x08, 0x49, 0x2e, 0x5c, 0x62, 0x2e, 0x24, 0xe1, 0x09, 0x79, + 0x42, 0x1c, 0xf2, 0x0d, 0x97, 0x84, 0xe0, 0x70, 0xb9, 0x70, 0x97, 0x90, 0x27, 0x3c, 0x77, 0xc7, + 0x05, 0x03, 0xb9, 0xa7, 0xab, 0xaa, 0x3f, 0x4a, 0xa3, 0x6e, 0x55, 0x6b, 0xd4, 0x1a, 0xe7, 0xf8, + 0x4b, 0xea, 0xea, 0xea, 0xaa, 0xb7, 0xde, 0xdf, 0x5b, 0x6f, 0x55, 0xbd, 0xf5, 0xd6, 0x5b, 0x30, + 0xd3, 0xde, 0x38, 0xd5, 0x36, 0x0d, 0xcb, 0xe8, 0x9c, 0xaa, 0x1b, 0x3b, 0x3b, 0x5a, 0xab, 0xd1, + 0x99, 0x23, 0xcf, 0x4a, 0x56, 0x6b, 0x5d, 0xb6, 0x2e, 0xb7, 0x31, 0xba, 0xbe, 0x7d, 0x61, 0xeb, + 0x54, 0x53, 0xdf, 0x38, 0xd5, 0xde, 0x38, 0xb5, 0x63, 0x34, 0x70, 0xd3, 0xf9, 0x80, 0x3c, 0xb0, + 0xec, 0xe8, 0xe6, 0xa0, 0x5c, 0x4d, 0xa3, 0xae, 0x35, 0x3b, 0x96, 0x61, 0x62, 0x96, 0xf3, 0xb8, + 0x57, 0x25, 0xde, 0xc3, 0x2d, 0xcb, 0x29, 0xe1, 0xea, 0x2d, 0xc3, 0xd8, 0x6a, 0x62, 0xfa, 0x6e, + 0x63, 0x77, 0xf3, 0x54, 0xc7, 0x32, 0x77, 0xeb, 0x16, 0x7b, 0x7b, 0x6d, 0xf7, 0xdb, 0x06, 0xee, + 0xd4, 0x4d, 0xbd, 0x6d, 0x19, 0x26, 0xcd, 0x31, 0xfb, 0xcf, 0x7f, 0x9b, 0x02, 0x49, 0x6d, 0xd7, + 0xd1, 0xc7, 0xc7, 0x40, 0xca, 0xb5, 0xdb, 0xe8, 0x5b, 0x49, 0x80, 0x45, 0x6c, 0x9d, 0xc3, 0x66, + 0x47, 0x37, 0x5a, 0x68, 0x1c, 0xb2, 0x2a, 0xfe, 0xa1, 0x5d, 0xdc, 0xb1, 0xd0, 0xe7, 0x92, 0x30, + 0xa6, 0xe2, 0x4e, 0xdb, 0x68, 0x75, 0xb0, 0xf2, 0x20, 0xa4, 0xb1, 0x69, 0x1a, 0xe6, 0x4c, 0xe2, + 0xda, 0xc4, 0xcd, 0x13, 0xa7, 0x4f, 0xce, 0xb1, 0x86, 0xcf, 0xa9, 0xed, 0xfa, 0x5c, 0xae, 0xdd, + 0x9e, 0xf3, 0xca, 0x98, 0x73, 0x3e, 0x9a, 0x2b, 0xda, 0x5f, 0xa8, 0xf4, 0x43, 0x65, 0x06, 0xb2, + 0x7b, 0x34, 0xc3, 0x4c, 0xf2, 0xda, 0xc4, 0xcd, 0xe3, 0xaa, 0xf3, 0x68, 0xbf, 0x69, 0x60, 0x4b, + 0xd3, 0x9b, 0x9d, 0x19, 0x89, 0xbe, 0x61, 0x8f, 0xe8, 0xd3, 0x09, 0x48, 0x93, 0x42, 0x94, 0x3c, + 0xa4, 0xea, 0x46, 0x03, 0x93, 0xea, 0xa7, 0x4f, 0x9f, 0x12, 0xaf, 0x7e, 0x2e, 0x6f, 0x34, 0xb0, + 0x4a, 0x3e, 0x56, 0xae, 0x85, 0x09, 0x87, 0x21, 0x1e, 0x19, 0xfe, 0xa4, 0xd9, 0x06, 0xa4, 0xec, + 0xfc, 0xca, 0x18, 0xa4, 0xca, 0x6b, 0xcb, 0xcb, 0xf2, 0x11, 0xe5, 0x0a, 0x98, 0x5a, 0x2b, 0x9f, + 0x2d, 0x57, 0xce, 0x97, 0xd7, 0x8b, 0xaa, 0x5a, 0x51, 0xe5, 0x84, 0x32, 0x05, 0xe3, 0xf3, 0xb9, + 0xc2, 0x7a, 0xa9, 0xbc, 0xba, 0x56, 0x93, 0x93, 0xca, 0x31, 0x90, 0xcf, 0x15, 0xd5, 0x6a, 0xa9, + 0x52, 0x5e, 0x2f, 0x55, 0xd7, 0x8b, 0x2b, 0xab, 0xb5, 0x87, 0x65, 0xc9, 0xce, 0x54, 0xae, 0xd4, + 0xd6, 0x17, 0x2a, 0x6b, 0xe5, 0x82, 0x8c, 0x95, 0x09, 0xc8, 0xd6, 0x4a, 0x2b, 0xc5, 0xca, 0x5a, + 0x4d, 0xde, 0x44, 0xbf, 0x2f, 0xc1, 0x74, 0x15, 0x5b, 0x05, 0xbc, 0xa7, 0xd7, 0x71, 0xd5, 0xd2, + 0x2c, 0x8c, 0x5e, 0x93, 0x70, 0x19, 0xaf, 0xac, 0xd9, 0x64, 0xba, 0xaf, 0x58, 0x93, 0xef, 0xdc, + 0xd7, 0x64, 0xbe, 0x84, 0x39, 0xf6, 0xf5, 0x9c, 0x2f, 0x4d, 0xf5, 0x97, 0x33, 0x7b, 0x1b, 0x4c, + 0xf8, 0xde, 0x29, 0xd3, 0x00, 0xf3, 0xb9, 0xfc, 0xd9, 0x45, 0x95, 0x50, 0x78, 0xc4, 0x7e, 0x5e, + 0xa8, 0xa8, 0x45, 0xf6, 0x9c, 0x40, 0xaf, 0xf1, 0xc3, 0x5f, 0xe0, 0xe1, 0x9f, 0xeb, 0x4f, 0x4c, + 0x0f, 0x11, 0x40, 0xef, 0x73, 0xe1, 0x5c, 0xe4, 0xe0, 0xbc, 0x33, 0x5a, 0x71, 0xd1, 0x20, 0x5d, + 0x1a, 0x0c, 0xd2, 0x72, 0xa5, 0x50, 0x5c, 0xb7, 0x11, 0xac, 0xd6, 0x72, 0x6a, 0xad, 0x58, 0x90, + 0x31, 0xfa, 0xd5, 0x24, 0x8c, 0x55, 0xb7, 0x77, 0xad, 0x86, 0x71, 0x91, 0xeb, 0x28, 0x3f, 0xe6, + 0xe7, 0xd4, 0xfd, 0x3c, 0xa7, 0x6e, 0xde, 0xdf, 0x34, 0x56, 0x42, 0x00, 0x8f, 0xde, 0xed, 0xf2, + 0x28, 0xc7, 0xf1, 0xe8, 0x36, 0xd1, 0x82, 0x0e, 0x8b, 0x3b, 0x9f, 0x99, 0x82, 0xcc, 0x79, 0xad, + 0xd9, 0xc4, 0x16, 0xfa, 0xeb, 0x24, 0x64, 0xf2, 0x26, 0xb6, 0xe5, 0xfa, 0x16, 0x4f, 0xac, 0x11, + 0x8c, 0x99, 0x86, 0x61, 0xad, 0x6a, 0xd6, 0x36, 0x69, 0xd3, 0xb8, 0xea, 0x3e, 0xdf, 0x9d, 0x7a, + 0xe2, 0xab, 0x52, 0x02, 0xfd, 0xb6, 0x9f, 0x91, 0x0f, 0xf0, 0x8c, 0xfc, 0x5e, 0xae, 0xfd, 0xb4, + 0xa2, 0x39, 0x5a, 0x49, 0x80, 0xc2, 0x41, 0x30, 0xb6, 0xd3, 0xc2, 0x3b, 0x46, 0x4b, 0xaf, 0xb3, + 0x96, 0xbb, 0xcf, 0xe8, 0x8f, 0x5c, 0x2e, 0xcf, 0x73, 0x5c, 0x9e, 0x13, 0xae, 0x25, 0x1a, 0x9b, + 0xab, 0x03, 0xb0, 0xf9, 0xa5, 0x70, 0xd5, 0x42, 0xae, 0xb4, 0x5c, 0x2c, 0xac, 0xd7, 0x2a, 0xeb, + 0x79, 0xb5, 0x98, 0xab, 0x15, 0xd7, 0x97, 0x2b, 0xf9, 0xdc, 0xf2, 0xba, 0x5a, 0x5c, 0xad, 0xc8, + 0x18, 0xfd, 0xf7, 0xa4, 0xcd, 0xdc, 0xba, 0xb1, 0x87, 0x4d, 0xb4, 0x28, 0xc4, 0xe7, 0x30, 0x9e, + 0x30, 0x0c, 0x7e, 0x5e, 0x58, 0xeb, 0x33, 0xee, 0x30, 0x0a, 0x02, 0xc4, 0xf9, 0x83, 0x42, 0x1a, + 0x3c, 0xb4, 0xa8, 0x17, 0x00, 0xa7, 0xff, 0x57, 0x12, 0xb2, 0x79, 0xa3, 0xb5, 0x87, 0x4d, 0x0b, + 0x3d, 0xc0, 0x71, 0xda, 0xe5, 0x66, 0x82, 0xe7, 0xa6, 0x3d, 0xa8, 0xe1, 0x96, 0x65, 0x1a, 0xed, + 0xcb, 0xce, 0x70, 0xc7, 0x1e, 0xd1, 0x6f, 0x44, 0xe5, 0x30, 0xab, 0x39, 0x78, 0x5c, 0xed, 0x5d, + 0x11, 0x47, 0x9e, 0xd4, 0xd5, 0x01, 0x9e, 0x8e, 0x82, 0x4b, 0x6f, 0x02, 0xa2, 0xe1, 0x72, 0x3a, + 0x3a, 0x2e, 0xe8, 0x93, 0x49, 0x98, 0xa2, 0x9d, 0xaf, 0x8a, 0x3b, 0x64, 0x7a, 0x72, 0x8b, 0x10, + 0xf3, 0x99, 0x28, 0xff, 0x82, 0x9f, 0xd1, 0x0b, 0x3c, 0xa3, 0x6f, 0x0f, 0xee, 0xe8, 0xac, 0xae, + 0x00, 0x76, 0x1f, 0x83, 0xb4, 0x65, 0x5c, 0xc0, 0x4e, 0x1b, 0xe9, 0x03, 0xfa, 0x4d, 0x97, 0x9d, + 0x25, 0x8e, 0x9d, 0x2f, 0x8f, 0x5a, 0x4d, 0xfc, 0x4c, 0x7d, 0x5b, 0x12, 0x26, 0xf3, 0x4d, 0xa3, + 0xe3, 0xf2, 0xf4, 0xa5, 0x1e, 0x4f, 0xdd, 0xc6, 0x25, 0xfc, 0x8d, 0x7b, 0x3e, 0xe1, 0xe3, 0x63, + 0x91, 0xe7, 0x63, 0x6f, 0x79, 0xf1, 0x15, 0x1f, 0xa0, 0x17, 0x7e, 0xc3, 0x65, 0xd8, 0x12, 0xc7, + 0xb0, 0x97, 0x45, 0x2c, 0x2f, 0x7e, 0x7e, 0xbd, 0xfb, 0x7b, 0x20, 0x9b, 0xab, 0xd7, 0x8d, 0xdd, + 0x96, 0x85, 0xfe, 0x32, 0x01, 0x99, 0xbc, 0xd1, 0xda, 0xd4, 0xb7, 0x94, 0x1b, 0x61, 0x1a, 0xb7, + 0xb4, 0x8d, 0x26, 0x2e, 0x68, 0x96, 0xb6, 0xa7, 0xe3, 0x8b, 0xa4, 0x01, 0x63, 0x6a, 0x57, 0xaa, + 0x4d, 0x14, 0x4b, 0xc1, 0x1b, 0xbb, 0x5b, 0x84, 0xa8, 0x31, 0xd5, 0x9f, 0xa4, 0xdc, 0x05, 0x57, + 0xd2, 0xc7, 0x55, 0x13, 0x9b, 0xb8, 0x89, 0xb5, 0x0e, 0xce, 0x6f, 0x6b, 0xad, 0x16, 0x6e, 0x92, + 0x5e, 0x3b, 0xa6, 0x06, 0xbd, 0x56, 0x66, 0x61, 0x92, 0xbe, 0xaa, 0xb6, 0xb5, 0x3a, 0xee, 0xcc, + 0xa4, 0x48, 0x76, 0x2e, 0x4d, 0xb9, 0x0d, 0xd2, 0xf8, 0x92, 0x65, 0x6a, 0x33, 0x0d, 0x82, 0xd7, + 0x95, 0x73, 0x74, 0x89, 0x30, 0xe7, 0x2c, 0x11, 0xe6, 0xaa, 0x64, 0x01, 0xa1, 0xd2, 0x5c, 0xe8, + 0x83, 0x19, 0x77, 0xe8, 0x7e, 0x83, 0x6f, 0x4a, 0xaa, 0x40, 0xaa, 0xa5, 0xed, 0x60, 0x26, 0x17, + 0xe4, 0xbf, 0x72, 0x12, 0x8e, 0x6a, 0x7b, 0x9a, 0xa5, 0x99, 0xcb, 0xf6, 0xe2, 0x85, 0x0c, 0x37, + 0x84, 0xe5, 0x4b, 0x47, 0xd4, 0xee, 0x17, 0xca, 0xd5, 0x30, 0x4e, 0x56, 0x37, 0x24, 0x17, 0xd5, + 0x45, 0x5e, 0x82, 0x72, 0x33, 0x1c, 0xd5, 0x9a, 0xed, 0x6d, 0xad, 0xd4, 0xda, 0xd3, 0x2d, 0x6c, + 0x23, 0x34, 0x73, 0x8c, 0xe4, 0xe9, 0x4e, 0xa6, 0x1d, 0x7b, 0x7e, 0x0c, 0x32, 0xb4, 0x02, 0xf4, + 0x8b, 0x69, 0xe1, 0x35, 0x0a, 0x85, 0x30, 0x7c, 0xca, 0x70, 0x3b, 0x64, 0x35, 0x9a, 0x8f, 0x34, + 0x65, 0xe2, 0xf4, 0x71, 0xb7, 0x0c, 0xb2, 0x5c, 0x73, 0x4a, 0x51, 0x9d, 0x6c, 0xca, 0x9d, 0x90, + 0xa9, 0x13, 0x81, 0x20, 0xad, 0x9a, 0x38, 0x7d, 0x55, 0xef, 0x4a, 0x49, 0x16, 0x95, 0x65, 0x45, + 0x5f, 0x92, 0x84, 0x96, 0x35, 0x61, 0x14, 0x47, 0x93, 0xfb, 0x6f, 0x24, 0x07, 0x18, 0x15, 0x6f, + 0x85, 0x9b, 0x73, 0xf9, 0x7c, 0x65, 0xad, 0x5c, 0x63, 0x63, 0x62, 0x61, 0x7d, 0x7e, 0xad, 0xb6, + 0xee, 0x8d, 0x94, 0x64, 0xee, 0xb7, 0x6e, 0x4f, 0x05, 0x65, 0x5b, 0x1a, 0x6e, 0xec, 0x93, 0xbb, + 0x58, 0x5b, 0x2f, 0xe7, 0x56, 0x8a, 0xf2, 0xa6, 0x40, 0xc9, 0xc5, 0xda, 0x7a, 0xee, 0x5c, 0xae, + 0x96, 0x53, 0xe5, 0x2d, 0x7e, 0x74, 0xae, 0xd6, 0x2a, 0xab, 0xeb, 0xea, 0x5a, 0xb9, 0x5c, 0x2a, + 0x2f, 0xd2, 0xaa, 0xed, 0x49, 0xcd, 0x71, 0x2f, 0xc3, 0x79, 0xb5, 0x54, 0x2b, 0xae, 0xe7, 0x2b, + 0xe5, 0x85, 0xd2, 0xa2, 0xac, 0xf7, 0x1b, 0xda, 0x1f, 0x51, 0x8e, 0xc1, 0x51, 0xda, 0xe8, 0x73, + 0xf4, 0xbb, 0x42, 0x51, 0xfe, 0xf1, 0xac, 0x32, 0x0d, 0xe3, 0xe5, 0x62, 0x8d, 0x71, 0xe6, 0xb1, + 0xac, 0x72, 0x15, 0x1c, 0xb7, 0x9f, 0xf3, 0x95, 0x72, 0xb9, 0x98, 0xaf, 0xd9, 0x4b, 0x3d, 0xb5, + 0xb8, 0xb0, 0x56, 0x2d, 0x16, 0xe4, 0x9f, 0xc8, 0x2a, 0x32, 0x4c, 0xd8, 0x2f, 0x2b, 0x0b, 0x0b, + 0xcb, 0xa5, 0x72, 0x51, 0x7e, 0x3c, 0x8b, 0xde, 0x94, 0xf2, 0x66, 0x66, 0xbe, 0x85, 0xc2, 0xcf, + 0xa4, 0x7c, 0xd2, 0x9a, 0xe3, 0xa5, 0xf5, 0x96, 0x9e, 0xd8, 0x87, 0x4f, 0xae, 0x9e, 0x71, 0xe5, + 0xa8, 0xc0, 0xc9, 0xd1, 0xed, 0x11, 0xca, 0x8a, 0x26, 0x48, 0x1f, 0x1b, 0x44, 0x90, 0x5e, 0x0c, + 0x57, 0x94, 0x2b, 0xeb, 0x0c, 0xf1, 0xaa, 0xbb, 0x24, 0xbe, 0x16, 0xae, 0x2e, 0x17, 0x29, 0x30, + 0x6a, 0x31, 0x5f, 0x39, 0x57, 0x54, 0xd7, 0xcf, 0xe7, 0x96, 0x97, 0x8b, 0xb5, 0xf5, 0x85, 0x92, + 0x5a, 0xad, 0xc9, 0x9b, 0xfd, 0xc0, 0xdb, 0x52, 0xae, 0x83, 0x97, 0x7a, 0xcf, 0xeb, 0xc5, 0xef, + 0x2f, 0x55, 0x6b, 0x55, 0x22, 0x4a, 0xf9, 0x8a, 0xaa, 0xae, 0xad, 0xda, 0x0b, 0x93, 0x6d, 0xe5, + 0x38, 0x28, 0x5e, 0x29, 0xea, 0x5a, 0x99, 0x8a, 0x8d, 0x6e, 0xd7, 0xcf, 0xea, 0x73, 0xaa, 0xb7, + 0x17, 0x34, 0xab, 0x45, 0x75, 0xa1, 0xa2, 0xae, 0x14, 0x0b, 0xf2, 0x23, 0xfd, 0x24, 0xef, 0x82, + 0x72, 0x23, 0xcc, 0xe6, 0xca, 0x95, 0xda, 0x52, 0x51, 0x5d, 0xcf, 0x95, 0x1f, 0xae, 0x3d, 0xbc, + 0x5a, 0x5c, 0x5f, 0x55, 0x2b, 0xf9, 0x62, 0xb5, 0xba, 0x5e, 0xaa, 0x3a, 0x99, 0xe5, 0xa6, 0x4d, + 0x82, 0x23, 0xf0, 0xa5, 0xea, 0x7a, 0xa1, 0xb8, 0x5c, 0xb4, 0x49, 0xdb, 0x41, 0xaf, 0x96, 0x20, + 0x53, 0xc0, 0x4d, 0x6c, 0x61, 0xf4, 0x3d, 0x9e, 0xb2, 0x3d, 0x0e, 0x19, 0x13, 0xdb, 0x13, 0x2e, + 0x36, 0xa4, 0xb0, 0x27, 0xf4, 0x97, 0xc9, 0xa8, 0xca, 0x8e, 0x96, 0x1d, 0xa0, 0xec, 0x5e, 0x0e, + 0x99, 0x8e, 0xa5, 0x59, 0xbb, 0x1d, 0xa6, 0xeb, 0xae, 0xe9, 0xad, 0xeb, 0xe6, 0xaa, 0x24, 0x93, + 0xca, 0x32, 0xa3, 0x3f, 0x4f, 0x44, 0x51, 0x5e, 0x3d, 0x29, 0x88, 0x26, 0x73, 0xfa, 0x00, 0x22, + 0x77, 0x02, 0x90, 0x8f, 0xe1, 0xb9, 0x65, 0xb5, 0x98, 0x2b, 0x3c, 0xec, 0x32, 0x1e, 0xdb, 0x22, + 0xe9, 0x7f, 0x9f, 0xaf, 0x95, 0xce, 0x15, 0xe5, 0x4d, 0xf4, 0xc1, 0x34, 0x64, 0xaa, 0xb8, 0x89, + 0xeb, 0x16, 0xba, 0xc7, 0xc3, 0x63, 0x1a, 0x92, 0x7a, 0x83, 0x0d, 0x7d, 0x49, 0xbd, 0xc1, 0x2d, + 0xb0, 0x92, 0x3d, 0x17, 0xb2, 0xcf, 0xa7, 0xa2, 0x22, 0x45, 0x6b, 0x3d, 0xdc, 0x61, 0xe9, 0xc3, + 0x91, 0x86, 0xa5, 0x9e, 0x14, 0x47, 0x43, 0xf6, 0xd3, 0xc9, 0x18, 0x16, 0x6b, 0x22, 0x4a, 0x61, + 0x33, 0x40, 0x29, 0x74, 0x0d, 0x36, 0x0b, 0xa5, 0x72, 0x61, 0xdd, 0x95, 0x93, 0xf2, 0x42, 0x45, + 0xde, 0x56, 0xe6, 0xe0, 0xa4, 0xaf, 0x74, 0x5b, 0x63, 0xb0, 0x1a, 0x72, 0xe5, 0xc2, 0xfa, 0x4a, + 0xb9, 0xb8, 0x52, 0x29, 0x97, 0xf2, 0xd4, 0x34, 0x52, 0xac, 0x51, 0x2d, 0xd3, 0xa5, 0x43, 0xaa, + 0xc5, 0x9c, 0x9a, 0x5f, 0x22, 0xea, 0xa6, 0x50, 0x94, 0x1f, 0x51, 0x6e, 0x82, 0xeb, 0x7c, 0xa4, + 0x30, 0x55, 0xb4, 0xaa, 0x16, 0x0b, 0xc5, 0x85, 0x52, 0xd9, 0x1e, 0x1a, 0x97, 0x2b, 0xf9, 0xb3, + 0x55, 0x71, 0x6d, 0x83, 0xfe, 0x21, 0x09, 0xa9, 0xaa, 0x65, 0xb4, 0xd1, 0xf7, 0x7a, 0x32, 0x7c, + 0x02, 0xc0, 0xc4, 0x3b, 0xc6, 0x1e, 0x99, 0x98, 0x32, 0xbd, 0xe2, 0x4b, 0x41, 0x7f, 0x2c, 0x6e, + 0xc3, 0x72, 0xd5, 0x82, 0xd1, 0x0e, 0x18, 0x97, 0xbe, 0x2d, 0x66, 0xc3, 0x0a, 0x2e, 0x28, 0x9a, + 0x18, 0xfd, 0x54, 0x62, 0x00, 0x31, 0x42, 0x70, 0xdc, 0xa7, 0x01, 0x6c, 0xbc, 0x1c, 0x06, 0x62, + 0xe5, 0x4a, 0x78, 0x51, 0x17, 0x66, 0x04, 0xaa, 0x4d, 0xe5, 0x7b, 0xe0, 0x1a, 0x3f, 0x54, 0x2b, + 0x95, 0x73, 0x45, 0x57, 0x3e, 0x0a, 0xb9, 0x5a, 0x4e, 0xde, 0x42, 0x9f, 0x92, 0x20, 0xb5, 0x62, + 0xec, 0x61, 0x74, 0x9d, 0xc7, 0xfc, 0x19, 0xc8, 0xb6, 0xf0, 0x45, 0x9f, 0x41, 0xc6, 0x79, 0x44, + 0x6f, 0x92, 0xa2, 0xb2, 0xdd, 0x2e, 0x3b, 0x80, 0xed, 0x9f, 0x4f, 0x46, 0x61, 0x7b, 0x8f, 0x82, + 0xa2, 0xb1, 0xfd, 0x6f, 0x06, 0x61, 0x7b, 0x00, 0x6b, 0xb1, 0x32, 0x0b, 0x27, 0xbc, 0x17, 0xa5, + 0x42, 0xb1, 0x5c, 0x2b, 0x2d, 0x3c, 0xec, 0x31, 0xb7, 0xa4, 0x0a, 0xb1, 0xbf, 0x9f, 0x76, 0x08, + 0x9f, 0x2c, 0xce, 0xc0, 0x31, 0xef, 0xdd, 0x22, 0x9d, 0xef, 0xd9, 0x6f, 0x1e, 0x41, 0x3f, 0x9f, + 0x86, 0x49, 0xaa, 0x2d, 0xd7, 0xda, 0x0d, 0x7b, 0x71, 0x74, 0x03, 0x67, 0x88, 0xb0, 0xf4, 0x1d, + 0xfc, 0x03, 0x46, 0xcb, 0x59, 0x1f, 0xb9, 0xcf, 0xe8, 0x13, 0xc2, 0x26, 0x08, 0x5e, 0x27, 0xd3, + 0x5a, 0x02, 0x70, 0x7e, 0x5e, 0xc8, 0xd8, 0x20, 0x50, 0x60, 0x34, 0xbc, 0x7f, 0x7c, 0xd8, 0xdd, + 0x2c, 0x18, 0x8a, 0xcd, 0x40, 0x28, 0xb6, 0x66, 0x1f, 0x4f, 0xc2, 0x78, 0x4d, 0xdf, 0xc1, 0xaf, + 0x32, 0x5a, 0xb8, 0xa3, 0x64, 0x41, 0x5a, 0x5c, 0xa9, 0xc9, 0x47, 0xec, 0x3f, 0xc5, 0x7c, 0x4d, + 0x4e, 0x90, 0x3f, 0x45, 0xbb, 0x6a, 0xfb, 0x4f, 0xae, 0x26, 0x4b, 0xf6, 0x9f, 0x95, 0x62, 0x4d, + 0x4e, 0xd9, 0x7f, 0xca, 0xc5, 0x9a, 0x9c, 0xb6, 0xff, 0xac, 0x2e, 0xd7, 0xe4, 0x8c, 0xfd, 0xa7, + 0x54, 0xad, 0xc9, 0x59, 0xfb, 0xcf, 0x7c, 0xb5, 0x26, 0x8f, 0xd9, 0x7f, 0xce, 0x55, 0x6b, 0xf2, + 0xb8, 0xfd, 0x27, 0x5f, 0xab, 0xc9, 0x60, 0xff, 0x79, 0xa8, 0x5a, 0x93, 0x27, 0xec, 0x3f, 0xb9, + 0x7c, 0x4d, 0x9e, 0x24, 0x7f, 0x8a, 0x35, 0x79, 0xca, 0xfe, 0x53, 0xad, 0xd6, 0xe4, 0x69, 0x52, + 0x72, 0xb5, 0x26, 0x1f, 0x25, 0x75, 0x95, 0x6a, 0xb2, 0x6c, 0xff, 0x59, 0xaa, 0xd6, 0xe4, 0x2b, + 0x48, 0xe6, 0x6a, 0x4d, 0x56, 0x48, 0xa5, 0xd5, 0x9a, 0xfc, 0x22, 0x92, 0xa7, 0x5a, 0x93, 0x8f, + 0x91, 0x2a, 0xaa, 0x35, 0xf9, 0xc5, 0x84, 0x8c, 0x62, 0x4d, 0x3e, 0x4e, 0xf2, 0xa8, 0x35, 0xf9, + 0x4a, 0xf2, 0xaa, 0x5c, 0x93, 0x67, 0x08, 0x61, 0xc5, 0x9a, 0xfc, 0x12, 0xf2, 0x47, 0xad, 0xc9, + 0x88, 0xbc, 0xca, 0xd5, 0xe4, 0xab, 0xd0, 0x35, 0x30, 0xbe, 0x88, 0x2d, 0x8a, 0x2f, 0x92, 0x41, + 0x5a, 0xc4, 0x96, 0x7f, 0xb5, 0xf1, 0xba, 0x19, 0x18, 0x3f, 0x6f, 0x98, 0x17, 0x3a, 0x6d, 0xad, + 0x8e, 0xd1, 0x7b, 0xe9, 0x3e, 0x5f, 0x7e, 0xd7, 0x34, 0x71, 0x8b, 0xcb, 0xf7, 0x94, 0xb8, 0x99, + 0xcc, 0x29, 0x6d, 0xce, 0x2b, 0x29, 0x60, 0xca, 0x72, 0x2d, 0x4c, 0x5c, 0x74, 0x72, 0x97, 0x1a, + 0x8e, 0x38, 0xf9, 0x92, 0x44, 0x4d, 0x66, 0xfd, 0xab, 0x8c, 0xdf, 0x04, 0xf4, 0xf6, 0x24, 0x64, + 0x16, 0xb1, 0x95, 0x6b, 0x36, 0xfd, 0x7c, 0x7b, 0xd2, 0xcf, 0xb7, 0x79, 0x9e, 0x6f, 0xb7, 0x06, + 0x37, 0x22, 0xd7, 0x6c, 0x06, 0xf0, 0x6c, 0x16, 0x26, 0x7d, 0x0c, 0xb2, 0xa7, 0xe5, 0xd2, 0xcd, + 0xe3, 0x2a, 0x97, 0x86, 0x7e, 0xdd, 0xe5, 0x5a, 0x91, 0xe3, 0xda, 0x1d, 0x51, 0x2a, 0x8c, 0x9f, + 0x63, 0x1f, 0xf0, 0x76, 0x80, 0xae, 0x09, 0xb5, 0x22, 0xa1, 0xd7, 0x0e, 0xc0, 0xc5, 0x50, 0x1b, + 0x4e, 0x7f, 0xc9, 0x8b, 0xca, 0xc3, 0x21, 0x18, 0x60, 0x06, 0xe1, 0xe1, 0x7b, 0xc7, 0x20, 0x53, + 0xd9, 0x78, 0xc4, 0x5e, 0x8c, 0x3c, 0x9f, 0x04, 0x29, 0xd7, 0x68, 0x74, 0x8d, 0x3a, 0x06, 0x79, + 0x59, 0x72, 0x96, 0x26, 0xee, 0x33, 0xfa, 0xd8, 0x00, 0x3d, 0x9a, 0xd6, 0x34, 0x97, 0x6b, 0x34, + 0x82, 0xb7, 0xd3, 0xdc, 0x0a, 0x93, 0x7c, 0x85, 0xca, 0x1d, 0xfc, 0x0e, 0x7e, 0x88, 0x99, 0xd1, + 0xdd, 0xda, 0x8f, 0xda, 0xfd, 0x03, 0xe9, 0x8b, 0x1f, 0x88, 0xcf, 0x27, 0x21, 0xbb, 0xac, 0x77, + 0x2c, 0x1b, 0x81, 0x9b, 0x3c, 0x04, 0xae, 0x86, 0x71, 0x87, 0x01, 0x9d, 0x99, 0x04, 0xe9, 0xab, + 0x5e, 0x02, 0x7a, 0xa3, 0x1f, 0x83, 0x87, 0x78, 0x0c, 0x5e, 0x16, 0xde, 0x46, 0x56, 0x57, 0x00, + 0x0e, 0x5c, 0xb5, 0xc9, 0xee, 0x6a, 0x7f, 0xdb, 0x65, 0xeb, 0x0a, 0xc7, 0xd6, 0x33, 0x83, 0x54, + 0x19, 0x3f, 0x6b, 0x3f, 0x93, 0x04, 0xb0, 0xeb, 0x56, 0xc9, 0x4a, 0x44, 0x9c, 0xbb, 0xaf, 0xf3, + 0x73, 0x77, 0x85, 0xe7, 0xee, 0x2b, 0xfb, 0x37, 0x95, 0x56, 0x17, 0xc0, 0x60, 0x19, 0x24, 0xdd, + 0x65, 0xad, 0xfd, 0x17, 0xbd, 0xdd, 0x65, 0xea, 0x2a, 0xc7, 0xd4, 0x7b, 0x07, 0xac, 0x29, 0x7e, + 0xbe, 0xfe, 0xcf, 0x24, 0xc8, 0x55, 0x6c, 0x95, 0x3a, 0x4b, 0xfa, 0xd6, 0x76, 0x53, 0xdf, 0xda, + 0xb6, 0x70, 0x03, 0x9d, 0x15, 0xd2, 0x1e, 0xca, 0xf5, 0x30, 0xa5, 0xfb, 0xbf, 0x63, 0x7b, 0x16, + 0x7c, 0x22, 0xfa, 0x49, 0x3f, 0x02, 0xcb, 0x3c, 0x02, 0xaf, 0x08, 0xe0, 0x4b, 0x37, 0x45, 0x01, + 0xf3, 0xdb, 0xdf, 0x71, 0xd9, 0x5d, 0xe1, 0xd8, 0x7d, 0xcf, 0x60, 0xc5, 0x8e, 0x64, 0x4b, 0xcd, + 0x31, 0x1b, 0xf9, 0x36, 0x28, 0xbb, 0x06, 0xa2, 0xc4, 0xfe, 0x81, 0xe8, 0x7f, 0x27, 0xa2, 0x8f, + 0x7d, 0x61, 0x86, 0xa2, 0xc8, 0x23, 0xdb, 0x10, 0x6c, 0x38, 0x83, 0xf0, 0xeb, 0xc7, 0x24, 0xc8, + 0x14, 0x2f, 0xb5, 0x0d, 0x7e, 0x37, 0x5d, 0x81, 0x54, 0xdb, 0x5b, 0x22, 0x93, 0xff, 0x02, 0x83, + 0xf9, 0x7b, 0x06, 0x98, 0x3f, 0xd0, 0xba, 0x03, 0xba, 0xbf, 0x43, 0x46, 0xd2, 0x47, 0xc6, 0xad, + 0x90, 0x26, 0x5e, 0x78, 0x6c, 0x74, 0xf3, 0xcc, 0x6f, 0x4e, 0x11, 0x45, 0xfb, 0xad, 0x4a, 0x33, + 0x45, 0x46, 0xa1, 0x27, 0x39, 0xf1, 0xa3, 0xf0, 0x85, 0x9f, 0x4b, 0xb8, 0x13, 0x8c, 0x9f, 0x4c, + 0x41, 0xaa, 0xd2, 0xc6, 0x2d, 0xf4, 0xb6, 0x04, 0xa7, 0x82, 0xeb, 0x46, 0xcb, 0xc2, 0x97, 0x3c, + 0x2d, 0xe1, 0x25, 0x84, 0xce, 0x07, 0x66, 0x20, 0x6b, 0x99, 0x14, 0x32, 0xe6, 0xd1, 0xc7, 0x1e, + 0x95, 0x32, 0xcc, 0xea, 0xad, 0x7a, 0x73, 0xb7, 0x81, 0x55, 0xdc, 0xd4, 0x6c, 0xda, 0x3b, 0xb9, + 0x4e, 0x01, 0xb7, 0x71, 0xab, 0x81, 0x5b, 0x16, 0xa5, 0xc6, 0xd9, 0xc8, 0x14, 0xc8, 0xc9, 0x2f, + 0xb0, 0xef, 0xe3, 0xe1, 0xbf, 0x89, 0xe3, 0x37, 0x53, 0xca, 0x76, 0x2b, 0x03, 0x90, 0x3f, 0x03, + 0x40, 0x5b, 0x70, 0x4e, 0xc7, 0x17, 0x99, 0xa5, 0xf5, 0x25, 0x5d, 0x96, 0xd6, 0x8a, 0x9b, 0x41, + 0xf5, 0x65, 0x46, 0x7f, 0xe2, 0x42, 0xfe, 0x20, 0x07, 0xf9, 0xad, 0x82, 0x24, 0x44, 0x43, 0xfb, + 0x5f, 0x0f, 0xb0, 0x10, 0xe7, 0xfc, 0x11, 0x25, 0xe5, 0x25, 0xf0, 0x62, 0xc7, 0x86, 0x58, 0x2e, + 0x16, 0x0b, 0xd5, 0xf5, 0xb5, 0xd5, 0x45, 0x35, 0x57, 0x28, 0xca, 0x80, 0xde, 0x97, 0x84, 0x34, + 0xd9, 0x71, 0x47, 0xf9, 0x21, 0xc8, 0x02, 0xfa, 0x46, 0x42, 0xd4, 0xc4, 0xc5, 0xd8, 0x43, 0xea, + 0x0e, 0x50, 0x70, 0xbf, 0x26, 0x64, 0x59, 0x0c, 0x29, 0x28, 0xfe, 0x6e, 0x65, 0x77, 0xa5, 0xea, + 0xb6, 0x71, 0xf1, 0xff, 0xff, 0xae, 0x64, 0xb7, 0xf2, 0x90, 0xbb, 0x52, 0x0f, 0x12, 0x5e, 0x48, + 0x5d, 0xe9, 0xc9, 0x94, 0xbb, 0x0c, 0x7e, 0xca, 0x27, 0x0d, 0xbe, 0xe5, 0x52, 0x42, 0x6c, 0xb9, + 0xa4, 0xe4, 0x60, 0x4a, 0x6f, 0x59, 0xd8, 0x6c, 0x69, 0xcd, 0x85, 0xa6, 0xb6, 0x45, 0xa7, 0xa7, + 0xfe, 0x7d, 0x1d, 0xca, 0xd3, 0x92, 0x2f, 0x8f, 0xca, 0x7f, 0xa1, 0x9c, 0x00, 0xb0, 0xf0, 0x4e, + 0xbb, 0xa9, 0x59, 0x9e, 0x30, 0xf9, 0x52, 0xd0, 0xd7, 0x85, 0xbd, 0x2f, 0x9d, 0xfe, 0xd5, 0xc7, + 0xfb, 0xd2, 0x95, 0x69, 0xa9, 0x4b, 0xa6, 0xdd, 0xe1, 0x34, 0x25, 0x30, 0x9c, 0xfa, 0xb9, 0x95, + 0x16, 0x5c, 0x5c, 0xbe, 0x41, 0xc8, 0xbd, 0x33, 0xac, 0x19, 0xf1, 0xeb, 0x89, 0xa7, 0x24, 0x98, + 0xa6, 0x55, 0xcf, 0x1b, 0xc6, 0x85, 0x1d, 0xcd, 0xbc, 0x80, 0xee, 0x3d, 0x88, 0x88, 0xa0, 0x8f, + 0xfb, 0xf1, 0x5b, 0xe4, 0xf1, 0xbb, 0x23, 0xb8, 0xe1, 0x4e, 0xed, 0xa3, 0x59, 0xf6, 0xbf, 0xc5, + 0x45, 0xe6, 0x21, 0x0e, 0x99, 0x57, 0x44, 0x26, 0x30, 0x7e, 0x84, 0xde, 0xe1, 0x22, 0xe4, 0xa8, + 0xcd, 0x03, 0x22, 0xf4, 0xe5, 0xc1, 0x10, 0x72, 0x6a, 0x1f, 0x00, 0x21, 0x19, 0xa4, 0x0b, 0xf8, + 0x32, 0xeb, 0x80, 0xf6, 0x5f, 0x3f, 0xd9, 0xa9, 0xf8, 0x30, 0x0b, 0x20, 0x79, 0x24, 0x98, 0x1d, + 0xe3, 0x49, 0xa8, 0xb4, 0x87, 0x80, 0xdc, 0x5f, 0x08, 0xdb, 0x1b, 0x7a, 0xb2, 0x81, 0xd2, 0x30, + 0x9a, 0x1e, 0x26, 0x66, 0xac, 0x10, 0x27, 0x33, 0x7e, 0xcc, 0x3e, 0x97, 0x82, 0x71, 0xc7, 0x27, + 0xd6, 0x42, 0xef, 0x49, 0x70, 0x9e, 0x30, 0x1d, 0x63, 0xd7, 0xac, 0x63, 0x66, 0x01, 0x62, 0x4f, + 0x7e, 0xb6, 0x24, 0x05, 0x07, 0xd0, 0x3e, 0xa3, 0xdf, 0xfe, 0x01, 0x36, 0x15, 0x75, 0x80, 0x45, + 0xaf, 0x91, 0x44, 0x97, 0xa2, 0x1c, 0xf7, 0xab, 0xd8, 0x7a, 0x21, 0x8e, 0xa1, 0x1f, 0x10, 0x5a, + 0xc5, 0xf6, 0x69, 0x49, 0x34, 0xe1, 0xa9, 0x0c, 0x30, 0x19, 0xbb, 0x0a, 0xae, 0x74, 0x72, 0x54, + 0xe6, 0x1f, 0x2a, 0xe6, 0x6b, 0xeb, 0x64, 0x26, 0xb6, 0xa6, 0x2e, 0xcb, 0x12, 0x7a, 0x2c, 0x05, + 0x32, 0x25, 0x8d, 0xd2, 0x59, 0xbb, 0xdc, 0xc6, 0xe8, 0x87, 0x0f, 0x79, 0x22, 0x86, 0xbe, 0xe9, + 0x57, 0x26, 0x25, 0x5e, 0x4e, 0xee, 0x0c, 0xe6, 0xae, 0xd7, 0x84, 0x00, 0x71, 0x19, 0xa0, 0x57, + 0x84, 0x48, 0x18, 0xfa, 0x88, 0x2b, 0x00, 0xcb, 0x9c, 0x00, 0xdc, 0x35, 0x00, 0x89, 0x87, 0x2c, + 0x07, 0x1f, 0x4d, 0xc2, 0x94, 0x33, 0x8d, 0x58, 0xc0, 0x56, 0x7d, 0x1b, 0x9d, 0x11, 0x5d, 0x9b, + 0xc9, 0x20, 0xed, 0x9a, 0x4d, 0x46, 0xa5, 0xfd, 0x17, 0xfd, 0x53, 0x42, 0x74, 0x77, 0x85, 0xf1, + 0x86, 0xab, 0x39, 0x60, 0x61, 0x2b, 0xb6, 0x1d, 0x22, 0x50, 0x60, 0xfc, 0xea, 0xfa, 0x8b, 0x49, + 0x80, 0x9a, 0xe1, 0x4e, 0x5a, 0x0f, 0xc0, 0x49, 0xee, 0x80, 0x46, 0x9e, 0xe7, 0x64, 0xcf, 0x15, + 0xbd, 0x57, 0x6d, 0xf4, 0xb1, 0x14, 0xbd, 0xc9, 0x65, 0xf1, 0x02, 0xc7, 0xe2, 0xd3, 0x91, 0x6a, + 0x8a, 0x9f, 0xbf, 0xef, 0x4b, 0xc2, 0x78, 0x61, 0xb7, 0xdd, 0xd4, 0xeb, 0xf6, 0xba, 0xf1, 0x26, + 0x41, 0xf6, 0xa2, 0xc7, 0x92, 0x11, 0x47, 0x1f, 0xb7, 0x8e, 0x00, 0x5e, 0x52, 0xb7, 0xc7, 0xa4, + 0xe3, 0xf6, 0x28, 0x68, 0xd6, 0xec, 0x53, 0xf8, 0x08, 0xc4, 0x53, 0x82, 0xa3, 0x95, 0x36, 0x6e, + 0xcd, 0x9b, 0x58, 0x6b, 0xd4, 0xcd, 0xdd, 0x9d, 0x8d, 0x0e, 0xca, 0x89, 0xca, 0xa8, 0xcf, 0xda, + 0x92, 0xe4, 0xac, 0x2d, 0xe8, 0x27, 0xfc, 0x83, 0xfb, 0x12, 0xcf, 0xde, 0xd3, 0x41, 0x56, 0x3e, + 0x1f, 0x0d, 0x03, 0x4c, 0xfe, 0x22, 0x59, 0x9d, 0xbb, 0x4c, 0x2e, 0xa9, 0x28, 0x26, 0x97, 0xdf, + 0x72, 0x91, 0x3d, 0xcb, 0x21, 0xfb, 0xca, 0xe8, 0xed, 0x1a, 0xc9, 0xe6, 0xc1, 0x74, 0x15, 0x5b, + 0x01, 0xf0, 0x5e, 0x0f, 0x53, 0x1b, 0xde, 0x1b, 0x17, 0x62, 0x3e, 0xb1, 0xc7, 0x16, 0xdf, 0xdb, + 0xa2, 0x2e, 0xcd, 0x78, 0x12, 0x02, 0xd0, 0x75, 0x11, 0x4c, 0x8a, 0xec, 0x1b, 0x44, 0x5a, 0x67, + 0x85, 0xd6, 0x1f, 0x3f, 0x0a, 0x6f, 0x95, 0x60, 0xba, 0xb4, 0xd3, 0x36, 0x4c, 0x6b, 0x45, 0x33, + 0x2f, 0x90, 0x13, 0xd1, 0x8b, 0xa2, 0x9d, 0xec, 0x04, 0x80, 0x4e, 0x3e, 0xf5, 0x79, 0x50, 0xfb, + 0x52, 0xd0, 0xb3, 0x51, 0xb1, 0xe0, 0x09, 0x09, 0xf6, 0x0b, 0x31, 0x0d, 0xc3, 0x5a, 0xd6, 0x5b, + 0x17, 0xbc, 0x9d, 0x73, 0x7f, 0x52, 0xc4, 0x5d, 0x9e, 0x48, 0x68, 0x85, 0x52, 0x18, 0x3f, 0x5a, + 0x1f, 0x4a, 0xc2, 0x44, 0x75, 0x5b, 0x33, 0xf1, 0xfc, 0x65, 0xbb, 0xb1, 0xa2, 0x7e, 0x24, 0xaf, + 0xf6, 0x03, 0xa1, 0x40, 0xaa, 0xa9, 0xb7, 0x2e, 0x38, 0xdb, 0x73, 0xf6, 0x7f, 0x2f, 0x2c, 0x40, + 0xb2, 0x47, 0x58, 0x00, 0xd7, 0x44, 0xeb, 0xd6, 0x1b, 0x30, 0xf7, 0x79, 0xb3, 0x50, 0x58, 0x80, + 0xbe, 0xc5, 0xc5, 0xcf, 0xc6, 0xcf, 0x26, 0xe1, 0x68, 0xae, 0xd1, 0x38, 0xaf, 0x5b, 0xdb, 0x15, + 0x87, 0x47, 0x0f, 0x88, 0x6d, 0xaa, 0xcf, 0x40, 0xb6, 0xad, 0x5d, 0x6e, 0x1a, 0x9a, 0x3b, 0xb0, + 0xb0, 0x47, 0xf4, 0x68, 0x32, 0xe2, 0xc0, 0xd2, 0x45, 0x41, 0x00, 0x53, 0x23, 0xe9, 0xf4, 0xf0, + 0x22, 0xe3, 0x67, 0xec, 0x9f, 0xa6, 0x20, 0x53, 0xc5, 0x9a, 0x59, 0xdf, 0x46, 0xaf, 0x4b, 0x7a, + 0x0c, 0x5d, 0x80, 0xec, 0xa6, 0xde, 0xb4, 0xb0, 0x49, 0x3d, 0x40, 0xfc, 0xf3, 0x18, 0x3a, 0x9e, + 0xcd, 0x37, 0x8d, 0xfa, 0x85, 0xb9, 0xbc, 0xad, 0x59, 0x5a, 0xd6, 0x9c, 0x73, 0xe6, 0x72, 0x6e, + 0x81, 0x7c, 0xa4, 0x3a, 0x1f, 0x2b, 0x0f, 0x42, 0xba, 0x63, 0x98, 0x96, 0xb3, 0x56, 0x3b, 0x29, + 0x56, 0x4a, 0xd5, 0x30, 0x2d, 0x95, 0x7e, 0x68, 0x43, 0xbb, 0xb9, 0xdb, 0x6c, 0xd6, 0xf0, 0x25, + 0xcb, 0x59, 0x27, 0x39, 0xcf, 0xca, 0x71, 0xc8, 0x18, 0x9b, 0x9b, 0x1d, 0x4c, 0x97, 0xe2, 0x69, + 0x95, 0x3d, 0x29, 0xc7, 0x20, 0xdd, 0xd4, 0x77, 0x74, 0x8b, 0xac, 0xb8, 0xd3, 0x2a, 0x7d, 0x50, + 0x4e, 0x82, 0x6c, 0xb8, 0xab, 0x24, 0x4a, 0xe8, 0x4c, 0x86, 0xe8, 0xa2, 0x7d, 0xe9, 0x76, 0x97, + 0xbb, 0x80, 0x2f, 0x77, 0x66, 0xb2, 0xe4, 0x3d, 0xf9, 0x8f, 0x9e, 0x8e, 0x6a, 0xa5, 0xa7, 0x7c, + 0x0d, 0x5e, 0x32, 0x9a, 0xb8, 0x6e, 0x98, 0x0d, 0x87, 0x37, 0xc1, 0x4b, 0x46, 0x96, 0x2f, 0x9a, + 0x6d, 0xbd, 0x67, 0xe5, 0xf1, 0xcb, 0xd3, 0xd3, 0x19, 0x48, 0x2f, 0x9a, 0x5a, 0x7b, 0x1b, 0xfd, + 0x46, 0x62, 0xf8, 0xe2, 0xe4, 0x02, 0x9b, 0xec, 0x07, 0xac, 0xd4, 0x07, 0xd8, 0x94, 0x0f, 0xd8, + 0x27, 0x93, 0x90, 0x2a, 0x36, 0xb6, 0x30, 0x67, 0xf4, 0x4a, 0xf8, 0x8c, 0x5e, 0xc7, 0x21, 0x63, + 0x69, 0xe6, 0x16, 0xb6, 0x18, 0x97, 0xd8, 0x93, 0xeb, 0x55, 0x29, 0xf9, 0xce, 0xe6, 0xbe, 0x12, + 0x52, 0x76, 0xbb, 0x88, 0x44, 0x4e, 0x9f, 0xbe, 0xae, 0x17, 0x34, 0x84, 0x3f, 0x73, 0x76, 0x8d, + 0x73, 0x36, 0x65, 0x2a, 0xf9, 0xa0, 0x1b, 0x8f, 0xf4, 0x3e, 0x3c, 0xec, 0xb1, 0x5d, 0xaf, 0x1b, + 0xad, 0xd2, 0x8e, 0xb6, 0x85, 0x67, 0x32, 0x74, 0x6c, 0x77, 0x13, 0x9c, 0xb7, 0xc5, 0x1d, 0xe3, + 0x11, 0x7d, 0x26, 0xeb, 0xbd, 0x25, 0x09, 0x76, 0x13, 0xb6, 0xf5, 0x46, 0x03, 0xb7, 0x66, 0xc6, + 0xe8, 0xc9, 0x36, 0xfa, 0x34, 0x7b, 0x02, 0x52, 0x36, 0x0d, 0x36, 0xc6, 0xb6, 0x62, 0x97, 0x8f, + 0x28, 0x93, 0xb6, 0x94, 0x53, 0xab, 0xa4, 0x9c, 0x40, 0x9f, 0x4c, 0x46, 0xdc, 0x43, 0xa6, 0x8d, + 0xeb, 0x2d, 0xf3, 0xb7, 0x41, 0xba, 0x65, 0x34, 0x70, 0x5f, 0x89, 0xa7, 0xb9, 0x94, 0x97, 0x41, + 0x1a, 0x37, 0xb6, 0x70, 0x87, 0x80, 0x39, 0x71, 0xfa, 0x44, 0x38, 0x2f, 0x55, 0x9a, 0x39, 0xda, + 0x46, 0x75, 0x2f, 0x6a, 0xe3, 0xef, 0x24, 0xff, 0x37, 0x03, 0x47, 0x69, 0xff, 0xac, 0xee, 0x6e, + 0xd8, 0x45, 0x6d, 0x60, 0xf4, 0x73, 0x12, 0x17, 0x0c, 0xa0, 0xb3, 0xbb, 0xe1, 0x8e, 0x65, 0xf4, + 0xc1, 0xdf, 0x89, 0x92, 0x43, 0xd1, 0xc9, 0xd2, 0xa0, 0x3a, 0x99, 0xd3, 0xaf, 0x92, 0xd3, 0x0d, + 0x3d, 0x6d, 0x9c, 0x21, 0xc9, 0x8e, 0x36, 0xee, 0xa1, 0x4b, 0xed, 0x41, 0x59, 0xdb, 0xb4, 0xb0, + 0x59, 0x6a, 0x10, 0x79, 0x1c, 0x57, 0x9d, 0x47, 0x5b, 0xdf, 0x6f, 0xe0, 0x4d, 0xc3, 0xb4, 0x17, + 0x82, 0xe3, 0x54, 0xdf, 0x3b, 0xcf, 0xbe, 0xfe, 0x09, 0x9c, 0x51, 0xfa, 0x66, 0x38, 0xaa, 0x6f, + 0xb5, 0x0c, 0x13, 0xbb, 0x9e, 0x3d, 0x33, 0x93, 0xf4, 0x14, 0x7b, 0x57, 0xb2, 0x72, 0x2b, 0x5c, + 0xd1, 0x32, 0x0a, 0xb8, 0xcd, 0xf8, 0x4e, 0x51, 0x9d, 0x22, 0x3d, 0x62, 0xff, 0x0b, 0xf4, 0x89, + 0xa8, 0x2b, 0xcf, 0x2e, 0x50, 0x87, 0xa6, 0xfa, 0x95, 0x7b, 0x60, 0xb2, 0xc1, 0xbc, 0x06, 0xea, + 0xba, 0xdb, 0x23, 0x02, 0xbf, 0xe3, 0x32, 0x7b, 0xe2, 0x94, 0xf2, 0x8b, 0xd3, 0x22, 0x8c, 0x91, + 0x63, 0x2a, 0xb6, 0x3c, 0xa5, 0xbb, 0x0e, 0x42, 0x93, 0xe9, 0xb6, 0xdb, 0x28, 0x1f, 0x4b, 0xe6, + 0xf2, 0xec, 0x13, 0xd5, 0xfd, 0x38, 0xda, 0x7c, 0x27, 0x9c, 0x43, 0xf1, 0x77, 0xbd, 0x5f, 0x4c, + 0xc1, 0xd1, 0x45, 0xd3, 0xd8, 0x6d, 0x77, 0xbc, 0xae, 0xe7, 0x0f, 0xb7, 0xd0, 0xbb, 0xeb, 0xd9, + 0x2b, 0x18, 0xa6, 0x13, 0xcf, 0x62, 0x27, 0xda, 0x8b, 0x3f, 0xc9, 0xdf, 0x39, 0xa5, 0x83, 0x74, + 0x4e, 0x4f, 0xc4, 0x53, 0x7e, 0x11, 0x47, 0x5f, 0x88, 0x3a, 0x57, 0xed, 0x6a, 0x64, 0x80, 0x28, + 0xe6, 0x21, 0xb3, 0x45, 0x32, 0x32, 0x49, 0xbc, 0x45, 0x8c, 0x6a, 0x52, 0xb8, 0xca, 0x3e, 0xf5, + 0x78, 0x26, 0xf9, 0x78, 0x16, 0x4d, 0x2c, 0xc2, 0xa9, 0x1d, 0x81, 0x69, 0x23, 0x05, 0x93, 0x6e, + 0xed, 0xa5, 0x46, 0x07, 0x19, 0xfd, 0x44, 0x62, 0x9f, 0x21, 0xc3, 0xd5, 0x73, 0x92, 0x4f, 0xcf, + 0xf5, 0xd0, 0x4c, 0x13, 0x3d, 0x35, 0x13, 0x7a, 0x54, 0x12, 0x0d, 0xf5, 0xc2, 0x77, 0x4b, 0x42, + 0xee, 0x0b, 0x59, 0xd1, 0x08, 0x06, 0x9c, 0xe9, 0xdf, 0xaa, 0xf8, 0xa5, 0xe0, 0x99, 0x24, 0x5c, + 0x41, 0x15, 0xd4, 0x5a, 0xab, 0xe3, 0xaa, 0x07, 0x3e, 0x3e, 0x00, 0x69, 0x53, 0xc7, 0xdd, 0x15, + 0x25, 0x4f, 0xbc, 0x05, 0x38, 0xf4, 0xc8, 0x01, 0xa7, 0x06, 0x7d, 0xb5, 0x04, 0xac, 0x25, 0xc5, + 0x0e, 0x15, 0x08, 0x16, 0x3a, 0x02, 0xed, 0x2a, 0xc1, 0x78, 0x15, 0x5b, 0xcb, 0xda, 0x65, 0x63, + 0xd7, 0x42, 0x9a, 0xa8, 0x59, 0xea, 0x2e, 0xc8, 0x34, 0xc9, 0x27, 0x44, 0x83, 0x4c, 0x9f, 0xbe, + 0xb6, 0xa7, 0xf1, 0x94, 0x6c, 0x6e, 0xd1, 0xa2, 0x55, 0x96, 0x9f, 0x3f, 0xeb, 0x21, 0x62, 0x7a, + 0x77, 0xa9, 0x1b, 0x8a, 0xdd, 0x30, 0x92, 0x61, 0x3e, 0xa8, 0xea, 0xf8, 0x61, 0xf9, 0x09, 0x09, + 0xa6, 0x88, 0xab, 0xfe, 0x82, 0xb6, 0x67, 0x98, 0xba, 0x85, 0xa3, 0x59, 0x0c, 0xdd, 0xcf, 0xd8, + 0x79, 0x04, 0x5f, 0x0a, 0x7a, 0x6b, 0x32, 0xe2, 0x96, 0x1c, 0x47, 0xc7, 0x50, 0x40, 0x88, 0xb4, + 0x81, 0x17, 0x56, 0xfd, 0x08, 0x81, 0xc8, 0x99, 0xf5, 0x6d, 0x7d, 0x0f, 0x37, 0x22, 0x02, 0xe1, + 0x7c, 0xe6, 0x01, 0xe1, 0x16, 0x34, 0x18, 0x10, 0xce, 0xe7, 0x87, 0x04, 0x44, 0x40, 0xf5, 0xf1, + 0x03, 0xf1, 0x16, 0x0a, 0x84, 0xcf, 0x37, 0x61, 0x45, 0x14, 0x88, 0xeb, 0x61, 0xca, 0xb3, 0x2a, + 0xac, 0x99, 0x4d, 0x36, 0xeb, 0xe1, 0x13, 0xd1, 0x47, 0x06, 0x80, 0xa3, 0xaf, 0x9b, 0x41, 0x34, + 0x38, 0x3e, 0x1c, 0x11, 0x8e, 0x17, 0xaa, 0x0b, 0xc1, 0xb3, 0x12, 0x3d, 0x51, 0xc5, 0x79, 0x72, + 0x3c, 0x22, 0x0a, 0xd7, 0x3e, 0xaf, 0x91, 0x6c, 0x64, 0xaf, 0x91, 0x8f, 0x47, 0xf5, 0x1a, 0xe9, + 0xa6, 0x76, 0x28, 0x70, 0x46, 0x72, 0x0a, 0xe9, 0x43, 0xc1, 0x21, 0x23, 0xfa, 0x35, 0x09, 0x80, + 0xc4, 0x19, 0xa6, 0xfe, 0x4e, 0x4b, 0x90, 0xa1, 0x7f, 0x1d, 0xa7, 0xc9, 0x84, 0xe7, 0x34, 0x79, + 0x2b, 0xa4, 0xf7, 0xb4, 0xe6, 0x2e, 0x76, 0x79, 0xd4, 0x3d, 0x11, 0x3d, 0x67, 0xbf, 0x55, 0x69, + 0x26, 0xb4, 0x2d, 0x2a, 0x15, 0x0f, 0xf8, 0x1d, 0x76, 0x6c, 0x79, 0xb8, 0x21, 0x80, 0x8b, 0x8c, + 0xc6, 0x39, 0xfa, 0xeb, 0xf9, 0x68, 0xbd, 0x29, 0xaa, 0x03, 0x85, 0xaf, 0xac, 0x61, 0x48, 0x43, + 0x24, 0x97, 0x8a, 0xc0, 0xba, 0xe3, 0x57, 0xb4, 0x1f, 0x4f, 0x42, 0xba, 0x66, 0x54, 0x31, 0x77, + 0xde, 0x2c, 0x1c, 0x1b, 0x6f, 0x09, 0x9c, 0xe4, 0x96, 0xc0, 0x3f, 0x16, 0xd5, 0x14, 0x49, 0xea, + 0x0d, 0x0e, 0x26, 0xda, 0xc1, 0xde, 0xd6, 0x3f, 0x7d, 0x88, 0x66, 0x3b, 0xec, 0x55, 0x7c, 0xfc, + 0x0c, 0x3d, 0x03, 0x47, 0xd7, 0x5a, 0x0d, 0x43, 0xc5, 0x0d, 0x83, 0xd9, 0x62, 0xec, 0x85, 0xe7, + 0x6e, 0xab, 0x61, 0x10, 0x5a, 0xd3, 0x2a, 0xf9, 0x6f, 0xa7, 0x99, 0xb8, 0x61, 0x30, 0x43, 0x39, + 0xf9, 0x8f, 0x5e, 0x2f, 0x41, 0xca, 0xfe, 0x56, 0xdc, 0xb3, 0xe5, 0xeb, 0x51, 0x0f, 0xa6, 0xd8, + 0xc5, 0x0f, 0x43, 0xbe, 0x95, 0x07, 0x7c, 0xd6, 0x29, 0xba, 0x29, 0x7c, 0x5d, 0x50, 0x7d, 0x3e, + 0x56, 0xf8, 0xac, 0x52, 0xef, 0x88, 0x72, 0x98, 0xa5, 0x07, 0xd9, 0xd1, 0x90, 0x2c, 0x0c, 0xa0, + 0x22, 0x65, 0x98, 0xcc, 0xe7, 0xca, 0x24, 0x32, 0xcb, 0x4a, 0xe5, 0x5c, 0x51, 0x96, 0x08, 0x40, + 0x76, 0x6b, 0x62, 0x04, 0xc8, 0x2e, 0xfe, 0xbb, 0x10, 0xa0, 0x1e, 0x64, 0x1f, 0x06, 0x40, 0x1f, + 0x4d, 0xc2, 0xd4, 0xb2, 0xde, 0xb1, 0x82, 0x9c, 0xc4, 0x42, 0xce, 0xcd, 0xbf, 0x26, 0xea, 0x84, + 0x90, 0xab, 0x47, 0xf8, 0xc0, 0x7c, 0xa4, 0x39, 0x78, 0x58, 0x15, 0xa3, 0xf1, 0x66, 0x24, 0x14, + 0xd0, 0x30, 0x8c, 0xc2, 0x9c, 0x8c, 0x3c, 0xf4, 0x7a, 0x95, 0x8c, 0x7e, 0xe8, 0x0d, 0xac, 0x3b, + 0x7e, 0xfe, 0xfe, 0x75, 0x12, 0xae, 0xb0, 0xab, 0x0f, 0x5b, 0x70, 0x06, 0xb3, 0xb9, 0xef, 0x82, + 0x33, 0xb2, 0xcd, 0x6b, 0x1f, 0x2d, 0xc3, 0xb0, 0x79, 0xf5, 0x2b, 0x74, 0xc4, 0x6c, 0x0e, 0x30, + 0xb0, 0xf4, 0x63, 0x73, 0x88, 0x81, 0x65, 0x70, 0x36, 0x87, 0x1b, 0x59, 0x06, 0x64, 0xf3, 0xa1, + 0x99, 0x4e, 0x3e, 0x9f, 0x84, 0xa9, 0x5c, 0xbb, 0xdd, 0xbc, 0x5c, 0x63, 0x27, 0x47, 0x22, 0x99, + 0x4e, 0x7c, 0x07, 0x50, 0x92, 0xfb, 0x8e, 0x5f, 0x46, 0x76, 0x2b, 0xe7, 0xe8, 0x18, 0x86, 0x5b, + 0x79, 0x58, 0x81, 0xf1, 0xb3, 0xf6, 0xd5, 0x69, 0xaa, 0x88, 0x59, 0x60, 0x88, 0xcf, 0x26, 0xc2, + 0x23, 0x43, 0x84, 0x86, 0xc1, 0x51, 0xee, 0x83, 0xcc, 0xa6, 0x61, 0xee, 0x68, 0x8e, 0x2d, 0xf7, + 0x86, 0x20, 0x71, 0x62, 0xb1, 0x17, 0x16, 0x48, 0x66, 0x95, 0x7d, 0x64, 0x8f, 0x68, 0xaf, 0xd2, + 0xdb, 0xec, 0xec, 0xb4, 0xfd, 0x97, 0x04, 0x45, 0xa1, 0x47, 0xa8, 0xcb, 0xb8, 0x63, 0xe1, 0x06, + 0xd9, 0xac, 0x1c, 0x53, 0xf9, 0x44, 0x65, 0x16, 0x26, 0x59, 0xc2, 0x82, 0xde, 0xc4, 0x1d, 0xb2, + 0x05, 0x3d, 0xa6, 0x72, 0x69, 0xe8, 0x53, 0x83, 0x0c, 0x1c, 0x91, 0x23, 0x56, 0xcc, 0x40, 0xb6, + 0xb3, 0x5b, 0xaf, 0x63, 0xdc, 0x60, 0x5e, 0x49, 0xce, 0x63, 0x44, 0x2f, 0xc7, 0xc8, 0xc3, 0xcc, + 0xe1, 0x04, 0xb3, 0x98, 0x5d, 0x85, 0x0c, 0xc5, 0x50, 0x99, 0x84, 0x31, 0xc7, 0xcf, 0x92, 0xfa, + 0x91, 0xac, 0xb2, 0x45, 0xba, 0x9c, 0xb0, 0x4b, 0x7c, 0xa8, 0x5a, 0x29, 0xd3, 0xe0, 0x80, 0x85, + 0x0a, 0x0b, 0x0e, 0x58, 0x3d, 0xb7, 0x28, 0xa7, 0x94, 0x69, 0x80, 0x45, 0x35, 0xb7, 0xba, 0xb4, + 0x4e, 0x72, 0xa4, 0xd1, 0xb3, 0x59, 0xc8, 0x50, 0xb7, 0x4d, 0xf4, 0x4c, 0xda, 0x7f, 0x39, 0xd3, + 0x64, 0xcb, 0xb0, 0xc9, 0x5c, 0xd5, 0x4c, 0x6d, 0xa7, 0x13, 0xb6, 0x37, 0x46, 0xbf, 0x76, 0x2f, + 0x66, 0x2a, 0xfb, 0x3e, 0x5b, 0x3a, 0xa2, 0x72, 0xc5, 0x28, 0xff, 0x06, 0x8e, 0x6e, 0xb0, 0x03, + 0x07, 0x1d, 0x56, 0x72, 0x32, 0x78, 0x5b, 0xb5, 0xab, 0xe4, 0x79, 0xfe, 0xcb, 0xa5, 0x23, 0x6a, + 0x77, 0x61, 0x4a, 0x09, 0xc6, 0x3b, 0x2d, 0xad, 0xdd, 0xd9, 0x36, 0x5c, 0x97, 0x8b, 0x5b, 0x04, + 0x4a, 0xae, 0xb2, 0x6f, 0x54, 0xef, 0x6b, 0xe5, 0x65, 0xf0, 0xe2, 0x5d, 0x12, 0x4d, 0xb2, 0x78, + 0x49, 0xef, 0x58, 0x7a, 0x6b, 0x8b, 0x0f, 0x35, 0xd0, 0xfb, 0xa5, 0x72, 0x0f, 0xf3, 0x48, 0x4a, + 0x13, 0xf1, 0xb9, 0x49, 0xa0, 0x6e, 0x9f, 0x57, 0xd2, 0x3d, 0x90, 0xda, 0xb1, 0x65, 0x2f, 0x23, + 0xfc, 0xf1, 0x0a, 0x11, 0x38, 0xfb, 0x23, 0x34, 0x0b, 0x93, 0x7e, 0xd6, 0xf7, 0xd2, 0x26, 0xe8, + 0x3a, 0x38, 0xda, 0xc5, 0x44, 0xe7, 0xb8, 0x4a, 0xc2, 0x3b, 0xae, 0xf2, 0x83, 0x30, 0xe6, 0xf0, + 0x63, 0x5f, 0x4c, 0xe8, 0x1c, 0x8c, 0x39, 0x1c, 0x62, 0xc0, 0xdd, 0xd0, 0x65, 0xdb, 0xab, 0xee, + 0x68, 0xa6, 0x45, 0x76, 0xb2, 0x9d, 0x42, 0xe6, 0xb5, 0x0e, 0x56, 0xdd, 0xcf, 0x66, 0x6f, 0x83, + 0x94, 0x4d, 0xb5, 0xa2, 0xc0, 0x74, 0x6e, 0x79, 0x79, 0xbd, 0x42, 0xe2, 0x91, 0x2f, 0x95, 0xca, + 0x8b, 0xb4, 0x03, 0x94, 0x16, 0xcb, 0x15, 0xb5, 0x48, 0xe5, 0xbf, 0x2a, 0x27, 0x66, 0xaf, 0x65, + 0x3e, 0x53, 0x00, 0x19, 0xda, 0x3c, 0x2a, 0xed, 0xc5, 0x4b, 0xd4, 0xe0, 0x26, 0x93, 0x6b, 0x12, + 0xda, 0xa4, 0x2d, 0xbc, 0xd1, 0x42, 0xc4, 0x69, 0xd0, 0xe5, 0x66, 0xaf, 0x41, 0xe5, 0x5d, 0x51, + 0x3c, 0x00, 0x7b, 0x96, 0x14, 0x4d, 0x1f, 0x2c, 0xec, 0xd3, 0x07, 0x0a, 0x4c, 0x97, 0xca, 0xb5, + 0xa2, 0x5a, 0xce, 0x2d, 0xbb, 0x0a, 0x61, 0x9f, 0x8e, 0x48, 0xf2, 0x3a, 0x42, 0x42, 0x5f, 0x97, + 0x00, 0x28, 0x39, 0xb6, 0xa2, 0xf2, 0x87, 0x72, 0xfc, 0x6c, 0x54, 0x9d, 0xec, 0x15, 0x13, 0xa0, + 0x93, 0x4b, 0x30, 0x66, 0xb2, 0x17, 0xcc, 0xb6, 0xd7, 0xaf, 0x1c, 0xfa, 0xd7, 0x29, 0x4d, 0x75, + 0x3f, 0x47, 0xef, 0x8d, 0xa2, 0x82, 0x03, 0x09, 0x3b, 0x1c, 0x96, 0xbf, 0xca, 0x39, 0x25, 0xe0, + 0x9b, 0xd9, 0x50, 0x3d, 0x20, 0xd6, 0x06, 0xfe, 0x63, 0x9f, 0x4a, 0x08, 0x12, 0x7f, 0x57, 0xf5, + 0x27, 0xd0, 0x87, 0x8e, 0xc2, 0x34, 0x2d, 0xd1, 0x3d, 0xbe, 0xff, 0x8f, 0x2c, 0x8e, 0xe2, 0x59, + 0xd1, 0x49, 0xdb, 0x2c, 0x4c, 0xfa, 0xfc, 0x6b, 0xdc, 0x90, 0x9c, 0xfe, 0x34, 0xfe, 0x3e, 0xa7, + 0xd0, 0x8b, 0xf2, 0x78, 0x6a, 0x42, 0x62, 0x2d, 0x46, 0x5b, 0x0a, 0x46, 0xf1, 0x9f, 0x0f, 0xa9, + 0x3c, 0xfe, 0x29, 0xde, 0x63, 0xde, 0x75, 0x07, 0x43, 0x45, 0x20, 0xea, 0xe1, 0x1d, 0x97, 0x09, + 0x62, 0xeb, 0xf1, 0xa1, 0x1f, 0x07, 0x09, 0xaf, 0x3f, 0x7e, 0x1c, 0xbe, 0xc3, 0x0c, 0x48, 0xb9, + 0x3d, 0x4d, 0x6f, 0x6a, 0x1b, 0xcd, 0x08, 0xa7, 0x0c, 0x3f, 0xe4, 0x67, 0x75, 0x99, 0x67, 0xf5, + 0x5d, 0x61, 0x4d, 0xe5, 0xea, 0x0b, 0xbc, 0x91, 0x62, 0xdc, 0xc1, 0xd5, 0xf3, 0x15, 0xe2, 0x47, + 0x51, 0xa7, 0x3c, 0xd5, 0xcb, 0x89, 0x7e, 0xd7, 0x65, 0xfd, 0xf7, 0x71, 0xac, 0xbf, 0x6f, 0x50, + 0x7a, 0xe2, 0x47, 0xe0, 0x67, 0x24, 0x98, 0xc8, 0x35, 0x1a, 0x0b, 0x58, 0xb3, 0x76, 0x4d, 0xdc, + 0x40, 0x45, 0xd1, 0xee, 0x70, 0x75, 0x37, 0x8b, 0xc6, 0xfd, 0x9c, 0x78, 0x8f, 0x70, 0x50, 0xc6, + 0xfd, 0xda, 0xc0, 0xa1, 0x65, 0x28, 0x2a, 0x49, 0x2c, 0x84, 0xa3, 0x30, 0x11, 0xf1, 0x03, 0xf2, + 0x5a, 0x09, 0xa6, 0x69, 0xac, 0xce, 0x61, 0x63, 0xf2, 0x7e, 0x3f, 0x26, 0x15, 0x1e, 0x93, 0x33, + 0x61, 0xec, 0xe0, 0xc9, 0x19, 0x0a, 0x2c, 0x9e, 0xb5, 0x5b, 0xe5, 0x60, 0xb9, 0x7f, 0x60, 0x3a, + 0xe2, 0x47, 0xe6, 0x1b, 0x00, 0xe0, 0xf3, 0x90, 0xf8, 0x12, 0x78, 0x27, 0x03, 0xd0, 0xc7, 0x25, + 0x3a, 0x9e, 0x57, 0xb9, 0x03, 0xa0, 0xbc, 0x63, 0x44, 0xa2, 0x87, 0x63, 0x84, 0xd0, 0xa8, 0xf2, + 0xad, 0x88, 0x1b, 0xee, 0xcc, 0x67, 0xa1, 0xef, 0xe0, 0x3e, 0xa0, 0x96, 0x7b, 0x2e, 0xc2, 0xce, + 0x7b, 0x3f, 0x52, 0xe2, 0xbf, 0x80, 0x27, 0x6c, 0xe7, 0x5d, 0x99, 0x81, 0x63, 0x6a, 0x31, 0x57, + 0xa8, 0x94, 0x97, 0x1f, 0xf6, 0xbf, 0x95, 0x53, 0xe8, 0xd7, 0x24, 0xc8, 0xb0, 0x58, 0xc0, 0xb1, + 0x60, 0xfa, 0x5f, 0x22, 0x2a, 0x48, 0x9e, 0x91, 0x61, 0x61, 0x83, 0xd1, 0x7f, 0x8b, 0xa0, 0xf2, + 0x04, 0x8a, 0x7d, 0xc1, 0x42, 0xf4, 0x45, 0x09, 0x52, 0x64, 0xfd, 0xb4, 0x1b, 0x15, 0xa0, 0x02, + 0x5c, 0xa3, 0xb5, 0xdb, 0xb8, 0xd5, 0x70, 0xa3, 0x10, 0x2e, 0x98, 0xc6, 0x4e, 0xc5, 0xda, 0xc6, + 0xa6, 0x9d, 0xa5, 0xc3, 0xec, 0xce, 0xe1, 0x99, 0xd0, 0x17, 0x23, 0x9a, 0xa2, 0x79, 0x5e, 0x87, + 0x2c, 0xd9, 0xce, 0xec, 0xef, 0x97, 0x57, 0x05, 0xf4, 0xcb, 0x65, 0xbd, 0x75, 0xc1, 0xdf, 0x37, + 0xff, 0x24, 0x82, 0x15, 0xbb, 0x2f, 0x3d, 0x87, 0xec, 0x16, 0xf3, 0x68, 0xc6, 0xa7, 0x60, 0x7f, + 0x52, 0x02, 0xd9, 0x0b, 0x63, 0xcd, 0x42, 0x69, 0x55, 0xf8, 0x5d, 0x05, 0x92, 0xe8, 0xdf, 0x55, + 0x70, 0x12, 0x94, 0x1b, 0x61, 0xba, 0xbe, 0x8d, 0xeb, 0x17, 0x4a, 0x2d, 0xc7, 0x44, 0x44, 0x11, + 0xee, 0x4a, 0xe5, 0xfd, 0x67, 0xcf, 0xf2, 0x90, 0xf2, 0x96, 0x6a, 0x8e, 0x6f, 0x7e, 0xa2, 0x02, + 0x3a, 0xa5, 0x07, 0x4c, 0x99, 0x03, 0xe6, 0xee, 0x81, 0x4a, 0x8d, 0x86, 0x4c, 0x79, 0xb0, 0xeb, + 0x52, 0x2a, 0xab, 0xe4, 0x7e, 0xc1, 0xb5, 0x6a, 0xb1, 0xb0, 0x3e, 0xef, 0x74, 0xbe, 0xaa, 0x2c, + 0xa1, 0xaf, 0x25, 0x21, 0x4b, 0xc9, 0xea, 0x74, 0x85, 0x99, 0xf6, 0x9f, 0x0a, 0x49, 0xec, 0x3b, + 0x15, 0x82, 0xde, 0x2e, 0xec, 0x9e, 0xec, 0x32, 0x82, 0xd5, 0x13, 0xd0, 0x53, 0xee, 0x82, 0x2c, + 0x05, 0xd9, 0x31, 0x52, 0x9e, 0x08, 0xe8, 0x27, 0xac, 0x18, 0xd5, 0xc9, 0x2e, 0xe8, 0xaa, 0xdc, + 0x87, 0x8c, 0xf8, 0xe7, 0x1c, 0x6f, 0x9e, 0x80, 0xec, 0x92, 0xde, 0xb1, 0x0c, 0xf3, 0x32, 0x7a, + 0x53, 0x02, 0xb2, 0xe7, 0xb0, 0xd9, 0xd1, 0x8d, 0xd6, 0x3e, 0xab, 0xdf, 0xb5, 0x30, 0xd1, 0x36, + 0xf1, 0x9e, 0x6e, 0xec, 0x76, 0x7c, 0x31, 0x05, 0x7c, 0x49, 0x0a, 0x82, 0x31, 0x6d, 0xd7, 0xda, + 0x36, 0x4c, 0x2f, 0xc0, 0x92, 0xf3, 0xac, 0x9c, 0x00, 0xa0, 0xff, 0xcb, 0xda, 0x0e, 0x66, 0xa7, + 0x15, 0x7c, 0x29, 0x8a, 0x02, 0x29, 0x4b, 0xdf, 0xc1, 0xec, 0x7c, 0x1b, 0xf9, 0xaf, 0xcc, 0x40, + 0x96, 0x9c, 0x77, 0x29, 0x35, 0xd8, 0xf9, 0x36, 0xe7, 0x11, 0xfd, 0xa6, 0x04, 0x13, 0x8b, 0xd8, + 0x62, 0xa4, 0x76, 0xfc, 0x7e, 0xef, 0x7d, 0xa2, 0xbd, 0x37, 0xb5, 0x8e, 0xf3, 0x99, 0xbb, 0x33, + 0xc5, 0x27, 0x7a, 0x67, 0xed, 0x24, 0xdf, 0x91, 0x57, 0xf4, 0xae, 0xa4, 0xe8, 0x69, 0x11, 0xc6, + 0xcc, 0x39, 0x1f, 0x81, 0x81, 0xb2, 0x35, 0xb6, 0xc7, 0x72, 0x30, 0x25, 0x7c, 0x75, 0xcf, 0x92, + 0x58, 0x31, 0xaa, 0x9b, 0x5b, 0xf0, 0x84, 0x47, 0x7f, 0x4a, 0xe2, 0x17, 0xaf, 0xbf, 0x97, 0x60, + 0xa2, 0xba, 0x6d, 0x5c, 0x64, 0x04, 0xa0, 0x1f, 0x14, 0x83, 0xea, 0x6a, 0x18, 0xdf, 0xeb, 0x82, + 0xc9, 0x4b, 0x08, 0x0e, 0x14, 0x8c, 0x9e, 0x90, 0xa2, 0xc2, 0xe4, 0x23, 0x6e, 0xe8, 0x01, 0x7e, + 0x95, 0x57, 0x40, 0x96, 0x51, 0xcd, 0x2c, 0x2b, 0xe1, 0x00, 0x3b, 0x99, 0xfd, 0x0d, 0x4c, 0xf1, + 0x0d, 0x8c, 0x86, 0x7c, 0x70, 0xe3, 0x46, 0x10, 0xe8, 0x20, 0x49, 0x7c, 0x4e, 0x1d, 0xe0, 0xf3, + 0x43, 0x00, 0x1e, 0x7d, 0x3b, 0x21, 0x6a, 0x7f, 0x74, 0x39, 0xe0, 0x52, 0x70, 0xa0, 0x88, 0x1c, + 0x7d, 0x8b, 0x8b, 0x9f, 0x9f, 0x3f, 0x7a, 0x05, 0xa4, 0x16, 0xf4, 0x26, 0xb6, 0xd7, 0xef, 0xd9, + 0xca, 0xe6, 0x26, 0x89, 0xa8, 0x51, 0x0c, 0xbe, 0xba, 0xf3, 0x24, 0xc8, 0xce, 0x8e, 0xad, 0x61, + 0xad, 0xea, 0xad, 0x96, 0xeb, 0x54, 0xb2, 0x2f, 0x9d, 0x37, 0x75, 0x85, 0x7a, 0x7a, 0xda, 0x14, + 0xcc, 0xb1, 0xda, 0x03, 0xfa, 0xcb, 0x8d, 0x30, 0xbd, 0x71, 0xd9, 0xc2, 0x1d, 0x96, 0x8b, 0x55, + 0x9b, 0x52, 0xbb, 0x52, 0xd1, 0xb3, 0x42, 0xbe, 0x9f, 0x21, 0x15, 0x46, 0xe3, 0xb9, 0x36, 0xc0, + 0x1c, 0xe5, 0x18, 0xc8, 0xe5, 0x4a, 0xa1, 0x48, 0xef, 0xb8, 0xac, 0xe5, 0xd4, 0x5a, 0xb1, 0x20, + 0x6f, 0x91, 0x8b, 0xfd, 0x4a, 0xcb, 0x34, 0xf5, 0xe1, 0x62, 0x6d, 0x7d, 0xb5, 0x54, 0x2e, 0x17, + 0x0b, 0xf2, 0x36, 0x7a, 0x9f, 0x04, 0x13, 0xf6, 0xbc, 0xca, 0x41, 0xa7, 0xc2, 0xdd, 0x8b, 0x68, + 0xb4, 0x9a, 0x97, 0xbd, 0xb9, 0xa3, 0xf3, 0x18, 0x09, 0xa7, 0xff, 0x2a, 0x3c, 0xbd, 0x21, 0x6c, + 0xf3, 0xd1, 0x12, 0x8c, 0xd5, 0xa6, 0xde, 0xec, 0xc6, 0x2a, 0xad, 0x76, 0xa5, 0xf6, 0xc0, 0x54, + 0xea, 0x89, 0xe9, 0x1f, 0x08, 0x4d, 0x7a, 0xfa, 0x10, 0x17, 0x0d, 0xd7, 0xa5, 0x61, 0xe1, 0x8a, + 0xbe, 0x29, 0x41, 0x66, 0xad, 0x4d, 0x90, 0x7b, 0xce, 0xe7, 0x92, 0xb1, 0x6f, 0x77, 0xd4, 0x56, + 0x52, 0x4d, 0xfe, 0x22, 0x78, 0xd5, 0x4b, 0x50, 0xee, 0x66, 0xdb, 0x3e, 0xd4, 0x1d, 0xe3, 0xc6, + 0xd0, 0x03, 0xbe, 0x84, 0x13, 0xbe, 0xdd, 0xdf, 0x5b, 0xe1, 0x8a, 0x86, 0xde, 0xd1, 0x36, 0x9a, + 0xb8, 0xd8, 0xaa, 0x9b, 0x97, 0x69, 0xa3, 0xe9, 0x66, 0xf3, 0xfe, 0x17, 0xca, 0x7d, 0x90, 0xee, + 0x58, 0x97, 0x9b, 0xfb, 0x77, 0x9a, 0x03, 0xab, 0xaa, 0xda, 0xd9, 0x55, 0xfa, 0x15, 0xfa, 0x4e, + 0x42, 0xd4, 0x97, 0x95, 0x7c, 0x4b, 0x59, 0x13, 0xec, 0x98, 0xb1, 0xad, 0x75, 0x5c, 0xc7, 0x0c, + 0xfb, 0x3f, 0x7a, 0x4a, 0xc8, 0xe1, 0x34, 0xb8, 0xec, 0x11, 0xdc, 0x0b, 0x92, 0x84, 0xb1, 0x82, + 0x71, 0xb1, 0x45, 0x30, 0xbf, 0x83, 0xf3, 0xc2, 0x21, 0xad, 0x49, 0x78, 0xad, 0xe9, 0xe5, 0x7a, + 0x82, 0xfe, 0xa3, 0xf0, 0x66, 0x33, 0x69, 0xa5, 0x53, 0x55, 0xf0, 0x75, 0x57, 0xc1, 0x62, 0xe5, + 0x33, 0xfd, 0x87, 0x6d, 0x45, 0x87, 0xd5, 0x13, 0x8d, 0x9f, 0xb9, 0x03, 0x5f, 0x17, 0x80, 0x9e, + 0x95, 0x20, 0x55, 0x30, 0x8d, 0x36, 0xfa, 0x9d, 0x44, 0x84, 0x3d, 0xb0, 0x86, 0x69, 0xb4, 0x6b, + 0x24, 0xde, 0x8b, 0x3b, 0x05, 0xe0, 0xd2, 0x94, 0x33, 0x30, 0xd6, 0x36, 0x3a, 0xba, 0xe5, 0x4c, + 0xab, 0xa6, 0xf7, 0xdd, 0xe7, 0x4d, 0x25, 0x7f, 0x95, 0x65, 0x52, 0xdd, 0xec, 0xb6, 0x1e, 0x23, + 0x1c, 0xb5, 0xd9, 0x64, 0x73, 0xd5, 0x89, 0x4b, 0xd3, 0x95, 0x8a, 0x7e, 0xc9, 0x0f, 0xec, 0x3d, + 0x3c, 0xb0, 0x37, 0xf4, 0x60, 0xb8, 0x19, 0x74, 0x41, 0x70, 0x44, 0xab, 0xf5, 0xeb, 0x5c, 0x90, + 0xef, 0xe7, 0x40, 0x3e, 0x29, 0x54, 0x67, 0xfc, 0x1d, 0xe6, 0xeb, 0x59, 0x80, 0xb2, 0xb6, 0xa7, + 0x6f, 0x51, 0x9b, 0xc9, 0xe7, 0x9c, 0x01, 0x8f, 0x59, 0x37, 0x7e, 0xc6, 0x87, 0xf3, 0x19, 0xc8, + 0x32, 0x58, 0x59, 0x1b, 0x5e, 0xca, 0xb5, 0xc1, 0x2b, 0x85, 0x6a, 0xa8, 0x4b, 0x96, 0xea, 0xe4, + 0xe7, 0x42, 0x50, 0x25, 0xbb, 0x42, 0x50, 0xf5, 0x5c, 0x9e, 0x05, 0x05, 0xa6, 0x42, 0xef, 0x16, + 0x8e, 0xe2, 0xe0, 0xa3, 0xc7, 0xd7, 0xa2, 0x00, 0x50, 0xef, 0x84, 0xac, 0xe1, 0x9a, 0x79, 0xa4, + 0xc0, 0xf5, 0x40, 0xa9, 0xb5, 0x69, 0xa8, 0x4e, 0x4e, 0xc1, 0xf8, 0x0c, 0x42, 0x74, 0xc4, 0x0f, + 0xf4, 0x27, 0x24, 0x38, 0xbe, 0xe8, 0x1c, 0x51, 0xb4, 0xdb, 0x71, 0x5e, 0xb7, 0xb6, 0x97, 0xf5, + 0xd6, 0x85, 0x0e, 0xfa, 0xb7, 0x62, 0x33, 0x79, 0x1f, 0xfe, 0xc9, 0x68, 0xf8, 0xf3, 0x7e, 0x83, + 0x55, 0x1e, 0xb5, 0xfb, 0x82, 0x4a, 0xe9, 0x4d, 0x6d, 0x00, 0x80, 0x77, 0x43, 0x86, 0x12, 0xca, + 0xba, 0xe5, 0x6c, 0x20, 0x7e, 0x6e, 0x49, 0x2a, 0xfb, 0xc2, 0xe7, 0x13, 0x74, 0x8e, 0xc3, 0x71, + 0xfe, 0x40, 0x94, 0xc5, 0xef, 0x37, 0x78, 0x07, 0x64, 0x19, 0xa7, 0x95, 0x69, 0x7f, 0x2f, 0x96, + 0x8f, 0x28, 0x00, 0x99, 0x15, 0x63, 0x0f, 0xd7, 0x0c, 0x39, 0x61, 0xff, 0xb7, 0xe9, 0xab, 0x19, + 0x72, 0x12, 0xfd, 0x0f, 0x80, 0x31, 0xd7, 0xfd, 0xf7, 0x33, 0x49, 0x27, 0xc2, 0x38, 0x31, 0x53, + 0x53, 0x66, 0x08, 0xef, 0xa6, 0xbf, 0x56, 0xd8, 0xf0, 0xe9, 0xba, 0xe5, 0x76, 0x57, 0x26, 0x18, + 0xbc, 0xf7, 0x6d, 0x42, 0x86, 0x50, 0xd1, 0x5a, 0xe2, 0xef, 0x6a, 0x5f, 0x49, 0x3a, 0xf7, 0x38, + 0x78, 0x44, 0x90, 0xfd, 0x3f, 0xfe, 0x4e, 0x7b, 0x6f, 0x83, 0x81, 0x31, 0xd7, 0x97, 0xc2, 0x5f, + 0x6c, 0x1c, 0xba, 0xf3, 0x1a, 0xd8, 0xee, 0x90, 0x63, 0xd0, 0xdd, 0x1c, 0x16, 0xdb, 0x5b, 0x8d, + 0x52, 0x53, 0xfc, 0x5c, 0xfe, 0x7d, 0x7a, 0xd5, 0x57, 0x2b, 0x82, 0x03, 0x08, 0x17, 0xae, 0xf2, + 0x41, 0x9e, 0xa9, 0x27, 0x03, 0x9a, 0x6a, 0xd7, 0x20, 0xc8, 0xc5, 0xa7, 0x5d, 0x2e, 0xe6, 0x39, + 0x2e, 0x9e, 0x12, 0x2f, 0x3a, 0x7e, 0xb6, 0x7d, 0x2d, 0x09, 0xe3, 0xd4, 0xcf, 0x39, 0xd7, 0x6c, + 0x76, 0x5d, 0x70, 0xbc, 0xcf, 0xb5, 0xf4, 0x3f, 0x0b, 0xbb, 0x87, 0xb9, 0xad, 0x72, 0xcb, 0x8e, + 0xed, 0x8a, 0x42, 0x31, 0x03, 0x4f, 0x5f, 0x82, 0x46, 0x12, 0x72, 0x75, 0xc2, 0xd6, 0xbc, 0xab, + 0x26, 0xde, 0xd3, 0xf1, 0x45, 0x74, 0x55, 0xc8, 0x12, 0x14, 0xbd, 0x45, 0xf8, 0x1c, 0xa2, 0xaf, + 0xc8, 0x00, 0x1e, 0xdf, 0x0b, 0x13, 0x4d, 0x2f, 0x13, 0x1b, 0x11, 0x51, 0xd7, 0x88, 0xe8, 0x2b, + 0x46, 0xf5, 0x67, 0x17, 0x5c, 0xe5, 0x05, 0x53, 0x11, 0x3f, 0x63, 0xbf, 0x9a, 0x81, 0xb1, 0xb5, + 0x56, 0xa7, 0xdd, 0xb4, 0x17, 0xa5, 0xff, 0x28, 0xb9, 0xf1, 0x57, 0x5f, 0xce, 0x85, 0x9c, 0xfa, + 0xa1, 0x5d, 0x6c, 0x3a, 0x7b, 0x4a, 0xf4, 0xa1, 0x77, 0xf4, 0x4b, 0xf4, 0x07, 0x7e, 0x1b, 0x73, + 0x8e, 0x67, 0x3d, 0xef, 0x68, 0xee, 0x54, 0x1a, 0x1e, 0x98, 0xb4, 0x04, 0x63, 0x6d, 0xbd, 0x6e, + 0xed, 0x9a, 0x6e, 0x9c, 0xc6, 0xdb, 0xc4, 0x4a, 0x59, 0xa5, 0x5f, 0xa9, 0xee, 0xe7, 0x48, 0x83, + 0x2c, 0x4b, 0xdc, 0x67, 0x0e, 0xdc, 0x77, 0x25, 0x81, 0x3d, 0x67, 0xd6, 0x4c, 0x4b, 0xef, 0x38, + 0x61, 0x5e, 0xd9, 0x93, 0xad, 0x14, 0xe9, 0xbf, 0x35, 0xb3, 0xc9, 0xcc, 0xcf, 0x5e, 0x02, 0x7a, + 0x9f, 0x0b, 0x77, 0x81, 0x83, 0xfb, 0xf6, 0x08, 0x2d, 0x8f, 0x06, 0xf9, 0xd9, 0x01, 0x16, 0xa2, + 0x57, 0xc2, 0x8b, 0xd4, 0x5c, 0xad, 0xb8, 0xbe, 0x5c, 0x5a, 0x29, 0xd5, 0xd6, 0x8b, 0xdf, 0x9f, + 0x2f, 0x16, 0x0b, 0xc5, 0x82, 0xdc, 0x20, 0xb7, 0x1b, 0xb9, 0x2b, 0x7e, 0x7e, 0x24, 0x60, 0x5c, + 0xf4, 0x46, 0x02, 0x37, 0x01, 0xfd, 0xba, 0xb0, 0xd3, 0xb4, 0xdb, 0xf0, 0x3e, 0x6b, 0xfd, 0x5e, + 0xf6, 0x92, 0x67, 0x84, 0xbc, 0x9f, 0xfb, 0xd5, 0x70, 0x88, 0xcc, 0x7d, 0xe7, 0x0f, 0x40, 0x9a, + 0x2c, 0xbd, 0xd1, 0xef, 0x91, 0xe0, 0x9a, 0xed, 0xa6, 0x56, 0xc7, 0x68, 0x27, 0xc2, 0x8d, 0x04, + 0x1b, 0xf6, 0xd7, 0xde, 0x8d, 0x04, 0xec, 0x51, 0x39, 0x09, 0x69, 0xf2, 0x97, 0x69, 0xfc, 0x63, + 0xbd, 0x96, 0xfb, 0x2a, 0xcd, 0xc2, 0x3b, 0x06, 0x86, 0xda, 0x64, 0xa8, 0x95, 0x80, 0x91, 0x19, + 0x80, 0x53, 0x30, 0x4d, 0xd1, 0x46, 0x21, 0xb1, 0x50, 0xc2, 0x61, 0x14, 0xc5, 0xaf, 0x27, 0xff, + 0x22, 0x05, 0xe9, 0x6a, 0xbb, 0xa9, 0x5b, 0xe8, 0x57, 0x92, 0x43, 0xc1, 0xcc, 0xd4, 0x5a, 0x5b, + 0x38, 0x00, 0x33, 0xd5, 0x7e, 0xa7, 0xd2, 0x2c, 0x9e, 0x21, 0x33, 0x25, 0x60, 0xc8, 0xac, 0xe1, + 0x4b, 0x16, 0x67, 0xc8, 0x54, 0xce, 0xb0, 0x33, 0x33, 0xe9, 0x1e, 0x07, 0xe0, 0xe8, 0xb7, 0xa4, + 0x59, 0x3d, 0x4e, 0xcc, 0xcc, 0xde, 0xc1, 0x4e, 0xa2, 0x00, 0x64, 0xe6, 0x2b, 0xb5, 0x5a, 0x65, + 0x45, 0x3e, 0xa2, 0x64, 0x41, 0xaa, 0x55, 0x56, 0xe5, 0x84, 0x32, 0x0e, 0xe9, 0x52, 0xb9, 0x5c, + 0x54, 0xe5, 0xa4, 0xfd, 0xb7, 0x56, 0xaa, 0x2d, 0x17, 0x65, 0x09, 0xbd, 0x53, 0x78, 0xe8, 0xe5, + 0xeb, 0x8e, 0x53, 0xbc, 0xc4, 0x06, 0xe1, 0x60, 0x7a, 0xe2, 0x17, 0xae, 0xff, 0x20, 0x41, 0x7a, + 0x05, 0x9b, 0x5b, 0x18, 0xfd, 0x50, 0x04, 0x5b, 0xe0, 0xa6, 0x6e, 0x76, 0xe8, 0x49, 0x22, 0xcf, + 0x16, 0xe8, 0x4f, 0x53, 0xae, 0x87, 0xa9, 0x0e, 0xae, 0x1b, 0xad, 0x86, 0x93, 0x89, 0x05, 0x87, + 0xe2, 0x12, 0xd1, 0x93, 0x11, 0x21, 0x23, 0x84, 0x0e, 0xc5, 0xa0, 0x17, 0x05, 0x98, 0x5e, 0xb5, + 0xc6, 0x0f, 0xcc, 0xff, 0x91, 0xec, 0x8f, 0xda, 0x97, 0xd1, 0x93, 0xc2, 0x46, 0xda, 0x5b, 0x21, + 0x43, 0xc4, 0xd4, 0x99, 0xaf, 0xf4, 0xd6, 0xc7, 0x2c, 0x8f, 0x32, 0x0f, 0x57, 0x74, 0xc8, 0xe5, + 0xeb, 0xb8, 0x61, 0x77, 0x5d, 0xb5, 0xaf, 0x52, 0xd8, 0x9f, 0x1d, 0xfd, 0x99, 0x1f, 0xc0, 0x7b, + 0x79, 0x00, 0x6f, 0xec, 0xc1, 0x4a, 0xbb, 0x41, 0xc1, 0xd7, 0xd0, 0xd8, 0xcd, 0xa8, 0x36, 0x0d, + 0xd7, 0xb8, 0xe8, 0x3c, 0xdb, 0xef, 0xb6, 0xad, 0x9d, 0x26, 0x79, 0xc7, 0x5c, 0x58, 0x9c, 0x67, + 0x65, 0x0e, 0xb2, 0x5a, 0xeb, 0x32, 0x79, 0x95, 0x0a, 0x69, 0xb5, 0x93, 0x09, 0xbd, 0xde, 0x45, + 0xfe, 0x01, 0x0e, 0xf9, 0x5b, 0xc4, 0xc8, 0x8d, 0x1f, 0xf8, 0xbf, 0xcb, 0x40, 0x7a, 0x55, 0xeb, + 0x58, 0x18, 0x7d, 0x49, 0x12, 0x45, 0xfe, 0x46, 0x98, 0xde, 0x34, 0xea, 0xbb, 0x1d, 0xdc, 0xe0, + 0x3b, 0x65, 0x57, 0xea, 0x30, 0x30, 0x57, 0x4e, 0x82, 0xec, 0x24, 0xb2, 0x62, 0x1d, 0x6b, 0xfd, + 0xbe, 0x74, 0x72, 0x66, 0xb9, 0xb3, 0xaa, 0x99, 0x56, 0x65, 0x93, 0xa4, 0xb9, 0x67, 0x96, 0xfd, + 0x89, 0x1c, 0xf4, 0x99, 0x10, 0xe8, 0xb3, 0xc1, 0xd0, 0x8f, 0x09, 0x40, 0xaf, 0xe4, 0x60, 0x6c, + 0x53, 0x6f, 0x62, 0xf2, 0xc1, 0x78, 0x8f, 0x68, 0x57, 0x6c, 0x7b, 0xc2, 0xe6, 0xbd, 0x3b, 0x26, + 0x2d, 0xe8, 0x4d, 0xac, 0xba, 0x9f, 0xa1, 0x65, 0xba, 0xd9, 0xef, 0x46, 0xbc, 0x4f, 0xf8, 0x22, + 0xde, 0x2b, 0x90, 0x6a, 0x68, 0x96, 0x46, 0x58, 0x3f, 0xa9, 0x92, 0xff, 0xfc, 0xde, 0x91, 0xd4, + 0xbd, 0x77, 0xf4, 0xb8, 0x14, 0x4d, 0xff, 0x39, 0xa4, 0x05, 0xf4, 0x9f, 0x0d, 0x07, 0x0e, 0xea, + 0x05, 0xe6, 0x3e, 0xdb, 0x30, 0xd4, 0x35, 0x13, 0x5b, 0xab, 0xfe, 0xed, 0x99, 0xb4, 0xca, 0x27, + 0x92, 0x1d, 0xef, 0x4e, 0x55, 0xdb, 0xc1, 0xa4, 0xb2, 0xbc, 0xfd, 0x8e, 0xed, 0x71, 0xee, 0x4b, + 0xf7, 0xb4, 0x6d, 0x7a, 0xd8, 0xda, 0xb6, 0x57, 0x1b, 0xe3, 0xef, 0x74, 0x6f, 0x48, 0x81, 0x94, + 0xdf, 0xb5, 0x5e, 0xd0, 0xca, 0xf6, 0x9f, 0x84, 0x37, 0xbf, 0x98, 0xf6, 0xda, 0xb5, 0x0e, 0x57, + 0xd7, 0x46, 0x94, 0x12, 0xb1, 0x4d, 0xb6, 0xa0, 0xb6, 0x8d, 0xe4, 0x80, 0x8e, 0xe3, 0x87, 0x60, + 0x1c, 0x7c, 0x1e, 0x8e, 0xa8, 0x32, 0xf2, 0x29, 0x06, 0xf7, 0xd9, 0x31, 0x0a, 0xa4, 0x3c, 0xbb, + 0xd2, 0xaf, 0x0a, 0x7b, 0x02, 0x51, 0xfe, 0x84, 0x3a, 0x05, 0x44, 0x9b, 0x2a, 0x89, 0xc5, 0x82, + 0x0b, 0xa9, 0x36, 0x7e, 0x64, 0xbe, 0xe9, 0xb7, 0x1e, 0xe4, 0x0e, 0x8c, 0x0d, 0x6f, 0xb6, 0x0f, + 0xb5, 0x30, 0xd3, 0x66, 0xf7, 0x31, 0x2a, 0x44, 0xe3, 0xb7, 0x98, 0xfd, 0x39, 0xb4, 0xe2, 0x11, + 0x1c, 0x89, 0x92, 0x20, 0x43, 0xf7, 0x0f, 0xd0, 0x6f, 0x09, 0xab, 0x4c, 0x5b, 0xed, 0xf0, 0x0e, + 0x04, 0xee, 0x73, 0x14, 0x53, 0x02, 0xe7, 0x68, 0x90, 0x8a, 0xe4, 0x68, 0xc0, 0xfb, 0x0b, 0x0b, + 0xf4, 0xa3, 0x9e, 0x37, 0xf3, 0x0f, 0x7b, 0x95, 0x18, 0xa5, 0x87, 0xf5, 0x24, 0x28, 0x7e, 0xbc, + 0x9f, 0x4d, 0xc1, 0x24, 0xad, 0xfa, 0xbc, 0xde, 0xd8, 0xc2, 0x16, 0xfa, 0x87, 0xef, 0x22, 0xd4, + 0x95, 0x32, 0x4c, 0x5e, 0x24, 0x64, 0xd3, 0xb8, 0xe3, 0xcc, 0x20, 0x11, 0x7e, 0xe1, 0x0b, 0x6d, + 0xa7, 0x13, 0x67, 0x9d, 0xfb, 0x1e, 0x7d, 0x40, 0x78, 0x43, 0xc5, 0x0f, 0x1a, 0x2b, 0x31, 0x5e, + 0x59, 0x12, 0xdb, 0x56, 0xe9, 0x4b, 0xd6, 0x08, 0x3c, 0xd0, 0xf9, 0xa8, 0x77, 0xf9, 0x08, 0xe2, + 0x14, 0x34, 0xcf, 0x8d, 0x10, 0x05, 0x9f, 0x32, 0x60, 0xc8, 0x01, 0xf1, 0xc4, 0x8e, 0x96, 0xf4, + 0xa9, 0x3a, 0x7e, 0xce, 0xbf, 0x91, 0x5e, 0x4e, 0xb0, 0xa0, 0xe3, 0x66, 0xa3, 0x83, 0xcc, 0x83, + 0x4f, 0x65, 0x4e, 0x41, 0x66, 0x93, 0x14, 0xc6, 0x44, 0x34, 0xf0, 0x96, 0x0c, 0x96, 0x0d, 0xbd, + 0x21, 0x29, 0xba, 0x55, 0xc3, 0x4c, 0x63, 0x0e, 0xb5, 0x43, 0x81, 0xe9, 0x8d, 0x42, 0x5b, 0x25, + 0xe1, 0x35, 0xc7, 0x8f, 0xd2, 0xdb, 0x25, 0x98, 0x64, 0xd1, 0xe6, 0x72, 0x4d, 0x7d, 0xab, 0xe5, + 0x3f, 0xec, 0x38, 0x70, 0x0f, 0x51, 0x6e, 0x87, 0xb4, 0x66, 0x97, 0xc6, 0x1c, 0xf4, 0x50, 0x4f, + 0x15, 0x48, 0xea, 0x53, 0x69, 0xc6, 0x08, 0xb1, 0x45, 0x3c, 0xc1, 0x76, 0x68, 0x1e, 0x61, 0x6c, + 0x91, 0xbe, 0x95, 0xc7, 0x8f, 0xd8, 0x97, 0x25, 0x38, 0xc6, 0x08, 0x38, 0x87, 0x4d, 0x4b, 0xaf, + 0x6b, 0x4d, 0x8a, 0xdc, 0xab, 0x13, 0xc3, 0x80, 0x6e, 0x09, 0xa6, 0xf6, 0xfc, 0xc5, 0x32, 0x08, + 0x67, 0x7b, 0x42, 0xc8, 0x11, 0xa0, 0xf2, 0x1f, 0x46, 0x88, 0xd1, 0xc0, 0x71, 0x95, 0x2b, 0x73, + 0x84, 0x31, 0x1a, 0x84, 0x89, 0x88, 0x1f, 0xe2, 0x5f, 0x4a, 0xd1, 0xb0, 0x25, 0x9e, 0xfa, 0xfc, + 0x9c, 0x30, 0xb6, 0x6b, 0x30, 0x41, 0xb0, 0xa4, 0x1f, 0x32, 0xab, 0x41, 0x88, 0x10, 0xbb, 0x7a, + 0x87, 0x45, 0x58, 0x73, 0xbf, 0x55, 0xfd, 0xe5, 0xa0, 0xf3, 0x00, 0xde, 0x2b, 0xbf, 0x92, 0x4e, + 0x04, 0x29, 0xe9, 0xa4, 0x98, 0x92, 0x7e, 0x8b, 0xf0, 0xd1, 0xba, 0xde, 0x64, 0x1f, 0x5c, 0x3c, + 0xc4, 0x0e, 0x55, 0xf5, 0xaf, 0x3d, 0x7e, 0xb9, 0x78, 0x7d, 0xaa, 0x3b, 0x1e, 0xf2, 0x87, 0x86, + 0x32, 0x3f, 0xf6, 0xeb, 0x03, 0xa9, 0x4b, 0x1f, 0x1c, 0x60, 0x3e, 0x7c, 0x33, 0x1c, 0xa5, 0x55, + 0xe4, 0x5d, 0xb2, 0xe8, 0x35, 0x9b, 0xdd, 0xc9, 0xe8, 0xc3, 0x03, 0x08, 0x41, 0xbf, 0x60, 0xcd, + 0x61, 0x4a, 0x2e, 0xda, 0x64, 0x37, 0xaa, 0x80, 0x1c, 0x5e, 0x8c, 0xe7, 0xaf, 0xa5, 0xe8, 0x6c, + 0x77, 0x8d, 0x44, 0x26, 0x44, 0x7f, 0x9e, 0x1a, 0xc6, 0x88, 0xf0, 0x20, 0xa4, 0x2c, 0xe7, 0x3a, + 0xe0, 0xde, 0x86, 0x09, 0xaf, 0x4a, 0x2f, 0xa6, 0x21, 0xbe, 0x64, 0x2d, 0x1d, 0x51, 0xc9, 0x97, + 0xca, 0x49, 0x38, 0xba, 0xa1, 0xd5, 0x2f, 0x6c, 0x99, 0xc6, 0x6e, 0xab, 0x91, 0x37, 0x9a, 0x86, + 0x49, 0x8d, 0x4e, 0x24, 0x7e, 0x23, 0xff, 0x42, 0x39, 0xed, 0x4c, 0x1d, 0xd2, 0xfd, 0xa6, 0x0e, + 0x4b, 0x47, 0xd8, 0xe4, 0x41, 0xb9, 0xc3, 0x55, 0x3a, 0x99, 0x50, 0xa5, 0xb3, 0x74, 0xc4, 0x51, + 0x3b, 0x4a, 0x01, 0xc6, 0x1a, 0xfa, 0x1e, 0xd9, 0x47, 0x26, 0x06, 0xff, 0x7e, 0x47, 0x75, 0x0a, + 0xfa, 0x1e, 0xdd, 0x75, 0x5e, 0x3a, 0xa2, 0xba, 0x5f, 0x2a, 0x8b, 0x30, 0x4e, 0x6c, 0xf6, 0xa4, + 0x98, 0xb1, 0x48, 0xc7, 0x70, 0x96, 0x8e, 0xa8, 0xde, 0xb7, 0xf6, 0xec, 0x23, 0x45, 0x1c, 0xdc, + 0x1f, 0x70, 0xf6, 0xc2, 0x13, 0x91, 0xf6, 0xc2, 0x6d, 0x5e, 0xd0, 0xdd, 0xf0, 0xe3, 0x90, 0xae, + 0x13, 0x0e, 0x27, 0x19, 0x87, 0xe9, 0xa3, 0x72, 0x2f, 0xa4, 0x76, 0x34, 0xd3, 0x59, 0x02, 0xdf, + 0xd8, 0xbf, 0xdc, 0x15, 0xcd, 0xbc, 0x60, 0x23, 0x68, 0x7f, 0x35, 0x9f, 0x85, 0x34, 0x61, 0x9c, + 0xfb, 0x07, 0x3d, 0xcb, 0xa6, 0x21, 0x79, 0xa3, 0x65, 0x0f, 0xfb, 0x35, 0xc3, 0x39, 0x05, 0x50, + 0x1f, 0x86, 0xcc, 0xf1, 0x1e, 0xaf, 0xd2, 0x3e, 0x8f, 0xd7, 0x3f, 0x1b, 0x60, 0x6e, 0xd1, 0x4d, + 0x69, 0xf0, 0x12, 0xb9, 0xc9, 0x5d, 0x9d, 0xef, 0x3c, 0x46, 0xd4, 0x1a, 0x51, 0x67, 0x1d, 0x7d, + 0xc8, 0x8b, 0x5f, 0x79, 0xbc, 0x35, 0x05, 0x33, 0x36, 0x21, 0xd4, 0x17, 0x9c, 0x0f, 0x6b, 0x8a, + 0x3e, 0x36, 0x94, 0xc9, 0x65, 0x8f, 0x11, 0x41, 0xea, 0x39, 0x22, 0xec, 0x3b, 0x09, 0x94, 0xea, + 0x73, 0x12, 0x28, 0x1d, 0xcd, 0x40, 0xf7, 0x87, 0x7e, 0xf9, 0x59, 0xe5, 0xe5, 0xe7, 0xee, 0x00, + 0x80, 0x7a, 0xf1, 0x65, 0x28, 0x13, 0x90, 0xdf, 0x73, 0x25, 0xa5, 0xca, 0x49, 0xca, 0x03, 0x83, + 0x13, 0x12, 0xbf, 0xb4, 0xbc, 0x3f, 0x05, 0x2f, 0xf2, 0x88, 0x29, 0xe3, 0x8b, 0x4c, 0x50, 0x3e, + 0x33, 0x14, 0x41, 0xb9, 0xc3, 0xbb, 0x30, 0xa8, 0xcf, 0x62, 0xdf, 0xc9, 0x17, 0xb7, 0xc4, 0xfc, + 0xa9, 0xf0, 0x09, 0x86, 0x6e, 0xa0, 0x5c, 0xde, 0x04, 0x08, 0xcb, 0x71, 0xc8, 0x50, 0x0d, 0xe3, + 0x5c, 0x77, 0x4e, 0x9f, 0x22, 0xaa, 0x1b, 0xb1, 0x73, 0x0f, 0xa2, 0xb4, 0x8d, 0x40, 0x7e, 0x98, + 0xe1, 0xa1, 0xb6, 0x6b, 0xb6, 0x4a, 0x2d, 0xcb, 0x40, 0x3f, 0x3a, 0x14, 0xc1, 0x71, 0x7d, 0xc9, + 0xa4, 0x41, 0x7c, 0xc9, 0x06, 0x32, 0x43, 0x38, 0x2d, 0x38, 0x14, 0x33, 0x44, 0x40, 0xe5, 0xf1, + 0xe3, 0xf7, 0x0e, 0x09, 0x8e, 0xb3, 0xd5, 0xd0, 0x3c, 0x3f, 0x85, 0x43, 0x0f, 0x0f, 0x03, 0xc8, + 0x63, 0xce, 0x3c, 0x86, 0xdd, 0x72, 0x4c, 0x1e, 0xf8, 0x33, 0x06, 0xa1, 0x51, 0x39, 0xb9, 0xf5, + 0x5a, 0x17, 0x85, 0x43, 0x41, 0x4a, 0x2c, 0x18, 0x67, 0x04, 0x32, 0xe2, 0xc7, 0xec, 0xe7, 0x24, + 0xc8, 0xb0, 0x5b, 0x07, 0xd6, 0x62, 0x71, 0x40, 0xe0, 0x23, 0x30, 0x09, 0x6c, 0x7c, 0x45, 0x0e, + 0xf7, 0x1f, 0xdf, 0x96, 0xd7, 0xe1, 0xc4, 0xf3, 0x47, 0x4f, 0x4a, 0xcc, 0xb2, 0xb2, 0xac, 0x59, + 0xf8, 0x12, 0xfa, 0x29, 0x09, 0xb2, 0x55, 0x6c, 0xd9, 0x9a, 0x49, 0x1c, 0xa3, 0x60, 0x9b, 0xb9, + 0xe2, 0x5b, 0xbb, 0x8d, 0xd3, 0xd5, 0x58, 0x54, 0x1d, 0x47, 0xe8, 0x9a, 0x63, 0x34, 0x8d, 0x5a, + 0xc7, 0x85, 0x55, 0x3e, 0x82, 0xf3, 0xce, 0xd7, 0xc3, 0x38, 0x21, 0x83, 0xc0, 0xf1, 0x11, 0x1f, + 0x34, 0xbf, 0x98, 0x88, 0x05, 0x1b, 0x7b, 0xf8, 0x22, 0xa1, 0xf9, 0xc9, 0xec, 0x65, 0x42, 0x64, + 0xf8, 0xb2, 0x97, 0x69, 0x1d, 0x95, 0x7e, 0x15, 0xe1, 0xae, 0x26, 0xb7, 0x59, 0x43, 0x45, 0x56, + 0xec, 0x12, 0x8d, 0x7e, 0x75, 0x8f, 0xe0, 0x0a, 0x16, 0x09, 0xc6, 0xaa, 0xf6, 0x72, 0xc3, 0x1e, + 0x53, 0xce, 0x1f, 0x1c, 0xca, 0xde, 0x83, 0x55, 0xc4, 0x8e, 0xe6, 0x70, 0x64, 0x78, 0x43, 0x54, + 0x84, 0x8e, 0x16, 0x56, 0x79, 0xfc, 0x78, 0xbc, 0x93, 0xe2, 0x41, 0x64, 0x19, 0xbd, 0x59, 0x02, + 0x69, 0x11, 0x5b, 0x43, 0x3a, 0x39, 0x22, 0x7a, 0x0a, 0x81, 0x1f, 0xba, 0x42, 0x83, 0x05, 0x70, + 0x0c, 0x23, 0x34, 0xcf, 0x2d, 0xe2, 0xe1, 0x74, 0x20, 0xb1, 0x28, 0x01, 0x42, 0x04, 0xc4, 0x8f, + 0xda, 0x7b, 0x28, 0x6a, 0xd4, 0x82, 0xf5, 0x23, 0x43, 0xd0, 0x88, 0xa3, 0x9d, 0xbc, 0x3b, 0x0c, + 0x24, 0x65, 0x1c, 0x56, 0x7f, 0xeb, 0x55, 0xf9, 0x48, 0x7c, 0x0c, 0xc1, 0xee, 0xec, 0xdb, 0xb8, + 0x7e, 0x01, 0x37, 0xd0, 0xbf, 0x3a, 0x38, 0x74, 0x33, 0x90, 0xad, 0xd3, 0xd2, 0x08, 0x78, 0x63, + 0xaa, 0xf3, 0x18, 0xe1, 0xa6, 0x74, 0x5e, 0x11, 0xd1, 0xcf, 0x47, 0x78, 0x53, 0xba, 0x40, 0xf5, + 0xf1, 0x23, 0xf3, 0xbb, 0x74, 0x92, 0x51, 0xaa, 0x1b, 0x2d, 0xf4, 0xef, 0x0e, 0x0e, 0xcb, 0xd5, + 0x30, 0xae, 0xd7, 0x8d, 0x56, 0x69, 0x47, 0xdb, 0x72, 0xcc, 0xa8, 0x5e, 0x82, 0xf3, 0xb6, 0xb8, + 0x63, 0x3c, 0xa2, 0xb3, 0xad, 0x19, 0x2f, 0x61, 0xd0, 0xc9, 0x84, 0x4d, 0xfa, 0x61, 0x4d, 0x26, + 0x7a, 0xd4, 0x1d, 0x3f, 0x64, 0x1f, 0xf6, 0x5c, 0x28, 0xa8, 0x2a, 0x7c, 0x41, 0x58, 0x32, 0x06, + 0x19, 0xce, 0xfc, 0xad, 0x38, 0x94, 0xe1, 0x2c, 0x84, 0x80, 0xf8, 0x71, 0xfc, 0x55, 0x0f, 0xc7, + 0xd8, 0xed, 0x18, 0x07, 0x40, 0x67, 0x78, 0xd3, 0xc3, 0x01, 0xd1, 0x39, 0x9c, 0x29, 0xe2, 0x33, + 0x2c, 0xd8, 0x14, 0x9b, 0xf1, 0xa0, 0x1f, 0x1e, 0x06, 0x38, 0x77, 0x0f, 0xb2, 0x29, 0x46, 0xb7, + 0xc4, 0x22, 0xdc, 0xc5, 0xb3, 0x8f, 0x83, 0x76, 0x29, 0x43, 0x41, 0x50, 0xec, 0x2e, 0x1e, 0x91, + 0xfa, 0xe3, 0x07, 0xf0, 0xa7, 0x25, 0x98, 0x26, 0xfb, 0x5c, 0x4d, 0xac, 0x99, 0x54, 0x51, 0x0e, + 0xc5, 0x1b, 0xf3, 0x9d, 0xc2, 0x61, 0xf2, 0x79, 0x3e, 0x78, 0x74, 0x0c, 0x05, 0x0a, 0xb1, 0xfb, + 0x5d, 0x05, 0x49, 0x18, 0x89, 0x29, 0x50, 0x76, 0x49, 0x60, 0x22, 0x3e, 0x1c, 0x3c, 0x22, 0xba, + 0x7d, 0xf1, 0xcc, 0x70, 0x3a, 0xdb, 0x88, 0xdd, 0xbe, 0x44, 0x88, 0x18, 0x41, 0x30, 0xf6, 0xdb, + 0x99, 0x29, 0xb0, 0x46, 0xae, 0xaa, 0x7a, 0x2a, 0xe5, 0x1e, 0x7e, 0xf8, 0xe4, 0x50, 0xdc, 0x7c, + 0x0e, 0x10, 0x39, 0x51, 0x81, 0x94, 0x69, 0x5c, 0xa4, 0x66, 0xa9, 0x29, 0x95, 0xfc, 0x27, 0x53, + 0x7e, 0xa3, 0xb9, 0xbb, 0xd3, 0xea, 0x90, 0xb9, 0xe3, 0x94, 0xea, 0x3c, 0x2a, 0xd7, 0xc3, 0xd4, + 0x45, 0xdd, 0xda, 0x5e, 0xc2, 0x5a, 0x03, 0x9b, 0xaa, 0x71, 0x91, 0x5d, 0x0f, 0xcb, 0x27, 0xf2, + 0x7b, 0xb0, 0x02, 0xf3, 0x4b, 0x72, 0x7f, 0xd5, 0x48, 0x4e, 0x4a, 0x44, 0x99, 0x79, 0x06, 0x53, + 0x15, 0xbf, 0xc0, 0xbc, 0x57, 0x82, 0x71, 0xd5, 0xb8, 0xc8, 0x84, 0xe4, 0xdf, 0x1f, 0xae, 0x8c, + 0x44, 0x5e, 0xe8, 0xd1, 0xfb, 0xc8, 0x1c, 0xf2, 0x47, 0xbe, 0xd0, 0x0b, 0xad, 0x7e, 0x24, 0xee, + 0xf1, 0x93, 0xaa, 0x71, 0xb1, 0x8a, 0x2d, 0xda, 0x23, 0xd0, 0xfa, 0x90, 0x3c, 0xf9, 0xf4, 0x0e, + 0x2d, 0x90, 0xad, 0xc3, 0xdd, 0x67, 0xf4, 0x0e, 0xe1, 0x6b, 0x9e, 0x78, 0x06, 0xb9, 0x24, 0x0e, + 0x05, 0xa2, 0xb7, 0x0a, 0xdd, 0xee, 0x24, 0x46, 0x41, 0xfc, 0x28, 0xfd, 0xb8, 0x04, 0x13, 0xaa, + 0x71, 0xd1, 0x1e, 0x1a, 0x16, 0xf4, 0x66, 0x73, 0x38, 0x23, 0x64, 0xd4, 0xc9, 0xbf, 0xc3, 0x06, + 0x87, 0x8a, 0x91, 0x4f, 0xfe, 0xfb, 0x10, 0x10, 0x3f, 0x0c, 0x8f, 0xd3, 0xce, 0xe2, 0x8c, 0xd0, + 0xad, 0xe1, 0xe0, 0x30, 0x68, 0x87, 0x70, 0xc9, 0x38, 0xb4, 0x0e, 0x11, 0x44, 0xc1, 0x48, 0x76, + 0x4e, 0xa6, 0xf3, 0x64, 0x98, 0x1f, 0x6e, 0x9f, 0x78, 0x57, 0x34, 0xf7, 0x1a, 0x36, 0xec, 0x72, + 0x84, 0x0c, 0x05, 0x8d, 0x08, 0x6e, 0x34, 0x02, 0x34, 0xc4, 0x8f, 0xc7, 0x1f, 0x49, 0x30, 0x49, + 0x49, 0x78, 0x81, 0xcc, 0x02, 0x06, 0xea, 0x54, 0xfe, 0x16, 0x1c, 0x4e, 0xa7, 0x0a, 0xa1, 0x20, + 0x7e, 0x10, 0xff, 0x39, 0x49, 0xe6, 0x71, 0x03, 0x9c, 0x51, 0x0c, 0x42, 0x70, 0xe0, 0xc9, 0xd8, + 0x10, 0xcf, 0x29, 0x0e, 0x32, 0x19, 0x3b, 0xa4, 0xb3, 0x8a, 0x8f, 0xbb, 0xbd, 0x68, 0x98, 0x18, + 0x1c, 0xa0, 0x2b, 0x0c, 0x11, 0x86, 0x01, 0xbb, 0xc2, 0x21, 0x21, 0xf1, 0x57, 0x12, 0x00, 0x25, + 0x60, 0xc5, 0xd8, 0xc3, 0xe8, 0xe9, 0xa1, 0x2c, 0x7c, 0xbb, 0x5d, 0x43, 0xa5, 0x3e, 0xae, 0xa1, + 0x11, 0x4f, 0xfb, 0x47, 0xb5, 0x04, 0xfa, 0xb8, 0xbc, 0x12, 0x78, 0xcd, 0x66, 0x8c, 0x96, 0xc0, + 0xf0, 0xfa, 0xe3, 0xc7, 0xf8, 0x8b, 0x74, 0x36, 0xe7, 0x9d, 0x62, 0xfa, 0xe5, 0xa1, 0xa0, 0xec, + 0x5b, 0xfd, 0x4b, 0xfc, 0xea, 0xff, 0x00, 0xd8, 0x0e, 0x3a, 0x47, 0xec, 0x77, 0x3a, 0x29, 0xfe, + 0x39, 0xe2, 0xe1, 0x9d, 0x42, 0xfa, 0x91, 0x14, 0x1c, 0x65, 0x4a, 0xe4, 0xbb, 0x01, 0xe2, 0x88, + 0x67, 0x49, 0x38, 0x25, 0xd9, 0x07, 0xe5, 0x61, 0x19, 0xa4, 0xa2, 0x98, 0x32, 0x05, 0xc8, 0x1b, + 0x89, 0x75, 0x23, 0x53, 0xbc, 0xd4, 0xd6, 0x5a, 0x0d, 0xf1, 0x80, 0x8f, 0x7d, 0x80, 0x77, 0x6c, + 0x8d, 0x12, 0x6f, 0x6b, 0xec, 0x61, 0x99, 0x8c, 0xbc, 0x73, 0x4d, 0x58, 0x46, 0xc9, 0x1d, 0xf9, + 0xce, 0x75, 0x70, 0xdd, 0xf1, 0xa3, 0xf4, 0x2e, 0x09, 0x52, 0x55, 0xc3, 0xb4, 0xd0, 0x13, 0x51, + 0x7a, 0x27, 0xe5, 0xbc, 0x07, 0x92, 0xf3, 0xac, 0xe4, 0xb9, 0xab, 0xaf, 0x4e, 0x85, 0x9f, 0xa7, + 0xd3, 0x2c, 0x8d, 0x84, 0x03, 0xb7, 0xeb, 0xf7, 0xdd, 0x81, 0x15, 0x35, 0x68, 0x03, 0xe5, 0x5f, + 0x35, 0xd8, 0x89, 0x38, 0xb6, 0xa0, 0x0d, 0x81, 0x35, 0x8f, 0xc0, 0xee, 0x3b, 0xc1, 0xfc, 0x52, + 0xc9, 0x8d, 0x80, 0x4f, 0x50, 0x97, 0x91, 0xb2, 0xb6, 0x83, 0x87, 0xe4, 0x32, 0x4c, 0x62, 0x0e, + 0x4a, 0x5e, 0xcc, 0xc1, 0xa8, 0x1d, 0x8a, 0x9e, 0x72, 0xa4, 0x24, 0x8d, 0xba, 0x43, 0x85, 0xd4, + 0x1d, 0x3f, 0x30, 0x9f, 0xb7, 0x47, 0x3e, 0xb2, 0x86, 0xcc, 0xb5, 0x1a, 0x2c, 0x88, 0xdb, 0xdf, + 0x1d, 0xf6, 0xde, 0xcd, 0xbe, 0x30, 0x6f, 0x7c, 0xb8, 0xc8, 0x74, 0xf7, 0x0d, 0x76, 0xf3, 0x34, + 0x64, 0x1c, 0x39, 0x79, 0x99, 0x89, 0x74, 0x8b, 0x9d, 0xfb, 0x1d, 0x7a, 0x36, 0x9a, 0x39, 0x87, + 0x14, 0xd1, 0xc5, 0xb8, 0x98, 0x87, 0xd4, 0x08, 0x86, 0x1e, 0x01, 0xea, 0xfe, 0x65, 0x78, 0x19, + 0xed, 0xbf, 0x44, 0x30, 0xa2, 0x29, 0xdb, 0xbd, 0xfa, 0xf1, 0xb0, 0xbc, 0x8c, 0xfa, 0x11, 0x30, + 0x82, 0x10, 0x67, 0x69, 0xb6, 0xc9, 0x4b, 0x5c, 0xf0, 0xd0, 0x17, 0x92, 0xb1, 0x2b, 0x6f, 0xf1, + 0x6b, 0x73, 0x3d, 0xba, 0xc2, 0xb5, 0x77, 0x14, 0x47, 0xd7, 0xb0, 0xe2, 0x46, 0x60, 0x4e, 0x48, + 0x12, 0x17, 0xe5, 0xf3, 0x7a, 0xc3, 0xda, 0x1e, 0x92, 0xa3, 0xff, 0x45, 0xbb, 0x2c, 0xe7, 0xfe, + 0x39, 0xf2, 0x80, 0x9e, 0x4f, 0x44, 0x0a, 0x5f, 0xe1, 0xb2, 0x84, 0x90, 0x15, 0xc0, 0xe2, 0x08, + 0x41, 0x27, 0x42, 0xcb, 0x1b, 0xa1, 0x44, 0x9f, 0xd3, 0x1b, 0xd8, 0x78, 0x01, 0x4a, 0x34, 0xa1, + 0x6b, 0x78, 0x12, 0x1d, 0x56, 0xdc, 0xbf, 0x50, 0x89, 0x76, 0x59, 0x32, 0x24, 0x89, 0x0e, 0x2d, + 0x6f, 0x04, 0xb1, 0xd1, 0x81, 0xcd, 0xaf, 0x97, 0xf5, 0xd6, 0x05, 0xf4, 0xd1, 0xb4, 0x73, 0xf3, + 0xdd, 0x79, 0xdd, 0xda, 0x66, 0xc7, 0xdc, 0x3f, 0x2c, 0x7c, 0x47, 0xc6, 0x00, 0x47, 0xd9, 0x4f, + 0x00, 0x58, 0xec, 0x46, 0x2a, 0x37, 0x66, 0x8e, 0x2f, 0x45, 0xc9, 0xc1, 0x94, 0xde, 0xb2, 0xb0, + 0xd9, 0xd2, 0x9a, 0x0b, 0x4d, 0x6d, 0xab, 0x33, 0x93, 0x25, 0x47, 0x33, 0xaf, 0xea, 0x1a, 0xbc, + 0x4b, 0xbe, 0x3c, 0x2a, 0xff, 0x85, 0xf0, 0x5c, 0x33, 0x62, 0xc8, 0x9f, 0x53, 0x82, 0x91, 0x58, + 0xdc, 0xf0, 0x4f, 0xdf, 0x88, 0x66, 0x7c, 0xb1, 0x01, 0x99, 0xeb, 0x06, 0x23, 0xf2, 0x4c, 0xd1, + 0xdf, 0x78, 0xa9, 0xab, 0xf1, 0xee, 0xd4, 0x23, 0x35, 0x64, 0xc3, 0x8c, 0x08, 0xe9, 0x23, 0x38, + 0xf9, 0x91, 0x86, 0x2b, 0x9c, 0xf0, 0x75, 0xed, 0x36, 0xd6, 0x4c, 0xad, 0x55, 0xc7, 0x11, 0xa4, + 0x39, 0x6c, 0x2e, 0xb9, 0x00, 0x63, 0x7a, 0xdd, 0x68, 0x55, 0xf5, 0x57, 0x39, 0x57, 0xb9, 0x84, + 0xc7, 0x3e, 0x25, 0x1c, 0x29, 0xb1, 0x2f, 0x54, 0xf7, 0x5b, 0xa5, 0x04, 0xe3, 0x75, 0xcd, 0x6c, + 0x54, 0x7d, 0x97, 0x5b, 0xdf, 0xd2, 0xbf, 0xa0, 0xbc, 0xf3, 0x89, 0xea, 0x7d, 0xad, 0x54, 0x78, + 0x26, 0x66, 0xba, 0x4e, 0xff, 0x06, 0x16, 0x56, 0xf0, 0x3e, 0xe2, 0x78, 0x6e, 0x73, 0xc7, 0xc4, + 0x4d, 0x72, 0x73, 0x26, 0xed, 0x76, 0xe3, 0xaa, 0x97, 0x80, 0xde, 0xeb, 0x97, 0xe6, 0x15, 0x5e, + 0x9a, 0x5f, 0x19, 0x20, 0x12, 0xfb, 0xd0, 0x18, 0xca, 0x9c, 0xf8, 0xed, 0xae, 0x60, 0xae, 0x72, + 0x82, 0x79, 0xef, 0x80, 0x54, 0xc4, 0x2f, 0x99, 0xbf, 0x97, 0x81, 0x29, 0x7a, 0x98, 0x9c, 0xb1, + 0x13, 0xfd, 0x34, 0xb9, 0xac, 0xcd, 0x3a, 0x8b, 0x2f, 0xa3, 0xea, 0xc1, 0x07, 0x3a, 0x19, 0xa4, + 0x0b, 0xf8, 0x32, 0xeb, 0xef, 0xf6, 0xdf, 0xa8, 0x7b, 0xa4, 0x0e, 0x5d, 0x73, 0x94, 0xa6, 0x51, + 0xef, 0x91, 0x86, 0x57, 0x1f, 0x3f, 0x3e, 0x3f, 0x2f, 0x81, 0x94, 0x6b, 0x34, 0xc4, 0xe3, 0x3b, + 0x05, 0x43, 0x71, 0x2d, 0x4c, 0x38, 0x7d, 0xe6, 0xac, 0x0b, 0x89, 0x3f, 0x29, 0xaa, 0xc1, 0xc9, + 0xe5, 0x4d, 0xae, 0x31, 0x72, 0x0b, 0x6e, 0x48, 0xdd, 0xf1, 0x83, 0xf2, 0xcb, 0x59, 0xd6, 0x69, + 0xe6, 0x0d, 0xe3, 0x02, 0x39, 0x96, 0xf0, 0x84, 0x04, 0xe9, 0x05, 0x6c, 0xd5, 0xb7, 0x87, 0xd4, + 0x67, 0x76, 0xcd, 0xa6, 0xd3, 0x67, 0xf6, 0xdd, 0x3c, 0xd9, 0x7f, 0x62, 0xe8, 0x90, 0x35, 0x47, + 0x48, 0x1a, 0x75, 0xb8, 0xc6, 0xd0, 0xda, 0xe3, 0x07, 0xe7, 0x79, 0x09, 0xa6, 0x5d, 0xb3, 0x11, + 0xc5, 0xe4, 0x67, 0x5f, 0x70, 0xc6, 0x40, 0xf4, 0x99, 0x68, 0x21, 0x55, 0x5c, 0x9e, 0xf2, 0x2d, + 0x8b, 0xd9, 0x5a, 0x17, 0x21, 0xd8, 0x8a, 0x18, 0x81, 0x23, 0x58, 0x16, 0x4b, 0x30, 0x46, 0x08, + 0x2a, 0xe8, 0x7b, 0xc4, 0x4d, 0x8b, 0xb3, 0xde, 0x3d, 0x3a, 0x14, 0xeb, 0xdd, 0xbd, 0xbc, 0xf5, + 0x4e, 0x30, 0x84, 0xa1, 0x63, 0xbc, 0x8b, 0xe8, 0xb7, 0x60, 0x7f, 0x3f, 0x74, 0xdb, 0x5d, 0x04, + 0xbf, 0x85, 0x3e, 0xf5, 0x8f, 0xe0, 0x8a, 0xde, 0x93, 0x4c, 0xd9, 0x3a, 0x9b, 0x57, 0xe8, 0x51, + 0x05, 0x52, 0xe7, 0xec, 0x3f, 0x5f, 0xf0, 0x2e, 0xaa, 0x78, 0x74, 0x08, 0x07, 0xe1, 0xef, 0x87, + 0x14, 0xb9, 0x8c, 0x37, 0xd5, 0x15, 0x72, 0x33, 0x74, 0x27, 0xcd, 0x26, 0x44, 0x25, 0xdf, 0x45, + 0x0d, 0x56, 0xc6, 0x15, 0x31, 0x37, 0x3c, 0x37, 0x3c, 0xe5, 0x38, 0x64, 0xec, 0x72, 0xdd, 0x65, + 0x16, 0x7b, 0x8a, 0x62, 0x7c, 0x17, 0xa0, 0x2d, 0x7e, 0xe4, 0xbf, 0x40, 0xee, 0xe4, 0x21, 0x31, + 0x55, 0x9f, 0x1c, 0x02, 0xbc, 0x01, 0x6c, 0x39, 0x30, 0xec, 0xef, 0x3a, 0x08, 0xec, 0x6e, 0x00, + 0xd7, 0x91, 0x3a, 0xd1, 0x0a, 0xd0, 0x30, 0x92, 0x93, 0xbf, 0x19, 0xe6, 0xf8, 0xf7, 0xf0, 0x30, + 0xd1, 0x4d, 0x71, 0x42, 0x7f, 0x20, 0x74, 0x86, 0xe8, 0x10, 0x38, 0x30, 0x3a, 0x87, 0xe4, 0x12, + 0xf8, 0xc7, 0x12, 0x4c, 0x54, 0xbd, 0x0b, 0xe4, 0xc4, 0x6f, 0x28, 0x88, 0x0c, 0x91, 0x3d, 0xd6, + 0x72, 0xf1, 0x21, 0xa7, 0x06, 0x0f, 0x19, 0xca, 0xb3, 0xce, 0x47, 0xff, 0xa8, 0x43, 0x86, 0x8a, + 0x12, 0x12, 0x3f, 0x90, 0x9f, 0xa2, 0x37, 0x82, 0xe4, 0xea, 0x96, 0xbe, 0x87, 0xd1, 0xe3, 0x31, + 0x2a, 0xd2, 0xe3, 0x90, 0x31, 0x36, 0x37, 0x3b, 0xec, 0x66, 0xc1, 0x29, 0x95, 0x3d, 0x79, 0x57, + 0xba, 0x53, 0x70, 0xd9, 0x95, 0xee, 0x11, 0x83, 0x0a, 0xee, 0x63, 0x28, 0x6d, 0xd0, 0xa8, 0x83, + 0x0a, 0x8a, 0x91, 0x31, 0x82, 0xb0, 0xc1, 0x60, 0x73, 0x8f, 0x99, 0x6c, 0xde, 0xcc, 0x8c, 0x04, + 0xf8, 0xe0, 0xd8, 0xce, 0xc2, 0xa4, 0xcf, 0x22, 0xe0, 0x04, 0xa6, 0xe7, 0xd2, 0xa2, 0x9e, 0x35, + 0x76, 0x59, 0x36, 0x74, 0x7b, 0x41, 0x04, 0x3b, 0xb0, 0x08, 0x11, 0x23, 0xb9, 0xf7, 0xc5, 0x19, + 0xf2, 0x46, 0x84, 0xd5, 0xfb, 0xfd, 0x58, 0x55, 0x78, 0xac, 0xce, 0x88, 0xb0, 0x49, 0x6c, 0x08, + 0x14, 0x5a, 0x4e, 0xbe, 0xc3, 0x85, 0x4b, 0xe5, 0xe0, 0xba, 0x7f, 0x60, 0x3a, 0xe2, 0x47, 0xec, + 0x83, 0x12, 0xbd, 0xfc, 0x21, 0xb7, 0xa7, 0xe9, 0x4d, 0x72, 0x40, 0x7c, 0x08, 0x57, 0x10, 0xfe, + 0xad, 0x1f, 0x94, 0x73, 0x3c, 0x28, 0x0f, 0x8a, 0x30, 0x83, 0xa3, 0x28, 0x00, 0x9b, 0x97, 0xfb, + 0x6d, 0xe6, 0x34, 0x8a, 0xe8, 0x95, 0xdd, 0x91, 0xd8, 0xd8, 0x7b, 0xbf, 0x31, 0xfd, 0x93, 0x2e, + 0x48, 0x0f, 0x73, 0x20, 0x15, 0x0f, 0x4a, 0x57, 0x34, 0xac, 0x96, 0xa3, 0x63, 0xa5, 0xcc, 0xc0, + 0xb1, 0x72, 0xa5, 0xb6, 0x9e, 0x5b, 0x2f, 0xe4, 0x6a, 0xb9, 0x73, 0xa5, 0xe2, 0xf9, 0xf5, 0xf9, + 0xe5, 0x4a, 0xfe, 0xac, 0x2c, 0xa1, 0x5f, 0xa1, 0x63, 0x60, 0xd5, 0xd8, 0x35, 0xeb, 0xc3, 0x9a, + 0x6d, 0x76, 0x48, 0x61, 0xac, 0xd3, 0xb1, 0xa7, 0xa8, 0x8e, 0xeb, 0x9e, 0x3f, 0xa6, 0x43, 0x5c, + 0xbf, 0x8e, 0x96, 0x1a, 0xb2, 0xe3, 0x7a, 0x5f, 0x0a, 0xe2, 0xef, 0x62, 0xdf, 0x92, 0x00, 0x16, + 0x4d, 0x63, 0xb7, 0x5d, 0x31, 0x1b, 0xd8, 0x44, 0xcf, 0x79, 0xab, 0xbe, 0x5f, 0x18, 0xc2, 0x64, + 0x65, 0x15, 0x60, 0xcb, 0x2d, 0x9c, 0xe9, 0xa9, 0xdb, 0xc5, 0xd6, 0x78, 0x1e, 0x51, 0xaa, 0xaf, + 0x0c, 0xfe, 0x82, 0xc0, 0xef, 0xe3, 0x31, 0x0e, 0x1b, 0x79, 0xbc, 0xe2, 0x86, 0xb9, 0xea, 0x7b, + 0xa7, 0x8b, 0x75, 0x8d, 0xc3, 0xfa, 0xc1, 0x03, 0x50, 0x12, 0x3f, 0xe6, 0xdf, 0x96, 0x60, 0x82, + 0xee, 0xc5, 0x52, 0x9e, 0xfe, 0x8d, 0x07, 0xfa, 0x2f, 0x0f, 0x01, 0xf4, 0x35, 0x98, 0x34, 0xbc, + 0xd2, 0xe9, 0xc8, 0xe8, 0xb7, 0xae, 0x85, 0xc2, 0xee, 0xa3, 0x4b, 0xe5, 0x8a, 0x41, 0x1f, 0xf4, + 0x23, 0xaf, 0xf2, 0xc8, 0xdf, 0x1b, 0xc2, 0x6f, 0x5f, 0x89, 0xc3, 0x84, 0xfe, 0xf7, 0x5d, 0xe8, + 0xd7, 0x38, 0xe8, 0x73, 0x07, 0x21, 0x25, 0x7e, 0xec, 0x1f, 0x73, 0x0d, 0xf4, 0xee, 0xf6, 0x49, + 0x2c, 0x9b, 0x26, 0xaf, 0x1b, 0x70, 0x81, 0xc1, 0xd3, 0x16, 0x80, 0xd4, 0x34, 0x24, 0x75, 0x87, + 0x86, 0xa4, 0xde, 0x18, 0x68, 0x09, 0x11, 0x5a, 0x51, 0xfc, 0x38, 0xfc, 0xfa, 0x4b, 0x20, 0x5d, + 0xc0, 0x1b, 0xbb, 0x5b, 0xe8, 0x2d, 0x12, 0x64, 0x9b, 0xc6, 0x56, 0xa9, 0xb5, 0x69, 0xb0, 0x86, + 0x25, 0x9c, 0x86, 0x29, 0x0a, 0xa4, 0xb6, 0xb1, 0xe6, 0x34, 0x95, 0xfc, 0x57, 0x6e, 0x84, 0x69, + 0xfb, 0xd7, 0xb9, 0xa0, 0xd8, 0x8d, 0x3e, 0xd9, 0x95, 0x6a, 0x4f, 0x50, 0x2d, 0xc3, 0xd2, 0x9a, + 0x2a, 0xae, 0x1b, 0x66, 0x83, 0x9e, 0x16, 0x49, 0xab, 0x5c, 0x9a, 0x8d, 0x37, 0x79, 0x26, 0xfe, + 0x0b, 0x69, 0x92, 0xc1, 0x4b, 0x50, 0xae, 0x87, 0xa9, 0x4d, 0xdd, 0xec, 0x58, 0x34, 0x77, 0x8d, + 0x3a, 0xb8, 0xa4, 0x55, 0x3e, 0xd1, 0xa6, 0xc7, 0x97, 0x70, 0x0e, 0x9b, 0xe4, 0x72, 0xa1, 0xb4, + 0xda, 0x95, 0x6a, 0xd3, 0xd3, 0xd4, 0x7c, 0x85, 0x8d, 0x51, 0x7a, 0xfc, 0x69, 0x76, 0x8d, 0xde, + 0xb3, 0x5d, 0xd4, 0x38, 0xad, 0x91, 0x4b, 0xb4, 0x6b, 0xb4, 0x13, 0x56, 0x77, 0x9b, 0xcd, 0x2a, + 0xae, 0xe7, 0xb6, 0x8c, 0x19, 0xa0, 0x35, 0xf2, 0xa9, 0x0a, 0x82, 0xb1, 0xdd, 0x76, 0xd5, 0xd2, + 0xac, 0xdd, 0xce, 0xcc, 0x04, 0xdd, 0x4f, 0x72, 0x9e, 0x95, 0x13, 0x00, 0x0d, 0xe3, 0x62, 0x8b, + 0xbd, 0x9d, 0xa4, 0xfe, 0x46, 0x5e, 0x8a, 0xbd, 0x6c, 0xa6, 0x22, 0x3b, 0x45, 0x63, 0xd8, 0x51, + 0x7f, 0xae, 0x4f, 0x4b, 0x00, 0xd6, 0xb6, 0x89, 0xb5, 0x46, 0x4f, 0xb8, 0x5e, 0x01, 0xc7, 0x9b, + 0xc6, 0x56, 0xe7, 0xbc, 0x6e, 0x6d, 0x7b, 0x40, 0x2c, 0x39, 0x00, 0xa6, 0xd5, 0x80, 0xb7, 0xca, + 0x83, 0x70, 0x95, 0xf3, 0xe6, 0xfc, 0xb6, 0xd1, 0xc4, 0x35, 0x13, 0xe3, 0x2e, 0x7c, 0xd3, 0x6a, + 0x58, 0x16, 0x65, 0x0e, 0x52, 0xf6, 0x6b, 0x76, 0x79, 0x3c, 0xe2, 0xe4, 0x9e, 0x88, 0xd9, 0x1c, + 0x13, 0x31, 0x95, 0xe4, 0x53, 0xee, 0x82, 0x2b, 0x8d, 0x8b, 0xad, 0x65, 0x63, 0x6b, 0x49, 0xeb, + 0xe4, 0xb5, 0x4d, 0xac, 0x62, 0x7a, 0x6c, 0xca, 0x30, 0x89, 0x18, 0x8c, 0xa9, 0x41, 0xaf, 0x95, + 0x39, 0x50, 0xea, 0xda, 0x26, 0x5e, 0xe6, 0x01, 0xa0, 0x92, 0xd1, 0xe3, 0x8d, 0x0d, 0xbb, 0x9d, + 0xba, 0xe6, 0x00, 0x91, 0xa5, 0x07, 0x51, 0xfd, 0x69, 0x36, 0xa0, 0xf6, 0x73, 0xc1, 0x03, 0x64, + 0x8c, 0xe4, 0xea, 0x4a, 0xdd, 0x27, 0xd2, 0xe3, 0xfd, 0x44, 0x1a, 0xba, 0x45, 0xda, 0x85, 0x75, + 0xc2, 0x0f, 0xeb, 0xe7, 0xd2, 0x90, 0xaa, 0x5e, 0x6e, 0xd5, 0xd1, 0x1b, 0x7d, 0xc3, 0xdf, 0x69, + 0x38, 0x66, 0xd2, 0x32, 0x6b, 0xa6, 0xb6, 0x87, 0xcd, 0x0e, 0x5e, 0x26, 0x76, 0x94, 0x04, 0x29, + 0xb3, 0xe7, 0x3b, 0x5b, 0x7e, 0x3b, 0x17, 0xf4, 0x76, 0x71, 0xa7, 0x6d, 0x5d, 0x5e, 0xb6, 0xf1, + 0x48, 0xd2, 0x28, 0x50, 0x5c, 0xa2, 0x72, 0x3f, 0x20, 0xcb, 0xbc, 0x5c, 0x33, 0x1c, 0xfc, 0x54, + 0xbc, 0x63, 0x58, 0xd8, 0x69, 0x14, 0xed, 0xcd, 0x21, 0x39, 0xd0, 0x6f, 0xa6, 0x7c, 0xba, 0xf5, + 0x5e, 0x5e, 0xb7, 0xde, 0xd8, 0x03, 0x7a, 0xbb, 0x69, 0x01, 0x9a, 0xf4, 0x95, 0x90, 0xa5, 0xf2, + 0xec, 0xac, 0x52, 0xae, 0xe9, 0xf1, 0xbd, 0x27, 0xf1, 0xaa, 0x93, 0xdb, 0xee, 0x5b, 0x0d, 0xbc, + 0xa7, 0xd7, 0xb1, 0xe7, 0x4f, 0xe6, 0x3c, 0xbb, 0x30, 0xd5, 0x58, 0xc9, 0x7e, 0xcd, 0xc3, 0xd2, + 0x08, 0x0f, 0xe8, 0x5f, 0x5b, 0xa4, 0x8d, 0x5d, 0xcb, 0x16, 0xb1, 0x52, 0xab, 0x42, 0xa4, 0x8e, + 0xa9, 0xa2, 0x90, 0x1c, 0xca, 0x3c, 0x5c, 0xcd, 0xbf, 0x5d, 0xe2, 0x75, 0x22, 0x15, 0xc8, 0xd0, + 0x3c, 0xfb, 0xc4, 0x29, 0xdb, 0x4f, 0x9c, 0xc6, 0xba, 0xc4, 0x09, 0xbd, 0xde, 0x1d, 0x78, 0x1e, + 0xe0, 0x06, 0x9e, 0x5b, 0xc4, 0x50, 0x18, 0x49, 0xb8, 0xac, 0x0c, 0x65, 0x39, 0xfa, 0x69, 0x9f, + 0x6c, 0x23, 0x18, 0x63, 0xa0, 0x3a, 0xea, 0xcb, 0x7d, 0x1e, 0x91, 0x0c, 0xff, 0x9a, 0xf0, 0xad, + 0x19, 0x94, 0x7b, 0xb4, 0x11, 0x01, 0x52, 0x7c, 0x07, 0xa4, 0xf4, 0xd6, 0xa6, 0xc1, 0x26, 0x6e, + 0x7d, 0x44, 0x98, 0x64, 0x15, 0xbc, 0x26, 0x23, 0xa4, 0xee, 0xf8, 0xb1, 0x7b, 0x8d, 0x04, 0x29, + 0x5b, 0xcd, 0xfb, 0xe3, 0x7e, 0x22, 0x18, 0xa3, 0x93, 0x62, 0x0f, 0x38, 0xe7, 0xb9, 0xe7, 0xdd, + 0x21, 0xb3, 0x30, 0xb9, 0xdb, 0xd2, 0x5a, 0x46, 0xeb, 0xf2, 0x8e, 0xfe, 0x2a, 0x77, 0xaa, 0xc0, + 0xa5, 0xd9, 0xd4, 0x6f, 0xe1, 0x16, 0x36, 0x35, 0x0b, 0x57, 0xf7, 0xb6, 0x48, 0x6f, 0x1d, 0x53, + 0xfd, 0x49, 0xe8, 0xb1, 0x64, 0x34, 0x85, 0x63, 0x53, 0x1d, 0x7c, 0x45, 0xe5, 0xa6, 0xde, 0xc4, + 0xc4, 0xbf, 0x9d, 0xf9, 0x78, 0x38, 0xcf, 0x91, 0x7a, 0x53, 0x8f, 0x2a, 0x46, 0x82, 0x88, 0x4c, + 0xef, 0x4c, 0x59, 0x36, 0xea, 0x5a, 0xb3, 0x63, 0x19, 0x26, 0x46, 0x2f, 0xf7, 0xd0, 0x71, 0x10, + 0x48, 0xf8, 0x10, 0x38, 0x0e, 0x99, 0x86, 0x51, 0xf7, 0x3c, 0x19, 0xd8, 0x13, 0xbf, 0x9c, 0x09, + 0x3d, 0x46, 0x44, 0x1b, 0xdc, 0x5d, 0x6f, 0x6c, 0x17, 0xc8, 0x88, 0x1d, 0x2d, 0x12, 0x22, 0x6a, + 0x04, 0x71, 0x15, 0x92, 0x90, 0x5a, 0xd5, 0x5b, 0x5b, 0xfe, 0x45, 0xcc, 0x31, 0x48, 0xeb, 0xad, + 0x06, 0xbe, 0xc4, 0x46, 0x6a, 0xfa, 0x60, 0x0f, 0xe7, 0xad, 0xdd, 0x9d, 0x0d, 0x6c, 0x56, 0x36, + 0x49, 0x73, 0x3b, 0x35, 0xa3, 0x8a, 0x5b, 0xce, 0xcc, 0xac, 0xe7, 0x3b, 0xf4, 0x9d, 0x44, 0x34, + 0xb9, 0xb7, 0x29, 0x09, 0xc0, 0xc5, 0x25, 0x2a, 0xe9, 0x23, 0x2a, 0x92, 0xc4, 0xf7, 0x28, 0x3c, + 0x7e, 0xfe, 0x7e, 0x34, 0x09, 0xd9, 0x15, 0x6c, 0x99, 0x7a, 0xbd, 0x83, 0x9e, 0x49, 0xc2, 0x54, + 0x15, 0x5b, 0xab, 0x9a, 0xa9, 0xed, 0x60, 0xcb, 0x5e, 0x92, 0xdf, 0xc2, 0x29, 0xa6, 0x76, 0x53, + 0xb3, 0x36, 0x0d, 0x73, 0xc7, 0x51, 0x4c, 0xce, 0xf3, 0xdd, 0xa9, 0x27, 0xbe, 0x2a, 0x25, 0x78, + 0x66, 0x86, 0xba, 0xde, 0xb0, 0x0a, 0xe7, 0xb8, 0xca, 0x02, 0x4e, 0x58, 0x88, 0x39, 0xd3, 0x88, + 0x94, 0x18, 0x3f, 0x33, 0xff, 0x50, 0x02, 0x69, 0xd9, 0xd8, 0x42, 0xef, 0x91, 0x20, 0x45, 0xe4, + 0xeb, 0xb7, 0x7c, 0x43, 0xf2, 0x0c, 0x64, 0x77, 0x70, 0xa7, 0xa3, 0x6d, 0x61, 0xe7, 0x7e, 0x69, + 0xf6, 0xa8, 0x9c, 0x81, 0x74, 0x13, 0xef, 0xe1, 0x26, 0x21, 0x63, 0xfa, 0xf4, 0x75, 0x5c, 0xcb, + 0x96, 0x8d, 0xad, 0x39, 0xbb, 0x2c, 0xf7, 0x16, 0xda, 0x65, 0x3b, 0xab, 0x4a, 0xbf, 0x98, 0x7d, + 0x08, 0xd2, 0xe4, 0x59, 0x19, 0x87, 0x74, 0xa1, 0x38, 0xbf, 0xb6, 0x28, 0x1f, 0xb1, 0xff, 0x3a, + 0xf4, 0x8d, 0x43, 0x7a, 0x21, 0x57, 0xcb, 0x2d, 0xcb, 0x49, 0xbb, 0x1d, 0xa5, 0xf2, 0x42, 0x45, + 0x96, 0xec, 0xc4, 0xd5, 0x5c, 0xb9, 0x94, 0x97, 0x53, 0xca, 0x04, 0x64, 0xcf, 0xe7, 0xd4, 0x72, + 0xa9, 0xbc, 0x28, 0xa7, 0xd1, 0xa3, 0x7e, 0x85, 0x75, 0x37, 0x8f, 0xdf, 0xf5, 0x41, 0x34, 0xf5, + 0x82, 0xec, 0x3f, 0xb9, 0x90, 0xdd, 0xc7, 0x41, 0xf6, 0xbd, 0x22, 0x85, 0x44, 0x43, 0xa9, 0x3c, + 0x80, 0x21, 0x7b, 0x0a, 0xc6, 0xcb, 0x95, 0xda, 0xfa, 0x42, 0x65, 0xad, 0x5c, 0x90, 0xb1, 0xcd, + 0x83, 0x5a, 0x69, 0xa5, 0x58, 0x59, 0xab, 0xc9, 0x9b, 0xe8, 0x8d, 0x49, 0xc8, 0xae, 0x9a, 0x46, + 0x1d, 0x77, 0x3a, 0xe8, 0xb5, 0x49, 0xc8, 0xe4, 0xb5, 0x56, 0x1d, 0x37, 0xd1, 0x4b, 0x3c, 0x18, + 0xbb, 0x96, 0x84, 0xe8, 0x5b, 0x7e, 0xa9, 0x7f, 0x90, 0xe7, 0x1a, 0x7f, 0xaf, 0x30, 0x2b, 0x77, + 0x8e, 0x96, 0x19, 0xc0, 0xbb, 0xa7, 0x5d, 0xde, 0xe5, 0x39, 0xde, 0x9d, 0x12, 0x2f, 0x2a, 0x7e, + 0x39, 0xff, 0xfb, 0x04, 0x1c, 0x5b, 0xb4, 0xa7, 0x0f, 0x7a, 0x9d, 0x12, 0xef, 0xb4, 0xff, 0x3e, + 0xbe, 0xfd, 0x37, 0x71, 0x44, 0xf7, 0xfa, 0x82, 0x6f, 0xfc, 0x53, 0x6e, 0xe3, 0x1f, 0xe4, 0x1a, + 0x7f, 0xab, 0x60, 0x39, 0xb1, 0xb7, 0x7c, 0x36, 0x0b, 0x69, 0x32, 0x45, 0x9e, 0xbd, 0x01, 0xa6, + 0xaa, 0x96, 0x89, 0xb5, 0x1d, 0xdf, 0xa0, 0x64, 0x19, 0x17, 0x70, 0x8b, 0x89, 0x06, 0x7d, 0xb8, + 0xfb, 0x0c, 0x64, 0x5b, 0xc6, 0xba, 0xb6, 0x6b, 0x6d, 0x2b, 0x2f, 0xdd, 0x77, 0x6c, 0x68, 0x85, + 0xf6, 0xff, 0x4a, 0x9b, 0xee, 0x22, 0xfd, 0xd5, 0xbd, 0x64, 0x62, 0x96, 0x69, 0x19, 0xb9, 0x5d, + 0x6b, 0x7b, 0xfe, 0xea, 0x8f, 0x3c, 0x77, 0x22, 0xf1, 0x89, 0xe7, 0x4e, 0x24, 0xbe, 0xfc, 0xdc, + 0x89, 0xc4, 0xcf, 0x7e, 0xe5, 0xc4, 0x91, 0x4f, 0x7c, 0xe5, 0xc4, 0x91, 0xcf, 0x7f, 0xe5, 0xc4, + 0x91, 0x1f, 0x48, 0xb6, 0x37, 0x36, 0x32, 0xa4, 0x94, 0x3b, 0xff, 0x5f, 0x00, 0x00, 0x00, 0xff, + 0xff, 0xaf, 0x86, 0x70, 0xda, 0xde, 0x38, 0x01, 0x00, } func (m *Rpc) Marshal() (dAtA []byte, err error) { @@ -50192,6 +50431,157 @@ func (m *RpcObjectSetBreadcrumbsResponseError) MarshalToSizedBuffer(dAtA []byte) return len(dAtA) - i, nil } +func (m *RpcObjectImportMarkdown) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RpcObjectImportMarkdown) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RpcObjectImportMarkdown) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *RpcObjectImportMarkdownRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RpcObjectImportMarkdownRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RpcObjectImportMarkdownRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.ImportPath) > 0 { + i -= len(m.ImportPath) + copy(dAtA[i:], m.ImportPath) + i = encodeVarintCommands(dAtA, i, uint64(len(m.ImportPath))) + i-- + dAtA[i] = 0x12 + } + if len(m.ContextId) > 0 { + i -= len(m.ContextId) + copy(dAtA[i:], m.ContextId) + i = encodeVarintCommands(dAtA, i, uint64(len(m.ContextId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *RpcObjectImportMarkdownResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RpcObjectImportMarkdownResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RpcObjectImportMarkdownResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Event != nil { + { + size, err := m.Event.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintCommands(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + if len(m.RootLinkIds) > 0 { + for iNdEx := len(m.RootLinkIds) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.RootLinkIds[iNdEx]) + copy(dAtA[i:], m.RootLinkIds[iNdEx]) + i = encodeVarintCommands(dAtA, i, uint64(len(m.RootLinkIds[iNdEx]))) + i-- + dAtA[i] = 0x12 + } + } + if m.Error != nil { + { + size, err := m.Error.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintCommands(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *RpcObjectImportMarkdownResponseError) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RpcObjectImportMarkdownResponseError) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RpcObjectImportMarkdownResponseError) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Description) > 0 { + i -= len(m.Description) + copy(dAtA[i:], m.Description) + i = encodeVarintCommands(dAtA, i, uint64(len(m.Description))) + i-- + dAtA[i] = 0x12 + } + if m.Code != 0 { + i = encodeVarintCommands(dAtA, i, uint64(m.Code)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + func (m *RpcObjectShareByLink) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -74606,6 +74996,71 @@ func (m *RpcObjectSetBreadcrumbsResponseError) Size() (n int) { return n } +func (m *RpcObjectImportMarkdown) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *RpcObjectImportMarkdownRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.ContextId) + if l > 0 { + n += 1 + l + sovCommands(uint64(l)) + } + l = len(m.ImportPath) + if l > 0 { + n += 1 + l + sovCommands(uint64(l)) + } + return n +} + +func (m *RpcObjectImportMarkdownResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Error != nil { + l = m.Error.Size() + n += 1 + l + sovCommands(uint64(l)) + } + if len(m.RootLinkIds) > 0 { + for _, s := range m.RootLinkIds { + l = len(s) + n += 1 + l + sovCommands(uint64(l)) + } + } + if m.Event != nil { + l = m.Event.Size() + n += 1 + l + sovCommands(uint64(l)) + } + return n +} + +func (m *RpcObjectImportMarkdownResponseError) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Code != 0 { + n += 1 + sovCommands(uint64(m.Code)) + } + l = len(m.Description) + if l > 0 { + n += 1 + l + sovCommands(uint64(l)) + } + return n +} + func (m *RpcObjectShareByLink) Size() (n int) { if m == nil { return 0 @@ -98868,6 +99323,425 @@ func (m *RpcObjectSetBreadcrumbsResponseError) Unmarshal(dAtA []byte) error { } return nil } +func (m *RpcObjectImportMarkdown) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ImportMarkdown: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ImportMarkdown: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipCommands(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthCommands + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RpcObjectImportMarkdownRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Request: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Request: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ContextId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + 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 ErrInvalidLengthCommands + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthCommands + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ContextId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ImportPath", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + 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 ErrInvalidLengthCommands + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthCommands + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ImportPath = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipCommands(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthCommands + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RpcObjectImportMarkdownResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Response: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Response: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Error", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthCommands + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthCommands + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Error == nil { + m.Error = &RpcObjectImportMarkdownResponseError{} + } + if err := m.Error.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RootLinkIds", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + 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 ErrInvalidLengthCommands + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthCommands + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.RootLinkIds = append(m.RootLinkIds, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Event", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthCommands + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthCommands + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Event == nil { + m.Event = &ResponseEvent{} + } + if err := m.Event.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipCommands(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthCommands + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RpcObjectImportMarkdownResponseError) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Error: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Error: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Code", wireType) + } + m.Code = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Code |= RpcObjectImportMarkdownResponseErrorCode(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Description", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + 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 ErrInvalidLengthCommands + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthCommands + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Description = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipCommands(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthCommands + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *RpcObjectShareByLink) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/pb/protos/commands.proto b/pb/protos/commands.proto index ca8e502c7..843ae74ca 100644 --- a/pb/protos/commands.proto +++ b/pb/protos/commands.proto @@ -1087,6 +1087,31 @@ message Rpc { } } + message ImportMarkdown { + message Request { + string contextId = 1; + string importPath = 2; + } + + message Response { + Error error = 1; + repeated string rootLinkIds = 2; + ResponseEvent event = 3; + + message Error { + Code code = 1; + string description = 2; + + enum Code { + NULL = 0; + UNKNOWN_ERROR = 1; + BAD_INPUT = 2; + // ... + } + } + } + } + message ShareByLink { message Request { string objectId = 1; diff --git a/pb/protos/service/service.proto b/pb/protos/service/service.proto index 986307c39..dad88ad35 100644 --- a/pb/protos/service/service.proto +++ b/pb/protos/service/service.proto @@ -77,6 +77,7 @@ service ClientCommands { rpc ObjectSetBreadcrumbs (anytype.Rpc.Object.SetBreadcrumbs.Request) returns (anytype.Rpc.Object.SetBreadcrumbs.Response); rpc ObjectUndo (anytype.Rpc.Object.Undo.Request) returns (anytype.Rpc.Object.Undo.Response); rpc ObjectRedo (anytype.Rpc.Object.Redo.Request) returns (anytype.Rpc.Object.Redo.Response); + rpc ObjectImportMarkdown (anytype.Rpc.Object.ImportMarkdown.Request) returns (anytype.Rpc.Object.ImportMarkdown.Response); rpc ObjectListExport (anytype.Rpc.Object.ListExport.Request) returns (anytype.Rpc.Object.ListExport.Response); rpc ObjectBookmarkFetch (anytype.Rpc.Object.BookmarkFetch.Request) returns (anytype.Rpc.Object.BookmarkFetch.Response); rpc ObjectToBookmark (anytype.Rpc.Object.ToBookmark.Request) returns (anytype.Rpc.Object.ToBookmark.Response); diff --git a/pb/service/service.pb.go b/pb/service/service.pb.go index c8c863aaf..eac8cb80e 100644 --- a/pb/service/service.pb.go +++ b/pb/service/service.pb.go @@ -26,211 +26,212 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package func init() { proto.RegisterFile("pb/protos/service/service.proto", fileDescriptor_93a29dc403579097) } var fileDescriptor_93a29dc403579097 = []byte{ - // 3260 bytes of a gzipped FileDescriptorProto + // 3279 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x9c, 0xdd, 0x6f, 0x1d, 0x47, 0xf9, 0xc7, 0x7b, 0x6e, 0x7e, 0xfd, 0xb1, 0xa5, 0x05, 0xb6, 0x10, 0x4a, 0x68, 0x9d, 0x34, 0x6d, 0xfc, 0x12, 0xc7, 0xc7, 0x6e, 0x02, 0x45, 0x70, 0x83, 0x4e, 0xec, 0x38, 0xb1, 0x1a, 0x27, 0xc1, 0xc7, 0x69, 0xa4, 0x4a, 0x48, 0xac, 0x77, 0x27, 0xc7, 0x8b, 0xf7, 0xec, 0x2c, 0xbb, 0x73, 0x8e, - 0x63, 0x10, 0x08, 0x04, 0x02, 0x81, 0x2a, 0x81, 0xc4, 0x25, 0xff, 0x10, 0x97, 0xbd, 0xe4, 0x12, - 0x35, 0x7f, 0x05, 0x77, 0x68, 0x77, 0x9f, 0x79, 0x7b, 0x76, 0x9e, 0xd9, 0x35, 0x57, 0x85, 0xf3, - 0x7c, 0x9e, 0xe7, 0x3b, 0xef, 0xf3, 0xcc, 0xcc, 0xc6, 0xc1, 0xb5, 0xe2, 0x64, 0xbb, 0x28, 0xb9, - 0xe0, 0xd5, 0x76, 0xc5, 0xca, 0x65, 0x1a, 0x33, 0xf9, 0xdf, 0x71, 0xf3, 0x73, 0xf8, 0x7a, 0x94, - 0x5f, 0x88, 0x8b, 0x82, 0x5d, 0x7d, 0x47, 0x93, 0x31, 0x9f, 0xcf, 0xa3, 0x3c, 0xa9, 0x5a, 0xe4, - 0xea, 0x15, 0x6d, 0x61, 0x4b, 0x96, 0x0b, 0xf8, 0xfd, 0xce, 0x7f, 0x3e, 0x1f, 0x05, 0x6f, 0xed, - 0x66, 0x29, 0xcb, 0xc5, 0x2e, 0x78, 0x84, 0x9f, 0x05, 0x6f, 0x4e, 0x8a, 0xe2, 0x01, 0x13, 0x9f, - 0xb2, 0xb2, 0x4a, 0x79, 0x1e, 0x7e, 0x30, 0x06, 0x81, 0xf1, 0x51, 0x11, 0x8f, 0x27, 0x45, 0x31, - 0xd6, 0xc6, 0xf1, 0x11, 0xfb, 0xc5, 0x82, 0x55, 0xe2, 0xea, 0x87, 0x7e, 0xa8, 0x2a, 0x78, 0x5e, - 0xb1, 0xf0, 0x45, 0xf0, 0x8d, 0x49, 0x51, 0x4c, 0x99, 0xd8, 0x63, 0x75, 0x05, 0xa6, 0x22, 0x12, - 0x2c, 0x5c, 0xeb, 0xb8, 0xda, 0x80, 0xd2, 0x58, 0xef, 0x07, 0x41, 0xe7, 0x38, 0x78, 0xa3, 0xd6, - 0x39, 0x5d, 0x88, 0x84, 0x9f, 0xe7, 0xe1, 0xfb, 0x5d, 0x47, 0x30, 0xa9, 0xd8, 0x37, 0x7c, 0x08, - 0x44, 0x7d, 0x1e, 0x7c, 0xf5, 0x79, 0x94, 0x65, 0x4c, 0xec, 0x96, 0xac, 0x2e, 0xb8, 0xed, 0xd3, - 0x9a, 0xc6, 0xad, 0x4d, 0xc5, 0xfd, 0xc0, 0xcb, 0x40, 0xe0, 0xcf, 0x82, 0x37, 0x5b, 0xcb, 0x11, - 0x8b, 0xf9, 0x92, 0x95, 0xa1, 0xd3, 0x0b, 0x8c, 0x44, 0x93, 0x77, 0x20, 0x1c, 0x7b, 0x97, 0xe7, - 0x4b, 0x56, 0x0a, 0x77, 0x6c, 0x30, 0xfa, 0x63, 0x6b, 0x08, 0x62, 0x67, 0xc1, 0xdb, 0x66, 0x83, - 0x4c, 0x59, 0xd5, 0x0c, 0x98, 0x0d, 0xba, 0xce, 0x80, 0x28, 0x9d, 0x5b, 0x43, 0x50, 0x50, 0x4b, - 0x83, 0x10, 0xd4, 0x32, 0x5e, 0x29, 0xb1, 0x75, 0x67, 0x04, 0x83, 0x50, 0x5a, 0x1b, 0x03, 0x48, - 0x90, 0xfa, 0x59, 0xf0, 0xb5, 0xe7, 0xbc, 0x3c, 0xab, 0x8a, 0x28, 0x66, 0xd0, 0xd9, 0x37, 0x6d, - 0x6f, 0x69, 0xc5, 0xfd, 0xbd, 0xda, 0x87, 0x81, 0xc2, 0x59, 0x10, 0x2a, 0xe3, 0x93, 0x93, 0x9f, - 0xb3, 0x58, 0x4c, 0x92, 0x04, 0xb7, 0x9c, 0xf2, 0x6e, 0x89, 0xf1, 0x24, 0x49, 0xa8, 0x96, 0x73, - 0xa3, 0x20, 0x76, 0x1e, 0x5c, 0x41, 0x62, 0x8f, 0xd2, 0xaa, 0x11, 0xdc, 0xf2, 0x47, 0x01, 0x4c, - 0x89, 0x8e, 0x87, 0xe2, 0x20, 0xfc, 0xdb, 0x51, 0xf0, 0x1d, 0x87, 0xf2, 0x11, 0x9b, 0xf3, 0x25, - 0x0b, 0x77, 0xfa, 0xa3, 0xb5, 0xa4, 0xd2, 0xff, 0xe8, 0x12, 0x1e, 0x8e, 0xae, 0x9c, 0xb2, 0x8c, - 0xc5, 0x82, 0xec, 0xca, 0xd6, 0xdc, 0xdb, 0x95, 0x0a, 0x33, 0x66, 0x81, 0x34, 0x3e, 0x60, 0x62, - 0x77, 0x51, 0x96, 0x2c, 0x17, 0x64, 0x5f, 0x6a, 0xa4, 0xb7, 0x2f, 0x2d, 0xd4, 0x51, 0x9f, 0x07, - 0x4c, 0x4c, 0xb2, 0x8c, 0xac, 0x4f, 0x6b, 0xee, 0xad, 0x8f, 0xc2, 0x40, 0xe1, 0x37, 0x46, 0x9f, - 0x4d, 0x99, 0x38, 0xa8, 0x1e, 0xa6, 0xb3, 0xd3, 0x2c, 0x9d, 0x9d, 0x0a, 0x96, 0x84, 0xdb, 0x64, - 0xa3, 0xd8, 0xa0, 0x52, 0xdd, 0x19, 0xee, 0xe0, 0xa8, 0xe1, 0xfd, 0x97, 0x05, 0x2f, 0xe9, 0x1e, - 0x6b, 0xcd, 0xbd, 0x35, 0x54, 0x18, 0x28, 0xfc, 0x34, 0x78, 0x6b, 0x12, 0xc7, 0x7c, 0x91, 0xab, - 0x05, 0x17, 0x6d, 0x5f, 0xad, 0xb1, 0xb3, 0xe2, 0xde, 0xec, 0xa1, 0xf4, 0x92, 0x0b, 0x36, 0x58, - 0x3b, 0x3e, 0x70, 0xfa, 0xa1, 0x95, 0xe3, 0x43, 0x3f, 0xd4, 0x89, 0xbd, 0xc7, 0x32, 0x46, 0xc6, - 0x6e, 0x8d, 0x3d, 0xb1, 0x15, 0xd4, 0x89, 0x0d, 0x13, 0xc5, 0x1d, 0x1b, 0x4d, 0x93, 0x0f, 0xfd, - 0x90, 0xb1, 0x23, 0x43, 0x6c, 0xc1, 0x0b, 0xbc, 0x23, 0x4b, 0x27, 0xc1, 0x0b, 0x6a, 0x47, 0xb6, - 0x91, 0x4e, 0xd4, 0xc3, 0x7a, 0x41, 0x71, 0x47, 0x3d, 0x34, 0x57, 0x90, 0x1b, 0x3e, 0x44, 0x4f, - 0x68, 0xd9, 0x7f, 0x3c, 0x7f, 0x91, 0xce, 0x9e, 0x15, 0x49, 0xdd, 0x8b, 0x1b, 0xee, 0x0e, 0x32, - 0x10, 0x62, 0x42, 0x13, 0x28, 0xa8, 0xfd, 0x24, 0x08, 0xda, 0xe5, 0xeb, 0x49, 0xc1, 0xf2, 0xf0, - 0xba, 0xe5, 0x09, 0xeb, 0x5a, 0x6d, 0x51, 0xb1, 0xdf, 0xf7, 0x10, 0xba, 0x59, 0xda, 0xdf, 0x9b, - 0xdd, 0x2d, 0x74, 0x7a, 0x34, 0x26, 0xa2, 0x59, 0x10, 0x82, 0x0b, 0x3a, 0x3d, 0xe5, 0xe7, 0xee, - 0x82, 0xd6, 0x16, 0x7f, 0x41, 0x81, 0xd0, 0x19, 0x15, 0x14, 0xd4, 0x95, 0x51, 0xc9, 0x62, 0xf8, - 0x32, 0x2a, 0xcc, 0x40, 0x60, 0x1e, 0x7c, 0xd3, 0x0c, 0x7c, 0x8f, 0xf3, 0xb3, 0x79, 0x54, 0x9e, - 0x85, 0xb7, 0x68, 0x67, 0xc9, 0x28, 0xa1, 0xcd, 0x41, 0xac, 0x5e, 0xb4, 0x4c, 0xc1, 0x29, 0xc3, - 0x8b, 0x96, 0xe5, 0x3f, 0x65, 0xd4, 0xa2, 0xe5, 0xc0, 0x70, 0xa7, 0x3e, 0x28, 0xa3, 0xe2, 0xd4, - 0xdd, 0xa9, 0x8d, 0xc9, 0xdf, 0xa9, 0x12, 0xc1, 0x3d, 0x30, 0x65, 0x51, 0x19, 0x9f, 0xba, 0x7b, - 0xa0, 0xb5, 0xf9, 0x7b, 0x40, 0x31, 0x10, 0xb8, 0x0c, 0xbe, 0x65, 0x06, 0x9e, 0x2e, 0x4e, 0xaa, - 0xb8, 0x4c, 0x4f, 0x58, 0xb8, 0x49, 0x7b, 0x2b, 0x48, 0x49, 0xdd, 0x1e, 0x06, 0xeb, 0x0c, 0x11, - 0x34, 0xa5, 0xed, 0x20, 0xa9, 0x50, 0x86, 0x28, 0x63, 0x18, 0x04, 0x91, 0x21, 0xba, 0x49, 0x5c, - 0xbd, 0x07, 0x25, 0x5f, 0x14, 0x55, 0x4f, 0xf5, 0x10, 0xe4, 0xaf, 0x5e, 0x17, 0x06, 0xcd, 0x97, - 0xc1, 0xb7, 0xcd, 0x26, 0x7d, 0x96, 0x57, 0x4a, 0x75, 0x8b, 0x6e, 0x27, 0x03, 0x23, 0xf2, 0x38, - 0x0f, 0x0e, 0xca, 0x71, 0xf0, 0x75, 0xa9, 0x2c, 0xf6, 0x98, 0x88, 0xd2, 0xac, 0x0a, 0x57, 0xdd, - 0x31, 0xa4, 0x5d, 0x69, 0xad, 0xf5, 0x72, 0x78, 0x0a, 0xed, 0x2d, 0x8a, 0x2c, 0x8d, 0xbb, 0x49, - 0x37, 0xf8, 0x2a, 0xb3, 0x7f, 0x0a, 0x99, 0x98, 0x5e, 0xd8, 0x55, 0x35, 0xda, 0xff, 0x71, 0x7c, - 0x51, 0xe0, 0x85, 0x5d, 0x97, 0x50, 0x23, 0xc4, 0xc2, 0x4e, 0xa0, 0xb8, 0x3e, 0x53, 0x26, 0x1e, - 0x45, 0x17, 0x7c, 0x41, 0x2c, 0x09, 0xca, 0xec, 0xaf, 0x8f, 0x89, 0x81, 0xc2, 0x22, 0xb8, 0xa2, - 0x14, 0x0e, 0x72, 0xc1, 0xca, 0x3c, 0xca, 0xf6, 0xb3, 0x68, 0x56, 0x85, 0xc4, 0xbc, 0xb1, 0x29, - 0xa5, 0xb7, 0x35, 0x90, 0x76, 0x34, 0xe3, 0x41, 0xb5, 0x1f, 0x2d, 0x79, 0x99, 0x0a, 0xba, 0x19, - 0x35, 0xd2, 0xdb, 0x8c, 0x16, 0xea, 0x54, 0x9b, 0x94, 0xf1, 0x69, 0xba, 0x64, 0x89, 0x47, 0x4d, - 0x22, 0x03, 0xd4, 0x0c, 0x14, 0xab, 0xd5, 0x67, 0x09, 0x3d, 0x10, 0x9d, 0x6a, 0x16, 0xe2, 0x57, - 0xc3, 0x28, 0x9e, 0x57, 0x8d, 0xbd, 0x4d, 0xe8, 0x56, 0x49, 0x7f, 0x3b, 0xa7, 0x5b, 0xeb, 0xe5, - 0xf0, 0xb2, 0x51, 0x1b, 0xed, 0x46, 0xdc, 0xa2, 0x62, 0xb8, 0x1b, 0x72, 0x3c, 0x14, 0x27, 0x95, - 0xd5, 0x60, 0xf1, 0x2b, 0x77, 0x06, 0xcc, 0x78, 0x28, 0x8e, 0xbb, 0x71, 0x52, 0x14, 0xd9, 0xc5, - 0x31, 0x9b, 0x17, 0x19, 0xd9, 0x8d, 0x16, 0xe2, 0xef, 0x46, 0x8c, 0xe2, 0xad, 0xf9, 0x98, 0xd7, - 0x1b, 0xbf, 0x73, 0x6b, 0x6e, 0x4c, 0xfe, 0xad, 0x59, 0x22, 0x78, 0x8b, 0x99, 0x24, 0xc9, 0xf3, - 0x54, 0x9c, 0xb6, 0xff, 0xe7, 0x20, 0x71, 0x6f, 0x31, 0x08, 0xf2, 0x6f, 0x31, 0x5d, 0x58, 0x5f, - 0xd0, 0xc9, 0x1c, 0x2f, 0x2a, 0xd9, 0xbd, 0x8b, 0x47, 0x69, 0x7e, 0x16, 0xba, 0x57, 0x70, 0x0d, - 0x10, 0x17, 0x74, 0x4e, 0x10, 0xd7, 0xad, 0x4e, 0x5c, 0xef, 0x95, 0x2c, 0x4a, 0xe2, 0x72, 0x31, - 0x3f, 0xa9, 0xdc, 0x75, 0x43, 0x90, 0xbf, 0x6e, 0x5d, 0x18, 0xe7, 0x84, 0x53, 0x26, 0x4c, 0x49, - 0x6a, 0x79, 0x70, 0x29, 0x6e, 0x0e, 0x62, 0x71, 0xc2, 0xfc, 0x2c, 0x4f, 0xb8, 0x3b, 0x61, 0xae, - 0x2d, 0xfe, 0x84, 0x19, 0x08, 0x1c, 0xf2, 0x88, 0x51, 0x21, 0x6b, 0x8b, 0x3f, 0x24, 0x10, 0xae, - 0x35, 0x08, 0xce, 0xdb, 0xe4, 0x1a, 0x84, 0x0e, 0xdc, 0x6b, 0xbd, 0x1c, 0x9e, 0x8f, 0x32, 0x73, - 0xde, 0x67, 0x22, 0x3e, 0x75, 0xcf, 0x47, 0x0b, 0xf1, 0xcf, 0x47, 0x8c, 0xe2, 0x2a, 0x1d, 0x73, - 0x95, 0xf9, 0xaf, 0xba, 0x67, 0x5c, 0x27, 0xeb, 0x5f, 0xeb, 0xe5, 0x70, 0xe6, 0x7c, 0x30, 0x6f, - 0xda, 0xcc, 0x39, 0xa5, 0x5b, 0x9b, 0x3f, 0x73, 0x56, 0x0c, 0x2e, 0x7d, 0x6b, 0xa8, 0x9b, 0xd3, - 0x5d, 0x7a, 0x6d, 0xf7, 0x97, 0xde, 0xe2, 0xdc, 0x07, 0xa4, 0x23, 0x96, 0x45, 0x22, 0xe5, 0xb9, - 0xef, 0x80, 0x24, 0x99, 0x21, 0x07, 0x24, 0x83, 0x05, 0xc1, 0xdf, 0x8d, 0x82, 0xab, 0x2e, 0xc5, - 0x27, 0x45, 0xa3, 0xbb, 0xd3, 0x1f, 0xab, 0x25, 0x89, 0xbb, 0x40, 0xbf, 0x07, 0x94, 0xe1, 0x57, - 0xc1, 0x3b, 0xd2, 0xa4, 0xaf, 0x0a, 0xa1, 0x00, 0xf6, 0x0e, 0xa3, 0xca, 0x8f, 0x39, 0x25, 0xbf, - 0x3d, 0x98, 0xd7, 0xe9, 0xa0, 0x5d, 0xae, 0x0a, 0xa5, 0x83, 0x2a, 0x06, 0x98, 0x89, 0x74, 0xd0, - 0x81, 0xe1, 0xc5, 0x5b, 0x22, 0x93, 0x24, 0x71, 0x2e, 0xde, 0x2a, 0x84, 0x79, 0xb7, 0xbb, 0xde, - 0x0f, 0xe2, 0xb1, 0x23, 0xcd, 0x90, 0xb9, 0xdc, 0xf2, 0x45, 0x40, 0xd9, 0xcb, 0xe6, 0x20, 0x56, - 0xdf, 0x48, 0x76, 0x2a, 0xb6, 0xcf, 0x22, 0xb1, 0x28, 0x3b, 0x37, 0x92, 0xdd, 0x72, 0x4b, 0x90, - 0xb8, 0x91, 0xf4, 0x3a, 0x80, 0xfe, 0x9f, 0x46, 0xc1, 0xbb, 0x36, 0xd7, 0x76, 0xb1, 0x2a, 0xc3, - 0x1d, 0x5f, 0x48, 0x9b, 0x55, 0xc5, 0xb8, 0x7b, 0x29, 0x1f, 0x28, 0xc9, 0x1f, 0x46, 0xc1, 0x77, - 0x6d, 0xb4, 0xb9, 0x73, 0x5f, 0x46, 0x69, 0x16, 0x9d, 0x64, 0x2c, 0xfc, 0xc8, 0x17, 0xd4, 0x42, - 0x55, 0x39, 0xee, 0x5c, 0xc6, 0x05, 0x1f, 0x3c, 0xda, 0xf9, 0x66, 0x9c, 0xa5, 0x6e, 0xd3, 0xb3, - 0xd2, 0x71, 0x9c, 0xda, 0x1a, 0x48, 0xeb, 0x77, 0x0c, 0xfd, 0xb3, 0xd9, 0x00, 0xce, 0x74, 0x12, - 0x7c, 0x8d, 0x9a, 0x78, 0xd3, 0x49, 0x27, 0x0e, 0xc2, 0x42, 0xa6, 0x2b, 0xa6, 0x70, 0x3d, 0xbb, - 0x6e, 0xf7, 0x06, 0x32, 0xa7, 0xd8, 0xd6, 0x40, 0x1a, 0x54, 0x7f, 0x1d, 0xbc, 0xd3, 0x55, 0x85, - 0xb7, 0x93, 0xed, 0xde, 0x50, 0xe8, 0xe9, 0x64, 0x67, 0xb8, 0x83, 0xbe, 0x4d, 0x79, 0x98, 0x56, - 0x82, 0x97, 0x17, 0xd3, 0x53, 0x7e, 0x2e, 0x5f, 0x83, 0xed, 0x65, 0x02, 0x80, 0xb1, 0x41, 0x10, - 0xb7, 0x29, 0x6e, 0xb2, 0x23, 0xa5, 0x5f, 0x8d, 0x2b, 0x42, 0xca, 0x20, 0x7a, 0xa4, 0x6c, 0x52, - 0x2f, 0x92, 0xb2, 0x56, 0xfa, 0x89, 0x7b, 0xcd, 0x5d, 0xd4, 0xee, 0x33, 0xf7, 0x7a, 0x3f, 0xa8, - 0xcf, 0x04, 0xfb, 0x69, 0xc6, 0x9e, 0xbc, 0x78, 0x91, 0xf1, 0x28, 0x41, 0x67, 0x82, 0xda, 0x32, - 0x06, 0x13, 0x71, 0x26, 0x40, 0x88, 0xde, 0x44, 0x6a, 0x43, 0x3d, 0x3a, 0x65, 0xe4, 0x9b, 0x5d, - 0x37, 0xc3, 0x4c, 0x6c, 0x22, 0x0e, 0x4c, 0x67, 0x98, 0xb5, 0xf1, 0x59, 0xd1, 0x04, 0xbf, 0xde, - 0xf5, 0x6a, 0x2d, 0x44, 0x86, 0x69, 0x13, 0x3a, 0x53, 0xaa, 0x7f, 0xdf, 0xe3, 0xe7, 0x79, 0x13, - 0xd4, 0x51, 0x51, 0x69, 0x23, 0x32, 0x25, 0xcc, 0x40, 0xe0, 0x4f, 0x82, 0xff, 0x6f, 0x02, 0x97, - 0xbc, 0x08, 0x57, 0x1c, 0x0e, 0xa5, 0xf1, 0x9c, 0x70, 0x8d, 0xb4, 0xeb, 0x23, 0xc9, 0xe3, 0x68, - 0x99, 0xce, 0xd4, 0xa2, 0xd2, 0xce, 0x11, 0x7c, 0x24, 0xd1, 0xcc, 0xd8, 0x80, 0x88, 0x23, 0x09, - 0x09, 0x83, 0xe6, 0xdf, 0x47, 0xc1, 0x75, 0xcd, 0x3c, 0x90, 0xf7, 0x48, 0x07, 0xf9, 0x0b, 0x5e, - 0x9f, 0xcf, 0xea, 0x33, 0x53, 0x15, 0x7e, 0x4c, 0x85, 0x74, 0xf3, 0xaa, 0x28, 0x3f, 0xb8, 0xb4, - 0x9f, 0x4e, 0x93, 0xe4, 0x19, 0xb7, 0x5d, 0x8b, 0xf7, 0x4b, 0x3e, 0x6f, 0x3d, 0x50, 0x9a, 0xa4, - 0x8e, 0xc2, 0x98, 0x23, 0xd2, 0x24, 0x1f, 0x6f, 0xec, 0xb5, 0x94, 0x7a, 0xb3, 0xc3, 0xdc, 0x19, - 0x16, 0xd1, 0xda, 0x67, 0xee, 0x5e, 0xca, 0x47, 0x3f, 0x87, 0xa9, 0x82, 0x64, 0x3c, 0xc7, 0x4f, - 0x6d, 0x3a, 0x4a, 0x6d, 0x24, 0x9e, 0xc3, 0x3a, 0x90, 0x5e, 0x85, 0xa4, 0xa9, 0x3d, 0x2a, 0x4d, - 0xb2, 0x0c, 0xad, 0x42, 0xca, 0x55, 0x01, 0xc4, 0x2a, 0xe4, 0x04, 0x41, 0xe7, 0x28, 0x78, 0xa3, - 0xee, 0xdc, 0xa7, 0x25, 0x5b, 0xa6, 0x0c, 0x3f, 0xda, 0x18, 0x16, 0x62, 0x3a, 0xdb, 0x84, 0x7e, - 0x3d, 0x7d, 0x96, 0x57, 0x45, 0x16, 0x55, 0xa7, 0xf0, 0x68, 0x60, 0xd7, 0x59, 0x1a, 0xf1, 0xb3, - 0xc1, 0xcd, 0x1e, 0x4a, 0x1f, 0x7f, 0xa4, 0x4d, 0xad, 0x18, 0xab, 0x6e, 0xd7, 0xce, 0xaa, 0xb1, - 0xd6, 0xcb, 0xe9, 0xd5, 0xf9, 0x5e, 0xc6, 0xe3, 0x33, 0x58, 0xe6, 0xec, 0x5a, 0x37, 0x16, 0xbc, - 0xce, 0xdd, 0xf0, 0x21, 0x7a, 0xa1, 0x6b, 0x0c, 0x47, 0xac, 0xc8, 0xa2, 0x18, 0x3f, 0x67, 0xb5, - 0x3e, 0x60, 0x23, 0x16, 0x3a, 0xcc, 0xa0, 0xe2, 0xc2, 0x33, 0x99, 0xab, 0xb8, 0xe8, 0x95, 0xec, - 0x86, 0x0f, 0xd1, 0x4b, 0x7d, 0x63, 0x98, 0x16, 0x59, 0x2a, 0xd0, 0xd8, 0x68, 0x3d, 0x1a, 0x0b, - 0x31, 0x36, 0x6c, 0x02, 0x85, 0x3c, 0x64, 0xe5, 0x8c, 0x39, 0x43, 0x36, 0x16, 0x6f, 0x48, 0x49, - 0x40, 0xc8, 0xc7, 0xc1, 0x57, 0xda, 0xba, 0xf3, 0xe2, 0x22, 0xbc, 0xe6, 0xaa, 0x16, 0x2f, 0x2e, - 0x54, 0xc0, 0xeb, 0x34, 0x80, 0x8a, 0xf8, 0x34, 0xaa, 0x84, 0xbb, 0x88, 0x8d, 0xc5, 0x5b, 0x44, - 0x49, 0xe8, 0x7d, 0xa8, 0x2d, 0xe2, 0x42, 0xa0, 0x7d, 0x08, 0x0a, 0x60, 0xdc, 0xed, 0x5f, 0x23, - 0xed, 0x7a, 0x7a, 0xb5, 0xbd, 0xc2, 0xc4, 0x7e, 0xca, 0xb2, 0xa4, 0x42, 0xd3, 0x0b, 0xda, 0x5d, - 0x5a, 0x89, 0xe9, 0xd5, 0xa5, 0xd0, 0x50, 0x82, 0x9b, 0x1e, 0x57, 0xed, 0xd0, 0x25, 0xcf, 0x0d, - 0x1f, 0xa2, 0xf3, 0x92, 0xc6, 0x60, 0xdc, 0x63, 0xbb, 0xca, 0xe3, 0xb8, 0xc6, 0x5e, 0xed, 0xc3, - 0x40, 0xe1, 0x2f, 0xa3, 0xe0, 0x3d, 0x25, 0x71, 0xc8, 0x97, 0xec, 0x98, 0xdf, 0x7f, 0x99, 0x56, - 0x22, 0xcd, 0x67, 0xb0, 0x35, 0xdd, 0x25, 0x22, 0xb9, 0x60, 0x25, 0xff, 0xbd, 0xcb, 0x39, 0xe9, - 0x1d, 0x12, 0x95, 0xe5, 0x31, 0x3b, 0x77, 0xee, 0x90, 0x38, 0xa2, 0xe2, 0x88, 0x1d, 0xd2, 0xc7, - 0xeb, 0xd3, 0xb0, 0x12, 0x87, 0x4f, 0xf2, 0x8e, 0xb9, 0x4c, 0x56, 0xa8, 0x68, 0x18, 0x24, 0xce, - 0x05, 0x5e, 0x07, 0x9d, 0xac, 0x2b, 0x7d, 0x3d, 0x48, 0xd7, 0x89, 0x38, 0xdd, 0x81, 0xba, 0x31, - 0x80, 0x74, 0x48, 0xe9, 0xc7, 0x18, 0x4a, 0xaa, 0xfb, 0x16, 0xb3, 0x31, 0x80, 0x34, 0x4e, 0xd6, - 0x66, 0xb5, 0xee, 0x45, 0xf1, 0xd9, 0xac, 0xe4, 0x8b, 0x3c, 0xd9, 0xe5, 0x19, 0x2f, 0xd1, 0xc9, - 0xda, 0x2a, 0x35, 0x42, 0x89, 0x93, 0x75, 0x8f, 0x8b, 0x4e, 0x0c, 0xcc, 0x52, 0x4c, 0xb2, 0x74, - 0x86, 0x8f, 0x27, 0x56, 0xa0, 0x06, 0x20, 0x12, 0x03, 0x27, 0xe8, 0x18, 0x44, 0xed, 0xf1, 0x45, - 0xa4, 0x71, 0x94, 0xb5, 0x7a, 0xdb, 0x74, 0x18, 0x0b, 0xec, 0x1d, 0x44, 0x0e, 0x07, 0x47, 0x3d, - 0x8f, 0x17, 0x65, 0x7e, 0x90, 0x0b, 0x4e, 0xd6, 0x53, 0x02, 0xbd, 0xf5, 0x34, 0x40, 0x9d, 0x4d, - 0x34, 0xe6, 0x63, 0xf6, 0xb2, 0x2e, 0x4d, 0xfd, 0x9f, 0xd0, 0xb1, 0xe4, 0xd4, 0xbf, 0x8f, 0xc1, - 0x4e, 0x64, 0x13, 0x2e, 0x0e, 0x55, 0x06, 0x44, 0xda, 0x01, 0xe3, 0xf1, 0xb6, 0x87, 0xc9, 0x7a, - 0x3f, 0xe8, 0xd6, 0x99, 0x8a, 0x8b, 0x8c, 0xf9, 0x74, 0x1a, 0x60, 0x88, 0x8e, 0x04, 0xf5, 0x6d, - 0xbd, 0x55, 0x9f, 0x53, 0x16, 0x9f, 0x75, 0x9e, 0x5c, 0xed, 0x82, 0xb6, 0x08, 0x71, 0x5b, 0x4f, - 0xa0, 0xee, 0x2e, 0x3a, 0x88, 0x79, 0xee, 0xeb, 0xa2, 0xda, 0x3e, 0xa4, 0x8b, 0x80, 0xd3, 0xa7, - 0x3b, 0x65, 0x85, 0x91, 0xd9, 0x76, 0xd3, 0x26, 0x11, 0xc1, 0x84, 0x88, 0xd3, 0x1d, 0x09, 0xeb, - 0x7b, 0x52, 0xac, 0x79, 0xd8, 0xfd, 0x08, 0xa9, 0x13, 0xe5, 0x90, 0xfe, 0x08, 0x89, 0x62, 0xe9, - 0x4a, 0xb6, 0x63, 0xa4, 0x27, 0x8a, 0x3d, 0x4e, 0x6e, 0x0f, 0x83, 0xf5, 0x1b, 0xaf, 0xa5, 0xb9, - 0x9b, 0xb1, 0xa8, 0x6c, 0x55, 0xb7, 0x3c, 0x81, 0x34, 0x46, 0x5c, 0xca, 0x79, 0x70, 0xb4, 0x84, - 0x59, 0xca, 0xbb, 0x3c, 0x17, 0x2c, 0x17, 0xae, 0x25, 0xcc, 0x0e, 0x06, 0xa0, 0x6f, 0x09, 0xa3, - 0x1c, 0xd0, 0xb8, 0xdd, 0x4f, 0x33, 0x36, 0x65, 0xe2, 0x71, 0x34, 0x67, 0xae, 0x71, 0xdb, 0x5c, - 0x35, 0x80, 0xdd, 0x37, 0x6e, 0x11, 0x87, 0xa6, 0xfc, 0xc1, 0x3c, 0x9a, 0x29, 0x15, 0x87, 0x77, - 0x63, 0xef, 0xc8, 0xac, 0xf7, 0x83, 0x48, 0xe7, 0xd3, 0x34, 0x61, 0xdc, 0xa3, 0xd3, 0xd8, 0x87, - 0xe8, 0x60, 0x10, 0x65, 0x4e, 0x75, 0x6d, 0xdb, 0xf3, 0xc8, 0x24, 0x4f, 0xe0, 0x14, 0x36, 0x26, - 0x1a, 0x05, 0x71, 0xbe, 0xcc, 0x89, 0xe0, 0xd1, 0xfc, 0x90, 0x57, 0x68, 0xbe, 0xf9, 0xa1, 0x6e, - 0xc8, 0x86, 0xcc, 0x0f, 0x17, 0x0c, 0x9a, 0xbf, 0x84, 0xf9, 0xb1, 0x17, 0x89, 0xa8, 0x3e, 0x47, - 0x7f, 0x9a, 0xb2, 0x73, 0x38, 0xc6, 0x39, 0xea, 0x2b, 0xa9, 0x71, 0x8d, 0xe1, 0x33, 0xdd, 0xf6, - 0x60, 0xde, 0xa3, 0x0d, 0xd9, 0x79, 0xaf, 0x36, 0x4a, 0xd3, 0xb7, 0x07, 0xf3, 0x1e, 0x6d, 0xf8, - 0x90, 0xb6, 0x57, 0x1b, 0x7d, 0x4d, 0xbb, 0x3d, 0x98, 0x07, 0xed, 0xdf, 0x8f, 0x82, 0xab, 0x1d, - 0xf1, 0x3a, 0x07, 0x8a, 0x45, 0xba, 0x64, 0xae, 0x54, 0xce, 0x8e, 0xa7, 0x50, 0x5f, 0x2a, 0x47, - 0xbb, 0x40, 0x29, 0xfe, 0x3c, 0x0a, 0xde, 0x75, 0x95, 0xe2, 0x29, 0xaf, 0xd2, 0xe6, 0xc9, 0xf1, - 0xee, 0x80, 0xa0, 0x12, 0xf6, 0x1d, 0x58, 0x7c, 0x4e, 0xfa, 0xc1, 0xc6, 0x42, 0xeb, 0x71, 0xca, - 0x17, 0x65, 0x8c, 0x1f, 0x6c, 0xec, 0x78, 0x8a, 0x22, 0x5e, 0x30, 0x68, 0x5a, 0xbf, 0x60, 0x58, - 0x8c, 0xf9, 0x74, 0xe2, 0xeb, 0x55, 0xe7, 0xeb, 0xc9, 0xce, 0x70, 0x07, 0x90, 0xff, 0xa3, 0xcc, - 0xe9, 0xb1, 0x3e, 0x4c, 0x82, 0x3b, 0x43, 0x22, 0xa2, 0x89, 0x70, 0xf7, 0x52, 0x3e, 0x50, 0x90, - 0x7f, 0x8c, 0x82, 0x1b, 0xce, 0x82, 0xd8, 0xaf, 0x77, 0x3f, 0x1c, 0x12, 0xdb, 0xfd, 0x8a, 0xf7, - 0xa3, 0xff, 0xc5, 0x15, 0x4a, 0xf7, 0xb9, 0x3c, 0x5a, 0x4b, 0x8f, 0xe6, 0x0b, 0xd4, 0x27, 0x65, - 0xc2, 0x4a, 0x98, 0xb1, 0xbe, 0x41, 0xa7, 0x61, 0x3c, 0x6f, 0xbf, 0x7f, 0x49, 0x2f, 0x28, 0xce, - 0x5f, 0x47, 0xc1, 0x8a, 0x05, 0xc3, 0x97, 0x42, 0x46, 0x79, 0x7c, 0x91, 0x0d, 0x1a, 0x17, 0xe8, - 0xe3, 0xcb, 0xba, 0xe1, 0x0c, 0xb5, 0x6e, 0x37, 0x58, 0xbc, 0x5d, 0x19, 0x6a, 0xd3, 0xac, 0x68, - 0xd1, 0x5e, 0xeb, 0xe5, 0x5c, 0x22, 0xf7, 0x5f, 0x16, 0x51, 0x9e, 0xd0, 0x22, 0xad, 0xbd, 0x5f, - 0x44, 0x71, 0x38, 0xb3, 0xaf, 0xad, 0x47, 0x5c, 0xee, 0x44, 0x1b, 0x94, 0xbf, 0x42, 0xbc, 0x99, - 0x7d, 0x07, 0x25, 0xd4, 0x60, 0xda, 0xf9, 0xd4, 0xd0, 0x6c, 0xbb, 0x35, 0x04, 0x45, 0x6b, 0x9c, - 0x52, 0x53, 0x17, 0x06, 0xb7, 0x7d, 0x51, 0x3a, 0x97, 0x06, 0x5b, 0x03, 0x69, 0x42, 0x76, 0xca, - 0xc4, 0x43, 0x16, 0x25, 0xac, 0xf4, 0xca, 0x2a, 0x6a, 0x90, 0xac, 0x49, 0xbb, 0x64, 0x77, 0x79, - 0xb6, 0x98, 0xe7, 0xd0, 0x99, 0xa4, 0xac, 0x49, 0xf5, 0xcb, 0x22, 0x1a, 0x9f, 0x69, 0xb4, 0x6c, - 0xf3, 0x4f, 0x6f, 0x6e, 0xf9, 0xc3, 0x58, 0xff, 0x06, 0x67, 0x73, 0x10, 0x4b, 0xd7, 0x13, 0x86, - 0x51, 0x4f, 0x3d, 0xd1, 0x48, 0xda, 0x1a, 0x48, 0xe3, 0xc3, 0x85, 0x21, 0xab, 0xc6, 0xd3, 0x76, - 0x4f, 0xac, 0xce, 0x90, 0xda, 0x19, 0xee, 0x80, 0x8f, 0x72, 0x30, 0xaa, 0xea, 0xa5, 0x7b, 0x3f, - 0xcd, 0xb2, 0x70, 0xd3, 0x33, 0x4c, 0x24, 0xe4, 0x3d, 0xca, 0x39, 0x60, 0x62, 0x24, 0xcb, 0xa3, - 0x4f, 0x1e, 0xf6, 0xc5, 0x69, 0xa8, 0x41, 0x23, 0xd9, 0xa4, 0xd1, 0x91, 0xc0, 0x68, 0x6a, 0x55, - 0xdb, 0xb1, 0xbf, 0xe1, 0x3a, 0x15, 0xde, 0x1e, 0xcc, 0xa3, 0xdb, 0xf6, 0x86, 0x9a, 0xf2, 0x52, - 0xb8, 0x6e, 0xdb, 0xdb, 0x10, 0x53, 0xf3, 0x52, 0xfc, 0x66, 0x0f, 0xd5, 0xb9, 0x66, 0xcb, 0xe1, - 0xf1, 0x46, 0x7f, 0x77, 0xeb, 0x1a, 0x46, 0xcd, 0x57, 0xb2, 0x18, 0xf4, 0x0d, 0x23, 0xca, 0xc1, - 0xf8, 0xea, 0x4e, 0x71, 0xf2, 0x26, 0xb0, 0x28, 0x58, 0x54, 0x46, 0x79, 0x8c, 0xff, 0x05, 0xae, - 0x0e, 0xd8, 0x21, 0x89, 0xaf, 0xee, 0xfc, 0x1e, 0xe8, 0x12, 0xd7, 0xfe, 0xf4, 0xd3, 0x71, 0x64, - 0x54, 0xdf, 0x58, 0xda, 0x5f, 0x7e, 0x6e, 0x0c, 0x20, 0xf1, 0x25, 0xae, 0x04, 0xd4, 0x51, 0xb0, - 0x15, 0xfd, 0xc8, 0x13, 0xca, 0x46, 0x7d, 0x99, 0x3f, 0xed, 0x82, 0xf6, 0x3d, 0x99, 0x78, 0x4d, - 0x99, 0xf8, 0x84, 0x5d, 0xb8, 0xf6, 0x3d, 0x95, 0x9a, 0xb5, 0x88, 0x6f, 0xdf, 0xeb, 0xa2, 0x28, - 0x71, 0x30, 0x93, 0xeb, 0x55, 0x8f, 0xbf, 0x99, 0x53, 0xaf, 0xf5, 0x72, 0x68, 0xdd, 0xdf, 0x4b, - 0x97, 0xd6, 0xc9, 0xd9, 0x51, 0xd0, 0xbd, 0x74, 0xe9, 0x3e, 0x38, 0x6f, 0x0e, 0x62, 0xf1, 0x05, - 0x71, 0x24, 0xd8, 0x4b, 0x79, 0x73, 0xeb, 0x28, 0x6e, 0x63, 0xef, 0x5c, 0xdd, 0xae, 0xf7, 0x83, - 0x48, 0x47, 0xce, 0xa1, 0x64, 0xc6, 0x9c, 0x3a, 0x63, 0x13, 0xf0, 0x5e, 0x44, 0x23, 0x50, 0x7f, - 0x4d, 0xf0, 0xb4, 0xe4, 0x31, 0xab, 0xaa, 0xdd, 0x7a, 0x7a, 0x64, 0xe8, 0x6b, 0x02, 0xb0, 0x8d, - 0x5b, 0x23, 0xf1, 0x35, 0x41, 0x07, 0x82, 0xd8, 0x0f, 0x83, 0xd7, 0x1f, 0xf1, 0xd9, 0x94, 0xe5, - 0x49, 0xf8, 0x9e, 0xfd, 0x7e, 0xcf, 0x67, 0xe3, 0xfa, 0x67, 0x15, 0x6f, 0x85, 0x32, 0xeb, 0xc7, - 0xd6, 0x3d, 0x76, 0xb2, 0x98, 0x4d, 0x2f, 0xf2, 0x18, 0x3d, 0xb6, 0x36, 0xbf, 0x8f, 0x6b, 0x03, - 0xf1, 0xd8, 0x6a, 0x01, 0xfa, 0xb5, 0xb1, 0xf9, 0xf9, 0xf8, 0xb4, 0x64, 0x9d, 0x77, 0xf6, 0xd6, - 0xa1, 0x35, 0x11, 0xaf, 0x8d, 0x08, 0x41, 0xa5, 0x3c, 0x2e, 0x19, 0x73, 0x96, 0xb2, 0x36, 0x78, - 0x4b, 0x09, 0x80, 0xde, 0x6c, 0x9b, 0x9f, 0xdb, 0x57, 0xcd, 0x47, 0x3c, 0x8e, 0xb2, 0x4a, 0xf0, - 0x12, 0xdf, 0x0b, 0xb5, 0xae, 0x18, 0x22, 0x36, 0x5b, 0x12, 0x46, 0x75, 0x78, 0x9a, 0xe6, 0x33, - 0x67, 0x1d, 0x6a, 0x83, 0xb7, 0x0e, 0x00, 0xe8, 0x09, 0x7a, 0xc8, 0x44, 0x99, 0xc6, 0xd5, 0x94, - 0x89, 0xa7, 0x51, 0x19, 0xcd, 0x99, 0x60, 0x25, 0xfe, 0xd7, 0x0d, 0x80, 0x8c, 0x2d, 0x86, 0x98, - 0xa0, 0x14, 0x0b, 0x82, 0x3f, 0x0e, 0xde, 0xae, 0x67, 0x2e, 0xcb, 0xe1, 0xaf, 0x67, 0xdc, 0x6f, - 0xfe, 0xb0, 0x4c, 0x78, 0x45, 0xc5, 0x98, 0x8a, 0x92, 0x45, 0x73, 0x19, 0xfb, 0x2d, 0xf5, 0x7b, - 0x03, 0xee, 0x8c, 0xee, 0xbd, 0xff, 0xcf, 0x2f, 0x57, 0x46, 0x5f, 0x7c, 0xb9, 0x32, 0xfa, 0xf7, - 0x97, 0x2b, 0xa3, 0xbf, 0xbd, 0x5a, 0x79, 0xed, 0x8b, 0x57, 0x2b, 0xaf, 0xfd, 0xeb, 0xd5, 0xca, - 0x6b, 0x9f, 0xbd, 0x0e, 0x7f, 0xe0, 0xe6, 0xe4, 0xff, 0x9a, 0x3f, 0x53, 0x73, 0xf7, 0xbf, 0x01, - 0x00, 0x00, 0xff, 0xff, 0x48, 0x5e, 0x5e, 0xf4, 0x04, 0x47, 0x00, 0x00, + 0x63, 0x10, 0x08, 0x04, 0x02, 0x81, 0x40, 0x20, 0x71, 0xc9, 0x3f, 0xc4, 0x65, 0x2f, 0xb9, 0x44, + 0xcd, 0x1d, 0x7f, 0x05, 0xda, 0xdd, 0x67, 0xde, 0x9e, 0x9d, 0x67, 0x76, 0xcd, 0x55, 0xe1, 0x3c, + 0x9f, 0xe7, 0xf9, 0xce, 0xfb, 0x3c, 0x33, 0xb3, 0x71, 0x70, 0xad, 0x38, 0xd9, 0x2e, 0x4a, 0x2e, + 0x78, 0xb5, 0x5d, 0xb1, 0x72, 0x99, 0xc6, 0x4c, 0xfe, 0x77, 0xdc, 0xfc, 0x1c, 0xbe, 0x1e, 0xe5, + 0x17, 0xe2, 0xa2, 0x60, 0x57, 0xdf, 0xd1, 0x64, 0xcc, 0xe7, 0xf3, 0x28, 0x4f, 0xaa, 0x16, 0xb9, + 0x7a, 0x45, 0x5b, 0xd8, 0x92, 0xe5, 0x02, 0x7e, 0xbf, 0xf3, 0x9f, 0xbf, 0x8c, 0x82, 0xb7, 0x76, + 0xb3, 0x94, 0xe5, 0x62, 0x17, 0x3c, 0xc2, 0xcf, 0x82, 0x37, 0x27, 0x45, 0xf1, 0x80, 0x89, 0x4f, + 0x59, 0x59, 0xa5, 0x3c, 0x0f, 0x3f, 0x18, 0x83, 0xc0, 0xf8, 0xa8, 0x88, 0xc7, 0x93, 0xa2, 0x18, + 0x6b, 0xe3, 0xf8, 0x88, 0xfd, 0x6c, 0xc1, 0x2a, 0x71, 0xf5, 0x43, 0x3f, 0x54, 0x15, 0x3c, 0xaf, + 0x58, 0xf8, 0x22, 0xf8, 0xda, 0xa4, 0x28, 0xa6, 0x4c, 0xec, 0xb1, 0xba, 0x02, 0x53, 0x11, 0x09, + 0x16, 0xae, 0x75, 0x5c, 0x6d, 0x40, 0x69, 0xac, 0xf7, 0x83, 0xa0, 0x73, 0x1c, 0xbc, 0x51, 0xeb, + 0x9c, 0x2e, 0x44, 0xc2, 0xcf, 0xf3, 0xf0, 0xfd, 0xae, 0x23, 0x98, 0x54, 0xec, 0x1b, 0x3e, 0x04, + 0xa2, 0x3e, 0x0f, 0xbe, 0xfc, 0x3c, 0xca, 0x32, 0x26, 0x76, 0x4b, 0x56, 0x17, 0xdc, 0xf6, 0x69, + 0x4d, 0xe3, 0xd6, 0xa6, 0xe2, 0x7e, 0xe0, 0x65, 0x20, 0xf0, 0x67, 0xc1, 0x9b, 0xad, 0xe5, 0x88, + 0xc5, 0x7c, 0xc9, 0xca, 0xd0, 0xe9, 0x05, 0x46, 0xa2, 0xc9, 0x3b, 0x10, 0x8e, 0xbd, 0xcb, 0xf3, + 0x25, 0x2b, 0x85, 0x3b, 0x36, 0x18, 0xfd, 0xb1, 0x35, 0x04, 0xb1, 0xb3, 0xe0, 0x6d, 0xb3, 0x41, + 0xa6, 0xac, 0x6a, 0x06, 0xcc, 0x06, 0x5d, 0x67, 0x40, 0x94, 0xce, 0xad, 0x21, 0x28, 0xa8, 0xa5, + 0x41, 0x08, 0x6a, 0x19, 0xaf, 0x94, 0xd8, 0xba, 0x33, 0x82, 0x41, 0x28, 0xad, 0x8d, 0x01, 0x24, + 0x48, 0xfd, 0x24, 0xf8, 0xca, 0x73, 0x5e, 0x9e, 0x55, 0x45, 0x14, 0x33, 0xe8, 0xec, 0x9b, 0xb6, + 0xb7, 0xb4, 0xe2, 0xfe, 0x5e, 0xed, 0xc3, 0x40, 0xe1, 0x2c, 0x08, 0x95, 0xf1, 0xc9, 0xc9, 0x4f, + 0x59, 0x2c, 0x26, 0x49, 0x82, 0x5b, 0x4e, 0x79, 0xb7, 0xc4, 0x78, 0x92, 0x24, 0x54, 0xcb, 0xb9, + 0x51, 0x10, 0x3b, 0x0f, 0xae, 0x20, 0xb1, 0x47, 0x69, 0xd5, 0x08, 0x6e, 0xf9, 0xa3, 0x00, 0xa6, + 0x44, 0xc7, 0x43, 0x71, 0x10, 0xfe, 0xf5, 0x28, 0xf8, 0x96, 0x43, 0xf9, 0x88, 0xcd, 0xf9, 0x92, + 0x85, 0x3b, 0xfd, 0xd1, 0x5a, 0x52, 0xe9, 0x7f, 0x74, 0x09, 0x0f, 0x47, 0x57, 0x4e, 0x59, 0xc6, + 0x62, 0x41, 0x76, 0x65, 0x6b, 0xee, 0xed, 0x4a, 0x85, 0x19, 0xb3, 0x40, 0x1a, 0x1f, 0x30, 0xb1, + 0xbb, 0x28, 0x4b, 0x96, 0x0b, 0xb2, 0x2f, 0x35, 0xd2, 0xdb, 0x97, 0x16, 0xea, 0xa8, 0xcf, 0x03, + 0x26, 0x26, 0x59, 0x46, 0xd6, 0xa7, 0x35, 0xf7, 0xd6, 0x47, 0x61, 0xa0, 0xf0, 0x2b, 0xa3, 0xcf, + 0xa6, 0x4c, 0x1c, 0x54, 0x0f, 0xd3, 0xd9, 0x69, 0x96, 0xce, 0x4e, 0x05, 0x4b, 0xc2, 0x6d, 0xb2, + 0x51, 0x6c, 0x50, 0xa9, 0xee, 0x0c, 0x77, 0x70, 0xd4, 0xf0, 0xfe, 0xcb, 0x82, 0x97, 0x74, 0x8f, + 0xb5, 0xe6, 0xde, 0x1a, 0x2a, 0x0c, 0x14, 0x7e, 0x1c, 0xbc, 0x35, 0x89, 0x63, 0xbe, 0xc8, 0xd5, + 0x82, 0x8b, 0xb6, 0xaf, 0xd6, 0xd8, 0x59, 0x71, 0x6f, 0xf6, 0x50, 0x7a, 0xc9, 0x05, 0x1b, 0xac, + 0x1d, 0x1f, 0x38, 0xfd, 0xd0, 0xca, 0xf1, 0xa1, 0x1f, 0xea, 0xc4, 0xde, 0x63, 0x19, 0x23, 0x63, + 0xb7, 0xc6, 0x9e, 0xd8, 0x0a, 0xea, 0xc4, 0x86, 0x89, 0xe2, 0x8e, 0x8d, 0xa6, 0xc9, 0x87, 0x7e, + 0xc8, 0xd8, 0x91, 0x21, 0xb6, 0xe0, 0x05, 0xde, 0x91, 0xa5, 0x93, 0xe0, 0x05, 0xb5, 0x23, 0xdb, + 0x48, 0x27, 0xea, 0x61, 0xbd, 0xa0, 0xb8, 0xa3, 0x1e, 0x9a, 0x2b, 0xc8, 0x0d, 0x1f, 0xa2, 0x27, + 0xb4, 0xec, 0x3f, 0x9e, 0xbf, 0x48, 0x67, 0xcf, 0x8a, 0xa4, 0xee, 0xc5, 0x0d, 0x77, 0x07, 0x19, + 0x08, 0x31, 0xa1, 0x09, 0x14, 0xd4, 0x7e, 0x14, 0x04, 0xed, 0xf2, 0xf5, 0xa4, 0x60, 0x79, 0x78, + 0xdd, 0xf2, 0x84, 0x75, 0xad, 0xb6, 0xa8, 0xd8, 0xef, 0x7b, 0x08, 0xdd, 0x2c, 0xed, 0xef, 0xcd, + 0xee, 0x16, 0x3a, 0x3d, 0x1a, 0x13, 0xd1, 0x2c, 0x08, 0xc1, 0x05, 0x9d, 0x9e, 0xf2, 0x73, 0x77, + 0x41, 0x6b, 0x8b, 0xbf, 0xa0, 0x40, 0xe8, 0x8c, 0x0a, 0x0a, 0xea, 0xca, 0xa8, 0x64, 0x31, 0x7c, + 0x19, 0x15, 0x66, 0x20, 0x30, 0x0f, 0xbe, 0x6e, 0x06, 0xbe, 0xc7, 0xf9, 0xd9, 0x3c, 0x2a, 0xcf, + 0xc2, 0x5b, 0xb4, 0xb3, 0x64, 0x94, 0xd0, 0xe6, 0x20, 0x56, 0x2f, 0x5a, 0xa6, 0xe0, 0x94, 0xe1, + 0x45, 0xcb, 0xf2, 0x9f, 0x32, 0x6a, 0xd1, 0x72, 0x60, 0xb8, 0x53, 0x1f, 0x94, 0x51, 0x71, 0xea, + 0xee, 0xd4, 0xc6, 0xe4, 0xef, 0x54, 0x89, 0xe0, 0x1e, 0x98, 0xb2, 0xa8, 0x8c, 0x4f, 0xdd, 0x3d, + 0xd0, 0xda, 0xfc, 0x3d, 0xa0, 0x18, 0x08, 0x5c, 0x06, 0xdf, 0x30, 0x03, 0x4f, 0x17, 0x27, 0x55, + 0x5c, 0xa6, 0x27, 0x2c, 0xdc, 0xa4, 0xbd, 0x15, 0xa4, 0xa4, 0x6e, 0x0f, 0x83, 0x75, 0x86, 0x08, + 0x9a, 0xd2, 0x76, 0x90, 0x54, 0x28, 0x43, 0x94, 0x31, 0x0c, 0x82, 0xc8, 0x10, 0xdd, 0x24, 0xae, + 0xde, 0x83, 0x92, 0x2f, 0x8a, 0xaa, 0xa7, 0x7a, 0x08, 0xf2, 0x57, 0xaf, 0x0b, 0x83, 0xe6, 0xcb, + 0xe0, 0x9b, 0x66, 0x93, 0x3e, 0xcb, 0x2b, 0xa5, 0xba, 0x45, 0xb7, 0x93, 0x81, 0x11, 0x79, 0x9c, + 0x07, 0x07, 0xe5, 0x38, 0xf8, 0xaa, 0x54, 0x16, 0x7b, 0x4c, 0x44, 0x69, 0x56, 0x85, 0xab, 0xee, + 0x18, 0xd2, 0xae, 0xb4, 0xd6, 0x7a, 0x39, 0x3c, 0x85, 0xf6, 0x16, 0x45, 0x96, 0xc6, 0xdd, 0xa4, + 0x1b, 0x7c, 0x95, 0xd9, 0x3f, 0x85, 0x4c, 0x4c, 0x2f, 0xec, 0xaa, 0x1a, 0xed, 0xff, 0x38, 0xbe, + 0x28, 0xf0, 0xc2, 0xae, 0x4b, 0xa8, 0x11, 0x62, 0x61, 0x27, 0x50, 0x5c, 0x9f, 0x29, 0x13, 0x8f, + 0xa2, 0x0b, 0xbe, 0x20, 0x96, 0x04, 0x65, 0xf6, 0xd7, 0xc7, 0xc4, 0x40, 0x61, 0x11, 0x5c, 0x51, + 0x0a, 0x07, 0xb9, 0x60, 0x65, 0x1e, 0x65, 0xfb, 0x59, 0x34, 0xab, 0x42, 0x62, 0xde, 0xd8, 0x94, + 0xd2, 0xdb, 0x1a, 0x48, 0x3b, 0x9a, 0xf1, 0xa0, 0xda, 0x8f, 0x96, 0xbc, 0x4c, 0x05, 0xdd, 0x8c, + 0x1a, 0xe9, 0x6d, 0x46, 0x0b, 0x75, 0xaa, 0x4d, 0xca, 0xf8, 0x34, 0x5d, 0xb2, 0xc4, 0xa3, 0x26, + 0x91, 0x01, 0x6a, 0x06, 0x8a, 0xd5, 0xea, 0xb3, 0x84, 0x1e, 0x88, 0x4e, 0x35, 0x0b, 0xf1, 0xab, + 0x61, 0x14, 0xcf, 0xab, 0xc6, 0xde, 0x26, 0x74, 0xab, 0xa4, 0xbf, 0x9d, 0xd3, 0xad, 0xf5, 0x72, + 0x78, 0xd9, 0xa8, 0x8d, 0x76, 0x23, 0x6e, 0x51, 0x31, 0xdc, 0x0d, 0x39, 0x1e, 0x8a, 0x93, 0xca, + 0x6a, 0xb0, 0xf8, 0x95, 0x3b, 0x03, 0x66, 0x3c, 0x14, 0xc7, 0xdd, 0x38, 0x29, 0x8a, 0xec, 0xe2, + 0x98, 0xcd, 0x8b, 0x8c, 0xec, 0x46, 0x0b, 0xf1, 0x77, 0x23, 0x46, 0xf1, 0xd6, 0x7c, 0xcc, 0xeb, + 0x8d, 0xdf, 0xb9, 0x35, 0x37, 0x26, 0xff, 0xd6, 0x2c, 0x11, 0xbc, 0xc5, 0x4c, 0x92, 0xe4, 0x79, + 0x2a, 0x4e, 0xdb, 0xff, 0x73, 0x90, 0xb8, 0xb7, 0x18, 0x04, 0xf9, 0xb7, 0x98, 0x2e, 0xac, 0x2f, + 0xe8, 0x64, 0x8e, 0x17, 0x95, 0xec, 0xde, 0xc5, 0xa3, 0x34, 0x3f, 0x0b, 0xdd, 0x2b, 0xb8, 0x06, + 0x88, 0x0b, 0x3a, 0x27, 0x88, 0xeb, 0x56, 0x27, 0xae, 0xf7, 0x4a, 0x16, 0x25, 0x71, 0xb9, 0x98, + 0x9f, 0x54, 0xee, 0xba, 0x21, 0xc8, 0x5f, 0xb7, 0x2e, 0x8c, 0x73, 0xc2, 0x29, 0x13, 0xa6, 0x24, + 0xb5, 0x3c, 0xb8, 0x14, 0x37, 0x07, 0xb1, 0x38, 0x61, 0x7e, 0x96, 0x27, 0xdc, 0x9d, 0x30, 0xd7, + 0x16, 0x7f, 0xc2, 0x0c, 0x04, 0x0e, 0x79, 0xc4, 0xa8, 0x90, 0xb5, 0xc5, 0x1f, 0x12, 0x08, 0xdc, + 0x2c, 0x07, 0xf3, 0xfa, 0x94, 0x7c, 0x18, 0x95, 0x67, 0xcd, 0xa5, 0xa9, 0xb3, 0x59, 0x6c, 0xc6, + 0xdf, 0x2c, 0x1d, 0xd6, 0xb5, 0xe8, 0xc1, 0x01, 0x9f, 0x5c, 0xf4, 0xd0, 0x09, 0x7f, 0xad, 0x97, + 0xc3, 0x0b, 0x80, 0x4c, 0xd5, 0xf7, 0x99, 0x88, 0x4f, 0xdd, 0x0b, 0x80, 0x85, 0xf8, 0x17, 0x00, + 0x8c, 0xe2, 0x2a, 0x1d, 0x73, 0x75, 0xd4, 0x58, 0x75, 0x4f, 0xf1, 0xce, 0x31, 0x63, 0xad, 0x97, + 0xc3, 0xa9, 0x7a, 0xdb, 0xb0, 0xee, 0x54, 0xbd, 0xb5, 0xf9, 0x53, 0x75, 0xc5, 0xe0, 0xd2, 0xb7, + 0x86, 0xba, 0x39, 0xdd, 0xa5, 0xd7, 0x76, 0x7f, 0xe9, 0x2d, 0xce, 0x7d, 0x22, 0x3b, 0x62, 0x59, + 0x24, 0x52, 0x9e, 0xfb, 0x4e, 0x64, 0x92, 0x19, 0x72, 0x22, 0x33, 0x58, 0x10, 0xfc, 0xcd, 0x28, + 0xb8, 0xea, 0x52, 0x7c, 0x52, 0x34, 0xba, 0x3b, 0xfd, 0xb1, 0x5a, 0x92, 0xb8, 0x7c, 0xf4, 0x7b, + 0x40, 0x19, 0x7e, 0x11, 0xbc, 0x23, 0x4d, 0xfa, 0x6e, 0x12, 0x0a, 0x60, 0x6f, 0x69, 0xaa, 0xfc, + 0x98, 0x53, 0xf2, 0xdb, 0x83, 0x79, 0x9d, 0x7f, 0xda, 0xe5, 0xaa, 0x50, 0xfe, 0xa9, 0x62, 0x80, + 0x99, 0xc8, 0x3f, 0x1d, 0x18, 0xde, 0x2d, 0x24, 0x32, 0x49, 0x12, 0xe7, 0x6e, 0xa1, 0x42, 0x98, + 0x97, 0xc9, 0xeb, 0xfd, 0x20, 0x1e, 0x3b, 0xd2, 0x0c, 0xa9, 0xd2, 0x2d, 0x5f, 0x04, 0x94, 0x2e, + 0x6d, 0x0e, 0x62, 0xf5, 0x15, 0x68, 0xa7, 0x62, 0xfb, 0x2c, 0x12, 0x8b, 0xb2, 0x73, 0x05, 0xda, + 0x2d, 0xb7, 0x04, 0x89, 0x2b, 0x50, 0xaf, 0x03, 0xe8, 0xff, 0x61, 0x14, 0xbc, 0x6b, 0x73, 0x6d, + 0x17, 0xab, 0x32, 0xdc, 0xf1, 0x85, 0xb4, 0x59, 0x55, 0x8c, 0xbb, 0x97, 0xf2, 0x81, 0x92, 0xfc, + 0x6e, 0x14, 0x7c, 0xdb, 0x46, 0x9b, 0x4b, 0xfe, 0x65, 0x94, 0x66, 0xd1, 0x49, 0xc6, 0xc2, 0x8f, + 0x7c, 0x41, 0x2d, 0x54, 0x95, 0xe3, 0xce, 0x65, 0x5c, 0xf0, 0x49, 0xa7, 0x9d, 0x6f, 0xc6, 0xe1, + 0xed, 0x36, 0x3d, 0x2b, 0x1d, 0xe7, 0xb7, 0xad, 0x81, 0xb4, 0x7e, 0x38, 0xd1, 0x3f, 0x9b, 0x0d, + 0xe0, 0xcc, 0x5f, 0xc1, 0xd7, 0xa8, 0x89, 0x37, 0x7f, 0x75, 0xe2, 0x20, 0x2c, 0x64, 0x7e, 0x64, + 0x0a, 0xd7, 0xb3, 0xeb, 0x76, 0x6f, 0x20, 0x73, 0x8a, 0x6d, 0x0d, 0xa4, 0x41, 0xf5, 0x97, 0xc1, + 0x3b, 0x5d, 0x55, 0x78, 0xac, 0xd9, 0xee, 0x0d, 0x85, 0xde, 0x6a, 0x76, 0x86, 0x3b, 0xe8, 0xeb, + 0x9b, 0x87, 0x69, 0x25, 0x78, 0x79, 0x31, 0x3d, 0xe5, 0xe7, 0xf2, 0xf9, 0xd9, 0x5e, 0x26, 0x00, + 0x18, 0x1b, 0x04, 0x71, 0x7d, 0xe3, 0x26, 0x3b, 0x52, 0xfa, 0x99, 0xba, 0x22, 0xa4, 0x0c, 0xa2, + 0x47, 0xca, 0x26, 0xf5, 0x22, 0x29, 0x6b, 0xa5, 0xdf, 0xd4, 0xd7, 0xdc, 0x45, 0xed, 0xbe, 0xab, + 0xaf, 0xf7, 0x83, 0xfa, 0x10, 0xb2, 0x9f, 0x66, 0xec, 0xc9, 0x8b, 0x17, 0x19, 0x8f, 0x12, 0x74, + 0x08, 0xa9, 0x2d, 0x63, 0x30, 0x11, 0x87, 0x10, 0x84, 0xe8, 0x4d, 0xa4, 0x36, 0xd4, 0xa3, 0x53, + 0x46, 0xbe, 0xd9, 0x75, 0x33, 0xcc, 0xc4, 0x26, 0xe2, 0xc0, 0x74, 0x4a, 0x5b, 0x1b, 0x9f, 0x15, + 0x4d, 0xf0, 0xeb, 0x5d, 0xaf, 0xd6, 0x42, 0xa4, 0xb4, 0x36, 0xa1, 0x33, 0xa5, 0xfa, 0xf7, 0x3d, + 0x7e, 0x9e, 0x37, 0x41, 0x1d, 0x15, 0x95, 0x36, 0x22, 0x53, 0xc2, 0x0c, 0x04, 0xfe, 0x24, 0xf8, + 0xff, 0x26, 0x70, 0xc9, 0x8b, 0x70, 0xc5, 0xe1, 0x50, 0x1a, 0xef, 0x17, 0xd7, 0x48, 0xbb, 0x3e, + 0x03, 0x3d, 0x8e, 0x96, 0xe9, 0x4c, 0x2d, 0x2a, 0xed, 0x1c, 0xc1, 0x67, 0x20, 0xcd, 0x8c, 0x0d, + 0x88, 0x38, 0x03, 0x91, 0x30, 0x68, 0xfe, 0x7d, 0x14, 0x5c, 0xd7, 0xcc, 0x03, 0x79, 0x71, 0x75, + 0x90, 0xbf, 0xe0, 0xf5, 0x81, 0xb0, 0x3e, 0xa4, 0x55, 0xe1, 0xc7, 0x54, 0x48, 0x37, 0xaf, 0x8a, + 0xf2, 0xbd, 0x4b, 0xfb, 0xe9, 0x34, 0x49, 0x1e, 0xaa, 0xdb, 0xb5, 0x78, 0xbf, 0xe4, 0xf3, 0xd6, + 0x03, 0xa5, 0x49, 0xea, 0xec, 0x8d, 0x39, 0x22, 0x4d, 0xf2, 0xf1, 0xc6, 0x5e, 0x4b, 0xa9, 0x37, + 0x3b, 0xcc, 0x9d, 0x61, 0x11, 0xad, 0x7d, 0xe6, 0xee, 0xa5, 0x7c, 0xf4, 0xfb, 0x9b, 0x2a, 0x48, + 0xc6, 0x73, 0xfc, 0xb6, 0xa7, 0xa3, 0xd4, 0x46, 0xe2, 0xfd, 0xad, 0x03, 0xe9, 0x55, 0x48, 0x9a, + 0xda, 0xa3, 0xd2, 0x24, 0xcb, 0xd0, 0x2a, 0xa4, 0x5c, 0x15, 0x40, 0xac, 0x42, 0x4e, 0x10, 0x74, + 0x8e, 0x82, 0x37, 0xea, 0xce, 0x7d, 0x5a, 0xb2, 0x65, 0xca, 0xf0, 0x2b, 0x91, 0x61, 0x21, 0xa6, + 0xb3, 0x4d, 0xe8, 0xe7, 0xda, 0x67, 0x79, 0x55, 0x64, 0x51, 0x75, 0x0a, 0xaf, 0x14, 0x76, 0x9d, + 0xa5, 0x11, 0xbf, 0x53, 0xdc, 0xec, 0xa1, 0xf4, 0xf1, 0x47, 0xda, 0xd4, 0x8a, 0xb1, 0xea, 0x76, + 0xed, 0xac, 0x1a, 0x6b, 0xbd, 0x9c, 0x5e, 0x9d, 0xef, 0x65, 0x3c, 0x3e, 0x83, 0x65, 0xce, 0xae, + 0x75, 0x63, 0xc1, 0xeb, 0xdc, 0x0d, 0x1f, 0xa2, 0x17, 0xba, 0xc6, 0x70, 0xc4, 0x8a, 0x2c, 0x8a, + 0xf1, 0xfb, 0x59, 0xeb, 0x03, 0x36, 0x62, 0xa1, 0xc3, 0x0c, 0x2a, 0x2e, 0xbc, 0xcb, 0xb9, 0x8a, + 0x8b, 0x9e, 0xe5, 0x6e, 0xf8, 0x10, 0xbd, 0xd4, 0x37, 0x86, 0x69, 0x91, 0xa5, 0x02, 0x8d, 0x8d, + 0xd6, 0xa3, 0xb1, 0x10, 0x63, 0xc3, 0x26, 0x50, 0xc8, 0x43, 0x56, 0xce, 0x98, 0x33, 0x64, 0x63, + 0xf1, 0x86, 0x94, 0x04, 0x84, 0x7c, 0x1c, 0x7c, 0xa9, 0xad, 0x3b, 0x2f, 0x2e, 0xc2, 0x6b, 0xae, + 0x6a, 0xf1, 0xe2, 0x42, 0x05, 0xbc, 0x4e, 0x03, 0xa8, 0x88, 0x4f, 0xa3, 0x4a, 0xb8, 0x8b, 0xd8, + 0x58, 0xbc, 0x45, 0x94, 0x84, 0xde, 0x87, 0xda, 0x22, 0x2e, 0x04, 0xda, 0x87, 0xa0, 0x00, 0xc6, + 0x63, 0xc2, 0x35, 0xd2, 0xae, 0xa7, 0x57, 0xdb, 0x2b, 0x4c, 0xec, 0xa7, 0x2c, 0x4b, 0x2a, 0x34, + 0xbd, 0xa0, 0xdd, 0xa5, 0x95, 0x98, 0x5e, 0x5d, 0x0a, 0x0d, 0x25, 0xb8, 0xe9, 0x71, 0xd5, 0x0e, + 0x5d, 0xf2, 0xdc, 0xf0, 0x21, 0x3a, 0x2f, 0x69, 0x0c, 0xc6, 0xc5, 0xb9, 0xab, 0x3c, 0x8e, 0x7b, + 0xf3, 0xd5, 0x3e, 0x0c, 0x14, 0xfe, 0x34, 0x0a, 0xde, 0x53, 0x12, 0x87, 0x7c, 0xc9, 0x8e, 0xf9, + 0xfd, 0x97, 0x69, 0x25, 0xd2, 0x7c, 0x06, 0x5b, 0xd3, 0x5d, 0x22, 0x92, 0x0b, 0x56, 0xf2, 0xdf, + 0xb9, 0x9c, 0x93, 0xde, 0x21, 0x51, 0x59, 0x1e, 0xb3, 0x73, 0xe7, 0x0e, 0x89, 0x23, 0x2a, 0x8e, + 0xd8, 0x21, 0x7d, 0xbc, 0x3e, 0x0d, 0x2b, 0x71, 0xf8, 0x06, 0xf0, 0x98, 0xcb, 0x64, 0x85, 0x8a, + 0x86, 0x41, 0xe2, 0x5c, 0xe0, 0x75, 0xd0, 0xc9, 0xba, 0xd2, 0xd7, 0x83, 0x74, 0x9d, 0x88, 0xd3, + 0x1d, 0xa8, 0x1b, 0x03, 0x48, 0x87, 0x94, 0x7e, 0xfd, 0xa1, 0xa4, 0xba, 0x8f, 0x3f, 0x1b, 0x03, + 0x48, 0xe3, 0x64, 0x6d, 0x56, 0xeb, 0x5e, 0x14, 0x9f, 0xcd, 0x4a, 0xbe, 0xc8, 0x93, 0x5d, 0x9e, + 0xf1, 0x12, 0x9d, 0xac, 0xad, 0x52, 0x23, 0x94, 0x38, 0x59, 0xf7, 0xb8, 0xe8, 0xc4, 0xc0, 0x2c, + 0xc5, 0x24, 0x4b, 0x67, 0xf8, 0x78, 0x62, 0x05, 0x6a, 0x00, 0x22, 0x31, 0x70, 0x82, 0x8e, 0x41, + 0xd4, 0x1e, 0x5f, 0x44, 0x1a, 0x47, 0x59, 0xab, 0xb7, 0x4d, 0x87, 0xb1, 0xc0, 0xde, 0x41, 0xe4, + 0x70, 0x70, 0xd4, 0xf3, 0x78, 0x51, 0xe6, 0x07, 0xb9, 0xe0, 0x64, 0x3d, 0x25, 0xd0, 0x5b, 0x4f, + 0x03, 0xd4, 0xd9, 0x44, 0x63, 0x3e, 0x66, 0x2f, 0xeb, 0xd2, 0xd4, 0xff, 0x09, 0x1d, 0x4b, 0x4e, + 0xfd, 0xfb, 0x18, 0xec, 0x44, 0x36, 0xe1, 0xe2, 0x50, 0x65, 0x40, 0xa4, 0x1d, 0x30, 0x1e, 0x6f, + 0x7b, 0x98, 0xac, 0xf7, 0x83, 0x6e, 0x9d, 0xa9, 0xb8, 0xc8, 0x98, 0x4f, 0xa7, 0x01, 0x86, 0xe8, + 0x48, 0x50, 0xdf, 0xd6, 0x5b, 0xf5, 0x39, 0x65, 0xf1, 0x59, 0xe7, 0x8d, 0xd7, 0x2e, 0x68, 0x8b, + 0x10, 0xb7, 0xf5, 0x04, 0xea, 0xee, 0xa2, 0x83, 0x98, 0xe7, 0xbe, 0x2e, 0xaa, 0xed, 0x43, 0xba, + 0x08, 0x38, 0x7d, 0xba, 0x53, 0x56, 0x18, 0x99, 0x6d, 0x37, 0x6d, 0x12, 0x11, 0x4c, 0x88, 0x38, + 0xdd, 0x91, 0xb0, 0xbe, 0x27, 0xc5, 0x9a, 0x87, 0xdd, 0xaf, 0x9e, 0x3a, 0x51, 0x0e, 0xe9, 0xaf, + 0x9e, 0x28, 0x96, 0xae, 0x64, 0x3b, 0x46, 0x7a, 0xa2, 0xd8, 0xe3, 0xe4, 0xf6, 0x30, 0x58, 0x3f, + 0x2a, 0x5b, 0x9a, 0xbb, 0x19, 0x8b, 0xca, 0x56, 0x75, 0xcb, 0x13, 0x48, 0x63, 0xc4, 0xa5, 0x9c, + 0x07, 0x47, 0x4b, 0x98, 0xa5, 0xbc, 0xcb, 0x73, 0xc1, 0x72, 0xe1, 0x5a, 0xc2, 0xec, 0x60, 0x00, + 0xfa, 0x96, 0x30, 0xca, 0x01, 0x8d, 0xdb, 0xfd, 0x34, 0x63, 0x53, 0x26, 0x1e, 0x47, 0x73, 0xe6, + 0x1a, 0xb7, 0xcd, 0x55, 0x03, 0xd8, 0x7d, 0xe3, 0x16, 0x71, 0x68, 0xca, 0x1f, 0xcc, 0xa3, 0x99, + 0x52, 0x71, 0x78, 0x37, 0xf6, 0x8e, 0xcc, 0x7a, 0x3f, 0x88, 0x74, 0x3e, 0x4d, 0x13, 0xc6, 0x3d, + 0x3a, 0x8d, 0x7d, 0x88, 0x0e, 0x06, 0x51, 0xe6, 0x54, 0xd7, 0xb6, 0x3d, 0x8f, 0x4c, 0xf2, 0x04, + 0x4e, 0x61, 0x63, 0xa2, 0x51, 0x10, 0xe7, 0xcb, 0x9c, 0x08, 0x1e, 0xcd, 0x0f, 0x79, 0x85, 0xe6, + 0x9b, 0x1f, 0xea, 0x86, 0x6c, 0xc8, 0xfc, 0x70, 0xc1, 0xa0, 0xf9, 0x73, 0x98, 0x1f, 0x7b, 0x91, + 0x88, 0xea, 0x73, 0xf4, 0xa7, 0x29, 0x3b, 0x87, 0x63, 0x9c, 0xa3, 0xbe, 0x92, 0x1a, 0xd7, 0x18, + 0x3e, 0xd3, 0x6d, 0x0f, 0xe6, 0x3d, 0xda, 0x90, 0x9d, 0xf7, 0x6a, 0xa3, 0x34, 0x7d, 0x7b, 0x30, + 0xef, 0xd1, 0x86, 0x2f, 0x77, 0x7b, 0xb5, 0xd1, 0xe7, 0xbb, 0xdb, 0x83, 0x79, 0xd0, 0xfe, 0xed, + 0x28, 0xb8, 0xda, 0x11, 0xaf, 0x73, 0xa0, 0x58, 0xa4, 0x4b, 0xe6, 0x4a, 0xe5, 0xec, 0x78, 0x0a, + 0xf5, 0xa5, 0x72, 0xb4, 0x0b, 0x94, 0xe2, 0x8f, 0xa3, 0xe0, 0x5d, 0x57, 0x29, 0x9e, 0xf2, 0x2a, + 0x6d, 0x9e, 0x1c, 0xef, 0x0e, 0x08, 0x2a, 0x61, 0xdf, 0x81, 0xc5, 0xe7, 0xa4, 0x1f, 0x6c, 0x2c, + 0xb4, 0x1e, 0xa7, 0x7c, 0x51, 0xc6, 0xf8, 0xc1, 0xc6, 0x8e, 0xa7, 0x28, 0xe2, 0x05, 0x83, 0xa6, + 0xf5, 0x0b, 0x86, 0xc5, 0x98, 0x4f, 0x27, 0xbe, 0x5e, 0x75, 0xbe, 0x9e, 0xec, 0x0c, 0x77, 0x00, + 0xf9, 0xdf, 0xcb, 0x9c, 0x1e, 0xeb, 0xc3, 0x24, 0xb8, 0x33, 0x24, 0x22, 0x9a, 0x08, 0x77, 0x2f, + 0xe5, 0x03, 0x05, 0xf9, 0xc7, 0x28, 0xb8, 0xe1, 0x2c, 0x88, 0xfd, 0x7a, 0xf7, 0xfd, 0x21, 0xb1, + 0xdd, 0xaf, 0x78, 0x3f, 0xf8, 0x5f, 0x5c, 0xa1, 0x74, 0x7f, 0x96, 0x47, 0x6b, 0xe9, 0xd1, 0x7c, + 0xf2, 0xfa, 0xa4, 0x4c, 0x58, 0x09, 0x33, 0xd6, 0x37, 0xe8, 0x34, 0x8c, 0xe7, 0xed, 0x77, 0x2f, + 0xe9, 0x05, 0xc5, 0xf9, 0xeb, 0x28, 0x58, 0xb1, 0x60, 0xf8, 0x34, 0xc9, 0x28, 0x8f, 0x2f, 0xb2, + 0x41, 0xe3, 0x02, 0x7d, 0x7c, 0x59, 0x37, 0x9c, 0xa1, 0xd6, 0xed, 0x06, 0x8b, 0xb7, 0x2b, 0x43, + 0x6d, 0x9a, 0x15, 0x2d, 0xda, 0x6b, 0xbd, 0x9c, 0x4b, 0xe4, 0xfe, 0xcb, 0x22, 0xca, 0x13, 0x5a, + 0xa4, 0xb5, 0xf7, 0x8b, 0x28, 0x0e, 0x67, 0xf6, 0xb5, 0xf5, 0x88, 0xcb, 0x9d, 0x68, 0x83, 0xf2, + 0x57, 0x88, 0x37, 0xb3, 0xef, 0xa0, 0x84, 0x1a, 0x4c, 0x3b, 0x9f, 0x1a, 0x9a, 0x6d, 0xb7, 0x86, + 0xa0, 0x68, 0x8d, 0x53, 0x6a, 0xea, 0xc2, 0xe0, 0xb6, 0x2f, 0x4a, 0xe7, 0xd2, 0x60, 0x6b, 0x20, + 0x4d, 0xc8, 0x4e, 0x99, 0x78, 0xc8, 0xa2, 0x84, 0x95, 0x5e, 0x59, 0x45, 0x0d, 0x92, 0x35, 0x69, + 0x97, 0xec, 0x2e, 0xcf, 0x16, 0xf3, 0x1c, 0x3a, 0x93, 0x94, 0x35, 0xa9, 0x7e, 0x59, 0x44, 0xe3, + 0x33, 0x8d, 0x96, 0x6d, 0xfe, 0xad, 0xcf, 0x2d, 0x7f, 0x18, 0xeb, 0x1f, 0xfd, 0x6c, 0x0e, 0x62, + 0xe9, 0x7a, 0xc2, 0x30, 0xea, 0xa9, 0x27, 0x1a, 0x49, 0x5b, 0x03, 0x69, 0x7c, 0xb8, 0x30, 0x64, + 0xd5, 0x78, 0xda, 0xee, 0x89, 0xd5, 0x19, 0x52, 0x3b, 0xc3, 0x1d, 0xf0, 0x51, 0x0e, 0x46, 0x55, + 0xbd, 0x74, 0xef, 0xa7, 0x59, 0x16, 0x6e, 0x7a, 0x86, 0x89, 0x84, 0xbc, 0x47, 0x39, 0x07, 0x4c, + 0x8c, 0x64, 0x79, 0xf4, 0xc9, 0xc3, 0xbe, 0x38, 0x0d, 0x35, 0x68, 0x24, 0x9b, 0x34, 0x3a, 0x12, + 0x18, 0x4d, 0xad, 0x6a, 0x3b, 0xf6, 0x37, 0x5c, 0xa7, 0xc2, 0xdb, 0x83, 0x79, 0x74, 0xdb, 0xde, + 0x50, 0x53, 0x5e, 0x0a, 0xd7, 0x6d, 0x7b, 0x1b, 0x62, 0x6a, 0x5e, 0x8a, 0xdf, 0xec, 0xa1, 0x3a, + 0xd7, 0x6c, 0x39, 0x3c, 0xde, 0xe8, 0x0f, 0x7d, 0x5d, 0xc3, 0xa8, 0xf9, 0x2c, 0x17, 0x83, 0xbe, + 0x61, 0x44, 0x39, 0x18, 0x5f, 0xdd, 0x29, 0x4e, 0xde, 0x04, 0x16, 0x05, 0x8b, 0xca, 0x28, 0x8f, + 0xf1, 0x3f, 0xf9, 0xd5, 0x01, 0x3b, 0x24, 0xf1, 0xd5, 0x9d, 0xdf, 0x03, 0x5d, 0xe2, 0xda, 0x9f, + 0x7e, 0x3a, 0x8e, 0x8c, 0xea, 0x1b, 0x4b, 0xfb, 0xcb, 0xcf, 0x8d, 0x01, 0x24, 0xbe, 0xc4, 0x95, + 0x80, 0x3a, 0x0a, 0xb6, 0xa2, 0x1f, 0x79, 0x42, 0xd9, 0xa8, 0x2f, 0xf3, 0xa7, 0x5d, 0xd0, 0xbe, + 0x27, 0x13, 0xaf, 0x29, 0x13, 0x9f, 0xb0, 0x0b, 0xd7, 0xbe, 0xa7, 0x52, 0xb3, 0x16, 0xf1, 0xed, + 0x7b, 0x5d, 0x14, 0x25, 0x0e, 0x66, 0x72, 0xbd, 0xea, 0xf1, 0x37, 0x73, 0xea, 0xb5, 0x5e, 0x0e, + 0xad, 0xfb, 0x7b, 0xe9, 0xd2, 0x3a, 0x39, 0x3b, 0x0a, 0xba, 0x97, 0x2e, 0xdd, 0x07, 0xe7, 0xcd, + 0x41, 0x2c, 0xbe, 0x20, 0x8e, 0x04, 0x7b, 0x29, 0x6f, 0x6e, 0x1d, 0xc5, 0x6d, 0xec, 0x9d, 0xab, + 0xdb, 0xf5, 0x7e, 0x10, 0xe9, 0xc8, 0x39, 0x94, 0xcc, 0x98, 0x53, 0x67, 0x6c, 0x02, 0xde, 0x8b, + 0x68, 0x04, 0xea, 0xaf, 0x09, 0x9e, 0x96, 0x3c, 0x66, 0x55, 0xb5, 0x5b, 0x4f, 0x8f, 0x0c, 0x7d, + 0x4d, 0x00, 0xb6, 0x71, 0x6b, 0x24, 0xbe, 0x26, 0xe8, 0x40, 0x10, 0xfb, 0x61, 0xf0, 0xfa, 0x23, + 0x3e, 0x9b, 0xb2, 0x3c, 0x09, 0xdf, 0xb3, 0xdf, 0xef, 0xf9, 0x6c, 0x5c, 0xff, 0xac, 0xe2, 0xad, + 0x50, 0x66, 0xfd, 0xd8, 0xba, 0xc7, 0x4e, 0x16, 0xb3, 0xe9, 0x45, 0x1e, 0xa3, 0xc7, 0xd6, 0xe6, + 0xf7, 0x71, 0x6d, 0x20, 0x1e, 0x5b, 0x2d, 0x40, 0xbf, 0x36, 0x36, 0x3f, 0x1f, 0x9f, 0x96, 0xac, + 0xf3, 0xce, 0xde, 0x3a, 0xb4, 0x26, 0xe2, 0xb5, 0x11, 0x21, 0xa8, 0x94, 0xc7, 0x25, 0x63, 0xce, + 0x52, 0xd6, 0x06, 0x6f, 0x29, 0x01, 0xd0, 0x9b, 0x6d, 0xf3, 0x73, 0xfb, 0xaa, 0xf9, 0x88, 0xc7, + 0x51, 0x56, 0x09, 0x5e, 0xe2, 0x7b, 0xa1, 0xd6, 0x15, 0x43, 0xc4, 0x66, 0x4b, 0xc2, 0xa8, 0x0e, + 0x4f, 0xd3, 0x7c, 0xe6, 0xac, 0x43, 0x6d, 0xf0, 0xd6, 0x01, 0x00, 0x3d, 0x41, 0x0f, 0x99, 0x28, + 0xd3, 0xb8, 0x9a, 0x32, 0xf1, 0x34, 0x2a, 0xa3, 0x39, 0x13, 0xac, 0xc4, 0xff, 0x9c, 0x02, 0x90, + 0xb1, 0xc5, 0x10, 0x13, 0x94, 0x62, 0x41, 0xf0, 0x87, 0xc1, 0xdb, 0xf5, 0xcc, 0x65, 0x39, 0xfc, + 0xb9, 0x8e, 0xfb, 0xcd, 0x5f, 0xb2, 0x09, 0xaf, 0xa8, 0x18, 0x53, 0x51, 0xb2, 0x68, 0x2e, 0x63, + 0xbf, 0xa5, 0x7e, 0x6f, 0xc0, 0x9d, 0xd1, 0xbd, 0xf7, 0xff, 0xf9, 0xc5, 0xca, 0xe8, 0xf3, 0x2f, + 0x56, 0x46, 0xff, 0xfe, 0x62, 0x65, 0xf4, 0xb7, 0x57, 0x2b, 0xaf, 0x7d, 0xfe, 0x6a, 0xe5, 0xb5, + 0x7f, 0xbd, 0x5a, 0x79, 0xed, 0xb3, 0xd7, 0xe1, 0x2f, 0xea, 0x9c, 0xfc, 0x5f, 0xf3, 0x77, 0x71, + 0xee, 0xfe, 0x37, 0x00, 0x00, 0xff, 0xff, 0xe8, 0xee, 0x93, 0x37, 0x75, 0x47, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -312,6 +313,7 @@ type ClientCommandsClient interface { ObjectSetBreadcrumbs(ctx context.Context, in *pb.RpcObjectSetBreadcrumbsRequest, opts ...grpc.CallOption) (*pb.RpcObjectSetBreadcrumbsResponse, error) ObjectUndo(ctx context.Context, in *pb.RpcObjectUndoRequest, opts ...grpc.CallOption) (*pb.RpcObjectUndoResponse, error) ObjectRedo(ctx context.Context, in *pb.RpcObjectRedoRequest, opts ...grpc.CallOption) (*pb.RpcObjectRedoResponse, error) + ObjectImportMarkdown(ctx context.Context, in *pb.RpcObjectImportMarkdownRequest, opts ...grpc.CallOption) (*pb.RpcObjectImportMarkdownResponse, error) ObjectListExport(ctx context.Context, in *pb.RpcObjectListExportRequest, opts ...grpc.CallOption) (*pb.RpcObjectListExportResponse, error) ObjectBookmarkFetch(ctx context.Context, in *pb.RpcObjectBookmarkFetchRequest, opts ...grpc.CallOption) (*pb.RpcObjectBookmarkFetchResponse, error) ObjectToBookmark(ctx context.Context, in *pb.RpcObjectToBookmarkRequest, opts ...grpc.CallOption) (*pb.RpcObjectToBookmarkResponse, error) @@ -953,6 +955,15 @@ func (c *clientCommandsClient) ObjectRedo(ctx context.Context, in *pb.RpcObjectR return out, nil } +func (c *clientCommandsClient) ObjectImportMarkdown(ctx context.Context, in *pb.RpcObjectImportMarkdownRequest, opts ...grpc.CallOption) (*pb.RpcObjectImportMarkdownResponse, error) { + out := new(pb.RpcObjectImportMarkdownResponse) + err := c.cc.Invoke(ctx, "/anytype.ClientCommands/ObjectImportMarkdown", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *clientCommandsClient) ObjectListExport(ctx context.Context, in *pb.RpcObjectListExportRequest, opts ...grpc.CallOption) (*pb.RpcObjectListExportResponse, error) { out := new(pb.RpcObjectListExportResponse) err := c.cc.Invoke(ctx, "/anytype.ClientCommands/ObjectListExport", in, out, opts...) @@ -2062,6 +2073,7 @@ type ClientCommandsServer interface { ObjectSetBreadcrumbs(context.Context, *pb.RpcObjectSetBreadcrumbsRequest) *pb.RpcObjectSetBreadcrumbsResponse ObjectUndo(context.Context, *pb.RpcObjectUndoRequest) *pb.RpcObjectUndoResponse ObjectRedo(context.Context, *pb.RpcObjectRedoRequest) *pb.RpcObjectRedoResponse + ObjectImportMarkdown(context.Context, *pb.RpcObjectImportMarkdownRequest) *pb.RpcObjectImportMarkdownResponse ObjectListExport(context.Context, *pb.RpcObjectListExportRequest) *pb.RpcObjectListExportResponse ObjectBookmarkFetch(context.Context, *pb.RpcObjectBookmarkFetchRequest) *pb.RpcObjectBookmarkFetchResponse ObjectToBookmark(context.Context, *pb.RpcObjectToBookmarkRequest) *pb.RpcObjectToBookmarkResponse @@ -2369,6 +2381,9 @@ func (*UnimplementedClientCommandsServer) ObjectUndo(ctx context.Context, req *p func (*UnimplementedClientCommandsServer) ObjectRedo(ctx context.Context, req *pb.RpcObjectRedoRequest) *pb.RpcObjectRedoResponse { return nil } +func (*UnimplementedClientCommandsServer) ObjectImportMarkdown(ctx context.Context, req *pb.RpcObjectImportMarkdownRequest) *pb.RpcObjectImportMarkdownResponse { + return nil +} func (*UnimplementedClientCommandsServer) ObjectListExport(ctx context.Context, req *pb.RpcObjectListExportRequest) *pb.RpcObjectListExportResponse { return nil } @@ -3703,6 +3718,24 @@ func _ClientCommands_ObjectRedo_Handler(srv interface{}, ctx context.Context, de return interceptor(ctx, in, info, handler) } +func _ClientCommands_ObjectImportMarkdown_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(pb.RpcObjectImportMarkdownRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClientCommandsServer).ObjectImportMarkdown(ctx, in), nil + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/anytype.ClientCommands/ObjectImportMarkdown", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClientCommandsServer).ObjectImportMarkdown(ctx, req.(*pb.RpcObjectImportMarkdownRequest)), nil + } + return interceptor(ctx, in, info, handler) +} + func _ClientCommands_ObjectListExport_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(pb.RpcObjectListExportRequest) if err := dec(in); err != nil { @@ -5965,6 +5998,10 @@ var _ClientCommands_serviceDesc = grpc.ServiceDesc{ MethodName: "ObjectRedo", Handler: _ClientCommands_ObjectRedo_Handler, }, + { + MethodName: "ObjectImportMarkdown", + Handler: _ClientCommands_ObjectImportMarkdown_Handler, + }, { MethodName: "ObjectListExport", Handler: _ClientCommands_ObjectListExport_Handler, diff --git a/pkg/lib/core/core.go b/pkg/lib/core/core.go index 4cf34912b..db132092e 100644 --- a/pkg/lib/core/core.go +++ b/pkg/lib/core/core.go @@ -23,8 +23,11 @@ import ( "github.com/anytypeio/go-anytype-middleware/pkg/lib/pin" "github.com/anytypeio/go-anytype-middleware/pkg/lib/threads" "github.com/anytypeio/go-anytype-middleware/pkg/lib/util" + "github.com/libp2p/go-libp2p/core/peer" + pstore "github.com/libp2p/go-libp2p/core/peerstore" "github.com/libp2p/go-libp2p/p2p/discovery/mdns" "github.com/textileio/go-threads/core/net" + "io" "os" "path/filepath" "strings" @@ -57,11 +60,15 @@ type Service interface { FileByHash(ctx context.Context, hash string) (File, error) FileAdd(ctx context.Context, opts ...files.AddOption) (File, error) + FileAddWithBytes(ctx context.Context, content []byte, filename string) (File, error) // deprecated + FileAddWithReader(ctx context.Context, content io.ReadSeeker, filename string) (File, error) // deprecated FileGetKeys(hash string) (*files.FileKeys, error) FileStoreKeys(fileKeys ...files.FileKeys) error ImageByHash(ctx context.Context, hash string) (Image, error) ImageAdd(ctx context.Context, opts ...files.AddOption) (Image, error) + ImageAddWithBytes(ctx context.Context, content []byte, filename string) (Image, error) // deprecated + ImageAddWithReader(ctx context.Context, content io.ReadSeeker, filename string) (Image, error) // deprecated GetAllWorkspaces() ([]string, error) GetWorkspaceIdForObject(objectId string) (string, error) @@ -227,6 +234,10 @@ func (a *Anytype) PredefinedBlocks() threads.DerivedSmartblockIds { return a.predefinedBlockIds } +func (a *Anytype) HandlePeerFound(p peer.AddrInfo) { + a.ThreadService().Threads().Host().Peerstore().AddAddrs(p.ID, p.Addrs, pstore.ConnectedAddrTTL) +} + func (a *Anytype) Start() error { err := a.RunMigrations() if err != nil { diff --git a/pkg/lib/core/files.go b/pkg/lib/core/files.go index 9c41296a7..d6ee55fef 100644 --- a/pkg/lib/core/files.go +++ b/pkg/lib/core/files.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "github.com/ipfs/go-cid" + "io" "time" "github.com/anytypeio/go-anytype-middleware/pkg/lib/files" @@ -164,3 +165,11 @@ func (a *Anytype) FileAdd(ctx context.Context, options ...files.AddOption) (File return f, nil } + +func (a *Anytype) FileAddWithReader(ctx context.Context, content io.ReadSeeker, filename string) (File, error) { + return a.FileAdd(ctx, files.WithReader(content), files.WithName(filename)) +} + +func (a *Anytype) FileAddWithBytes(ctx context.Context, content []byte, filename string) (File, error) { + return a.FileAdd(ctx, files.WithBytes(content), files.WithName(filename)) +} diff --git a/pkg/lib/core/images.go b/pkg/lib/core/images.go index 43156cce5..2c46c1d25 100644 --- a/pkg/lib/core/images.go +++ b/pkg/lib/core/images.go @@ -5,6 +5,7 @@ import ( "fmt" "github.com/anytypeio/go-anytype-middleware/pkg/lib/files" "github.com/anytypeio/go-anytype-middleware/pkg/lib/pb/storage" + "io" ) var ErrImageNotFound = fmt.Errorf("image not found") @@ -86,3 +87,10 @@ func (a *Anytype) ImageAdd(ctx context.Context, options ...files.AddOption) (Ima return img, nil } +func (a *Anytype) ImageAddWithBytes(ctx context.Context, content []byte, filename string) (Image, error) { + return a.ImageAdd(ctx, files.WithBytes(content), files.WithName(filename)) +} + +func (a *Anytype) ImageAddWithReader(ctx context.Context, content io.ReadSeeker, filename string) (Image, error) { + return a.ImageAdd(ctx, files.WithReader(content), files.WithName(filename)) +} diff --git a/pkg/lib/core/ipfs.go b/pkg/lib/core/ipfs.go new file mode 100644 index 000000000..5a67f4305 --- /dev/null +++ b/pkg/lib/core/ipfs.go @@ -0,0 +1,9 @@ +package core + +import ( + "io" +) + +func (a *Anytype) IpfsReaderAtPath(pth string) (io.ReadCloser, error) { + return nil, nil +} diff --git a/pkg/lib/core/smartblock/smartblock.go b/pkg/lib/core/smartblock/smartblock.go index bb055fe35..ec1a4980b 100644 --- a/pkg/lib/core/smartblock/smartblock.go +++ b/pkg/lib/core/smartblock/smartblock.go @@ -117,6 +117,15 @@ func (sbt SmartBlockType) Valid() (err error) { return fmt.Errorf("unknown smartblock type") } +func (sbt SmartBlockType) IsOneOf(sbts ...SmartBlockType) bool { + for _, t := range sbts { + if t == sbt { + return true + } + } + return false +} + // Indexable determines if the object of specific type need to be proceeded by the indexer in order to appear in sets func (sbt SmartBlockType) Indexable() (details, outgoingLinks bool) { switch sbt { diff --git a/pkg/lib/core/smartblock_snapshot.go b/pkg/lib/core/smartblock_snapshot.go index 18fa98899..e3ad27432 100644 --- a/pkg/lib/core/smartblock_snapshot.go +++ b/pkg/lib/core/smartblock_snapshot.go @@ -5,6 +5,7 @@ import ( "fmt" "sort" "strings" + "time" "github.com/gogo/protobuf/types" cid "github.com/ipfs/go-cid" @@ -20,7 +21,12 @@ import ( type SmartBlockSnapshot interface { State() vclock.VClock + Creator() (string, error) + CreatedDate() *time.Time + ReceivedDate() *time.Time Blocks() ([]*model.Block, error) + Meta() (*SmartBlockMeta, error) + PublicWebURL() (string, error) } var ErrFailedToDecodeSnapshot = fmt.Errorf("failed to decode pb block snapshot") @@ -43,11 +49,29 @@ func (snapshot smartBlockSnapshot) State() vclock.VClock { return snapshot.state } +func (snapshot smartBlockSnapshot) Creator() (string, error) { + return snapshot.creator, nil +} + +func (snapshot smartBlockSnapshot) CreatedDate() *time.Time { + return nil +} + +func (snapshot smartBlockSnapshot) ReceivedDate() *time.Time { + return nil +} + func (snapshot smartBlockSnapshot) Blocks() ([]*model.Block, error) { // todo: blocks lazy loading return snapshot.blocks, nil } +func (snapshot smartBlockSnapshot) Meta() (*SmartBlockMeta, error) { + return &SmartBlockMeta{Details: snapshot.details}, nil +} + +func (snapshot smartBlockSnapshot) PublicWebURL() (string, error) { + return "", fmt.Errorf("not implemented") /*ctx, cancel := context.WithTimeout(context.Background(), time.Second*10) defer cancel() @@ -83,6 +107,8 @@ func (snapshot smartBlockSnapshot) Blocks() ([]*model.Block, error) { event.BodyID().String(), base64.RawURLEncoding.EncodeToString(bodyKeyBin), ), nil*/ +} + type SnapshotWithMetadata struct { storage.SmartBlockSnapshot Creator string diff --git a/pkg/lib/core/wallet.go b/pkg/lib/core/wallet.go index 00be84819..1bbf2d9a2 100644 --- a/pkg/lib/core/wallet.go +++ b/pkg/lib/core/wallet.go @@ -11,8 +11,26 @@ import ( ) var ErrRepoExists = fmt.Errorf("repo not empty, reinitializing would overwrite your account") +var ErrRepoDoesNotExist = fmt.Errorf("repo does not exist, initialization is required") +var ErrMigrationRequired = fmt.Errorf("repo needs migration") var ErrRepoCorrupted = fmt.Errorf("repo is corrupted") +func WalletListLocalAccounts(rootPath string) ([]string, error) { + repos, err := ioutil.ReadDir(rootPath) + if err != nil { + return nil, err + } + + var accounts []string + for _, f := range repos { + if len(f.Name()) == 48 { + accounts = append(accounts, f.Name()) + } + } + + return accounts, nil +} + func WalletGenerateMnemonic(wordCount int) (string, error) { w, err := wallet.WalletFromWordCount(wordCount) if err != nil { diff --git a/pkg/lib/database/subscription.go b/pkg/lib/database/subscription.go index dd821657e..2a0cf5067 100644 --- a/pkg/lib/database/subscription.go +++ b/pkg/lib/database/subscription.go @@ -18,10 +18,16 @@ type subscription struct { type Subscription interface { Close() + RecordChan() chan *types.Struct Subscribe(ids []string) (added []string) + Subscriptions() []string Publish(id string, msg *types.Struct) bool } +func (sub *subscription) RecordChan() chan *types.Struct { + return sub.ch +} + func (sub *subscription) Close() { sub.Lock() defer sub.Unlock() @@ -79,6 +85,23 @@ func (sub *subscription) Publish(id string, msg *types.Struct) bool { return false } +func (sub *subscription) SubscribedForId(id string) bool { + sub.RLock() + defer sub.RUnlock() + for _, idE := range sub.ids { + if idE == id { + return true + } + } + return false +} + +func (sub *subscription) Subscriptions() []string { + sub.RLock() + defer sub.RUnlock() + return sub.ids +} + func NewSubscription(ids []string, ch chan *types.Struct) Subscription { return &subscription{ids: ids, ch: ch, quit: make(chan struct{})} } diff --git a/pkg/lib/ipfs/helpers/resolver/resolver.go b/pkg/lib/ipfs/helpers/resolver/resolver.go index 2635959dc..acb1d258a 100644 --- a/pkg/lib/ipfs/helpers/resolver/resolver.go +++ b/pkg/lib/ipfs/helpers/resolver/resolver.go @@ -5,6 +5,7 @@ import ( "context" "errors" "fmt" + "time" path "github.com/ipfs/go-path" @@ -41,6 +42,14 @@ type Resolver struct { ResolveOnce ResolveOnce } +// NewBasicResolver constructs a new basic resolver. +func NewBasicResolver(ds ipld.DAGService) *Resolver { + return &Resolver{ + DAG: ds, + ResolveOnce: ResolveSingle, + } +} + // ResolveToLastNode walks the given path and returns the cid of the last node // referenced by the path func (r *Resolver) ResolveToLastNode(ctx context.Context, fpath path.Path) (cid.Cid, []string, error) { @@ -112,3 +121,46 @@ func (r *Resolver) ResolveToLastNode(ctx context.Context, fpath path.Path) (cid. func ResolveSingle(ctx context.Context, ds ipld.NodeGetter, nd ipld.Node, names []string) (*ipld.Link, []string, error) { return nd.ResolveLink(names) } + +// ResolveLinks iteratively resolves names by walking the link hierarchy. +// Every node is fetched from the DAGService, resolving the next name. +// Returns the list of nodes forming the path, starting with ndd. This list is +// guaranteed never to be empty. +// +// ResolveLinks(nd, []string{"foo", "bar", "baz"}) +// would retrieve "baz" in ("bar" in ("foo" in nd.Links).Links).Links +func (r *Resolver) ResolveLinks(ctx context.Context, ndd ipld.Node, names []string) ([]ipld.Node, error) { + + evt := log.EventBegin(ctx, "resolveLinks", logging.LoggableMap{"names": names}) + defer evt.Done() + result := make([]ipld.Node, 0, len(names)+1) + result = append(result, ndd) + nd := ndd // dup arg workaround + + // for each of the path components + for len(names) > 0 { + var cancel context.CancelFunc + ctx, cancel = context.WithTimeout(ctx, time.Minute) + defer cancel() + + lnk, rest, err := r.ResolveOnce(ctx, r.DAG, nd, names) + if err == dag.ErrLinkNotFound { + evt.Append(logging.LoggableMap{"error": err.Error()}) + return result, ErrNoLink{Name: names[0], Node: nd.Cid()} + } else if err != nil { + evt.Append(logging.LoggableMap{"error": err.Error()}) + return result, err + } + + nextnode, err := lnk.GetNode(ctx, r.DAG) + if err != nil { + evt.Append(logging.LoggableMap{"error": err.Error()}) + return result, err + } + + nd = nextnode + result = append(result, nextnode) + names = rest + } + return result, nil +} diff --git a/pkg/lib/localstore/objectstore/objects.go b/pkg/lib/localstore/objectstore/objects.go index d0a60aab0..066525291 100644 --- a/pkg/lib/localstore/objectstore/objects.go +++ b/pkg/lib/localstore/objectstore/objects.go @@ -201,7 +201,7 @@ func NewWithLocalstore(ds noctxds.DSTxnBatching) ObjectStore { } type SourceIdEncodedDetails interface { - GetDetailsFromIDBasedSource(id string) (*types.Struct, error) + GetDetailsFromIdBasedSource(id string) (*types.Struct, error) } func (ls *dsObjectStore) Init(a *app.App) (err error) { @@ -245,6 +245,7 @@ type ObjectStore interface { GetOutboundLinksById(id string) ([]string, error) GetInboundLinksById(id string) ([]string, error) + GetWithOutboundLinksInfoById(id string) (*model.ObjectInfoWithOutboundLinks, error) GetDetails(id string) (*model.ObjectDetails, error) GetAggregatedOptions(relationKey string) (options []*model.RelationOption, err error) @@ -275,6 +276,8 @@ type ObjectStore interface { SaveAccountState(state *cafePb.AccountState) (err error) GetCurrentWorkspaceId() (string, error) + SetCurrentWorkspaceId(threadId string) (err error) + RemoveCurrentWorkspaceId() (err error) AddThreadQueueEntry(entry *model.ThreadCreateQueueEntry) (err error) RemoveThreadQueueEntry(threadId string) (err error) @@ -492,6 +495,34 @@ func (m *dsObjectStore) GetCurrentWorkspaceId() (string, error) { return string(val), nil } +func (m *dsObjectStore) SetCurrentWorkspaceId(threadId string) (err error) { + txn, err := m.ds.NewTransaction(false) + if err != nil { + return fmt.Errorf("error creating txn in datastore: %w", err) + } + defer txn.Discard() + + if err := txn.Put(currentWorkspace, []byte(threadId)); err != nil { + return fmt.Errorf("failed to put into ds: %w", err) + } + + return txn.Commit() +} + +func (m *dsObjectStore) RemoveCurrentWorkspaceId() (err error) { + txn, err := m.ds.NewTransaction(false) + if err != nil { + return fmt.Errorf("error creating txn in datastore: %w", err) + } + defer txn.Discard() + + if err := txn.Delete(currentWorkspace); err != nil { + return fmt.Errorf("failed to delete from ds: %w", err) + } + + return txn.Commit() +} + func (m *dsObjectStore) GetAccountState() (cfg *cafePb.AccountState, err error) { txn, err := m.ds.NewTransaction(true) if err != nil { @@ -1011,9 +1042,9 @@ func (m *dsObjectStore) QueryById(ids []string) (records []database.Record, err for _, id := range ids { if sbt, err := smartblock.SmartBlockTypeFromID(id); err == nil { if indexDetails, _ := sbt.Indexable(); !indexDetails && m.sourceService != nil { - details, err := m.sourceService.GetDetailsFromIDBasedSource(id) + details, err := m.sourceService.GetDetailsFromIdBasedSource(id) if err != nil { - log.Errorf("QueryByIds failed to GetDetailsFromIDBasedSource id: %s", id) + log.Errorf("QueryByIds failed to GetDetailsFromIdBasedSource id: %s", id) continue } details.Fields[database.RecordIDField] = pb.ToValue(id) @@ -1413,6 +1444,39 @@ func (m *dsObjectStore) GetInboundLinksById(id string) ([]string, error) { return findInboundLinks(txn, id) } +func (m *dsObjectStore) GetWithOutboundLinksInfoById(id string) (*model.ObjectInfoWithOutboundLinks, error) { + txn, err := m.ds.NewTransaction(true) + if err != nil { + return nil, fmt.Errorf("error creating txn in datastore: %w", err) + } + defer txn.Discard() + + pages, err := m.getObjectsInfo(txn, []string{id}) + if err != nil { + return nil, err + } + + if len(pages) == 0 { + return nil, fmt.Errorf("page not found") + } + page := pages[0] + + outboundsIds, err := findOutboundLinks(txn, id) + if err != nil { + return nil, err + } + + outbound, err := m.getObjectsInfo(txn, outboundsIds) + if err != nil { + return nil, err + } + + return &model.ObjectInfoWithOutboundLinks{ + Info: page, + OutboundLinks: outbound, + }, nil +} + func (m *dsObjectStore) GetDetails(id string) (*model.ObjectDetails, error) { txn, err := m.ds.NewTransaction(true) if err != nil { @@ -1874,6 +1938,31 @@ func (m *dsObjectStore) updateDetails(txn noctxds.Txn, id string, oldDetails *mo return nil } +func storeOptions(txn noctxds.Txn, options []*model.RelationOption) error { + var err error + for _, opt := range options { + err = storeOption(txn, opt) + if err != nil { + return err + } + } + return nil +} + +func storeOption(txn noctxds.Txn, option *model.RelationOption) error { + b, err := proto.Marshal(option) + if err != nil { + return err + } + + optionKey := relationsOptionsBase.ChildString(option.Id) + return txn.Put(optionKey, b) +} + +func (m *dsObjectStore) Prefix() string { + return pagesPrefix +} + func (m *dsObjectStore) Indexes() []localstore.Index { return []localstore.Index{indexObjectTypeRelationObjectId, indexObjectTypeRelationSetId, indexRelationOptionObject, indexRelationObject, indexObjectTypeObject} } @@ -1896,6 +1985,15 @@ func (m *dsObjectStore) makeFTSQuery(text string, dsq query.Query) (query.Query, return dsq, nil } +func (m *dsObjectStore) listIdsOfType(txn noctxds.Txn, ot string) ([]string, error) { + res, err := localstore.GetKeysByIndexParts(txn, pagesPrefix, indexObjectTypeObject.Name, []string{ot}, "", false, 0) + if err != nil { + return nil, err + } + + return localstore.GetLeavesFromResults(res) +} + func (m *dsObjectStore) listRelationsKeys(txn noctxds.Txn) ([]string, error) { txn, err := m.ds.NewTransaction(true) if err != nil { @@ -1949,6 +2047,15 @@ func (m *dsObjectStore) listRelations(txn noctxds.Txn, limit int) ([]*model.Rela return rels, nil } +func isObjectBelongToType(txn noctxds.Txn, id, objType string) (bool, error) { + objTypeCompact, err := objTypeCompactEncode(objType) + if err != nil { + return false, err + } + + return localstore.HasPrimaryKeyByIndexParts(txn, pagesPrefix, indexObjectTypeObject.Name, []string{objTypeCompact}, "", false, id) +} + /* internal */ // getObjectDetails returns empty(not nil) details when not found in the DS func getObjectDetails(txn noctxds.Txn, id string) (*model.ObjectDetails, error) { @@ -1993,6 +2100,20 @@ func hasObjectId(txn noctxds.Txn, id string) (bool, error) { } } +// getSetRelations returns the list of relations last time indexed for the set's dataview +func getSetRelations(txn noctxds.Txn, id string) ([]*model.Relation, error) { + var relations model.Relations + if val, err := txn.Get(setRelationsBase.ChildString(id)); err != nil { + if err != ds.ErrNotFound { + return nil, fmt.Errorf("failed to get relations: %w", err) + } + } else if err := proto.Unmarshal(val, &relations); err != nil { + return nil, fmt.Errorf("failed to unmarshal relations: %w", err) + } + + return relations.GetRelations(), nil +} + // getObjectRelations returns the list of relations last time indexed for the object func getObjectRelations(txn noctxds.Txn, id string) ([]*model.Relation, error) { var relations model.Relations @@ -2007,6 +2128,28 @@ func getObjectRelations(txn noctxds.Txn, id string) ([]*model.Relation, error) { return relations.GetRelations(), nil } +func getOption(txn noctxds.Txn, optionId string) (*model.RelationOption, error) { + var opt model.RelationOption + if val, err := txn.Get(relationsOptionsBase.ChildString(optionId)); err != nil { + log.Debugf("getOption %s: not found", optionId) + if err != ds.ErrNotFound { + return nil, fmt.Errorf("failed to get option from localstore: %w", err) + } + } else if err := proto.Unmarshal(val, &opt); err != nil { + return nil, fmt.Errorf("failed to unmarshal option: %w", err) + } + + return &opt, nil +} + +func getObjectTypeFromDetails(det *types.Struct) ([]string, error) { + if !pbtypes.HasField(det, bundle.RelationKeyType.String()) { + return nil, fmt.Errorf("type not found in details") + } + + return pbtypes.GetStringList(det, bundle.RelationKeyType.String()), nil +} + func (m *dsObjectStore) getObjectInfo(txn noctxds.Txn, id string) (*model.ObjectInfo, error) { sbt, err := smartblock.SmartBlockTypeFromID(id) if err != nil { @@ -2020,7 +2163,7 @@ func (m *dsObjectStore) getObjectInfo(txn noctxds.Txn, id string) (*model.Object var details *types.Struct if indexDetails, _ := sbt.Indexable(); !indexDetails { if m.sourceService != nil { - details, err = m.sourceService.GetDetailsFromIDBasedSource(id) + details, err = m.sourceService.GetDetailsFromIdBasedSource(id) if err != nil { return nil, err } diff --git a/pkg/lib/localstore/stores.go b/pkg/lib/localstore/stores.go index cbe128913..3b4312127 100644 --- a/pkg/lib/localstore/stores.go +++ b/pkg/lib/localstore/stores.go @@ -249,6 +249,21 @@ func AddIndexesWithTxn(store Indexable, txn ds.Txn, newVal interface{}, newValPr return nil } +func AddIndexes(store Indexable, ds ds.TxnDatastore, newVal interface{}, newValPrimary string) error { + txn, err := ds.NewTransaction(false) + if err != nil { + return err + } + defer txn.Discard() + + err = AddIndexesWithTxn(store, txn, newVal, newValPrimary) + if err != nil { + return err + } + + return txn.Commit() +} + func RemoveIndexes(store Indexable, ds ds.TxnDatastore, val interface{}, valPrimary string) error { txn, err := ds.NewTransaction(false) if err != nil { @@ -318,6 +333,16 @@ func GetKeysByIndexParts(txn ds.Txn, prefix string, keyIndexName string, keyInde return GetKeys(txn, key.String(), limit) } +func QueryByIndexParts(txn ds.Txn, prefix string, keyIndexName string, keyIndexValue []string, separator string, hash bool, limit int) (query.Results, error) { + key := getDsKeyByIndexParts(prefix, keyIndexName, keyIndexValue, separator, hash) + + return txn.Query(query.Query{ + Prefix: key.String(), + Limit: limit, + KeysOnly: false, + }) +} + func HasPrimaryKeyByIndexParts(txn ds.Txn, prefix string, keyIndexName string, keyIndexValue []string, separator string, hash bool, primaryIndex string) (exists bool, err error) { key := getDsKeyByIndexParts(prefix, keyIndexName, keyIndexValue, separator, hash).ChildString(primaryIndex) diff --git a/pkg/lib/mill/blob.go b/pkg/lib/mill/blob.go index 14d6ed017..869bc2926 100644 --- a/pkg/lib/mill/blob.go +++ b/pkg/lib/mill/blob.go @@ -12,6 +12,14 @@ func (m *Blob) Encrypt() bool { return true } +func (m *Blob) Pin() bool { + return false +} + +func (m *Blob) AcceptMedia(media string) error { + return nil +} + func (m *Blob) Options(add map[string]interface{}) (string, error) { return hashOpts(make(map[string]string), add) } diff --git a/pkg/lib/mill/image_exif.go b/pkg/lib/mill/image_exif.go index aae1fb0d6..ea06a9fac 100644 --- a/pkg/lib/mill/image_exif.go +++ b/pkg/lib/mill/image_exif.go @@ -41,6 +41,18 @@ func (m *ImageExif) Encrypt() bool { return true } +func (m *ImageExif) Pin() bool { + return false +} + +func (m *ImageExif) AcceptMedia(media string) error { + return accepts([]string{ + "image/jpeg", + "image/png", + "image/gif", + }, media) +} + func (m *ImageExif) Options(add map[string]interface{}) (string, error) { return hashOpts(make(map[string]string), add) } diff --git a/pkg/lib/mill/image_resize.go b/pkg/lib/mill/image_resize.go index 2bd38336f..d374d9b37 100644 --- a/pkg/lib/mill/image_resize.go +++ b/pkg/lib/mill/image_resize.go @@ -54,6 +54,19 @@ func (m *ImageResize) Encrypt() bool { return true } +func (m *ImageResize) Pin() bool { + return false +} + +func (m *ImageResize) AcceptMedia(media string) error { + return accepts([]string{ + "image/jpeg", + "image/png", + "image/gif", + "image/x-icon", + }, media) +} + func (m *ImageResize) Options(add map[string]interface{}) (string, error) { return hashOpts(m.Opts, add) } diff --git a/pkg/lib/mill/mill.go b/pkg/lib/mill/mill.go index 03f25a8ba..bd6b7f509 100644 --- a/pkg/lib/mill/mill.go +++ b/pkg/lib/mill/mill.go @@ -23,6 +23,8 @@ type Result struct { type Mill interface { ID() string Encrypt() bool // encryption allowed + Pin() bool // pin by default + AcceptMedia(media string) error Options(add map[string]interface{}) (string, error) Mill(r io.ReadSeeker, name string) (*Result, error) } diff --git a/pkg/lib/mill/schema/schema.go b/pkg/lib/mill/schema/schema.go index be37b6cf8..98611abd9 100644 --- a/pkg/lib/mill/schema/schema.go +++ b/pkg/lib/mill/schema/schema.go @@ -8,6 +8,9 @@ import ( "github.com/anytypeio/go-anytype-middleware/pkg/lib/pb/storage" ) +// ErrFileValidationFailed indicates dag schema validation failed +var ErrFileValidationFailed = fmt.Errorf("file failed schema validation") + // ErrEmptySchema indicates a schema is empty var ErrEmptySchema = fmt.Errorf("schema does not create any files") @@ -17,12 +20,32 @@ var ErrLinkOrderNotSolvable = fmt.Errorf("link order is not solvable") // ErrSchemaInvalidMill indicates a schema has an invalid mill entry var ErrSchemaInvalidMill = fmt.Errorf("schema contains an invalid mill") +// ErrMissingJsonSchema indicates json schema is missing +var ErrMissingJsonSchema = fmt.Errorf("json mill requires a json schema") + +// ErrBadJsonSchema indicates json schema is invalid +var ErrBadJsonSchema = fmt.Errorf("json schema is not valid") + // FileTag indicates the link should "use" the input file as source const FileTag = ":file" // SingleFileTag is a magic key indicating that a directory is actually a single file const SingleFileTag = ":single" +// ValidateMill is false if mill is not one of the built in tags +func ValidateMill(mill string) bool { + switch mill { + case + "/schema", + "/blob", + "/image/resize", + "/image/exif", + "/json": + return true + } + return false +} + // LinkByName finds a link w/ one of the given names in the provided list func LinkByName(links []*ipld.Link, names []string) *ipld.Link { for _, l := range links { diff --git a/pkg/lib/structs/structs.go b/pkg/lib/structs/structs.go new file mode 100644 index 000000000..53c96a37c --- /dev/null +++ b/pkg/lib/structs/structs.go @@ -0,0 +1,15 @@ +package structs + +import "github.com/gogo/protobuf/types" + +func String(s string) *types.Value { + return &types.Value{Kind: &types.Value_StringValue{StringValue: s}} +} + +func Float64(i float64) *types.Value { + return &types.Value{Kind: &types.Value_NumberValue{NumberValue: i}} +} + +func Bool(b bool) *types.Value { + return &types.Value{Kind: &types.Value_BoolValue{BoolValue: b}} +} diff --git a/pkg/lib/vclock/vclock.go b/pkg/lib/vclock/vclock.go index f9199a2d8..129d3f710 100644 --- a/pkg/lib/vclock/vclock.go +++ b/pkg/lib/vclock/vclock.go @@ -198,6 +198,49 @@ func (vc VClock) Compare(other VClock, cond Condition) bool { return cond&otherIs != 0 } +func (vc VClock) Copy() VClock { + if vc.IsNil() { + return Undef + } + + vc.mutex.RLock() + defer vc.mutex.RUnlock() + + cp := make(map[string]uint64, len(vc.m)) + for key, value := range vc.m { + cp[key] = value + } + return VClock{mutex: &sync.RWMutex{}, m: cp} +} + +func (vc VClock) Increment(s string) { + if vc.IsNil() { + log.Errorf("trying to increment Undef vclock") + return + } + + vc.mutex.RLock() + defer vc.mutex.RUnlock() + + vc.m[s] = vc.m[s] + 1 +} + +func (vc VClock) Map() map[string]uint64 { + if vc.IsNil() { + return make(map[string]uint64, 0) + } + + vc.mutex.RLock() + defer vc.mutex.RUnlock() + + cp := make(map[string]uint64, len(vc.m)) + for key, value := range vc.m { + cp[key] = value + } + + return cp +} + func (vc VClock) Hash() string { var ( sum [32]byte diff --git a/pkg/lib/wallet/pubkey.go b/pkg/lib/wallet/pubkey.go index 65202bc56..a894c4c7a 100644 --- a/pkg/lib/wallet/pubkey.go +++ b/pkg/lib/wallet/pubkey.go @@ -21,6 +21,24 @@ type pubKey struct { crypto.PubKey } +func NewPubKey(t KeypairType, pk crypto.PubKey) (PubKey, error) { + if t != KeypairTypeAccount && t != KeypairTypeDevice { + return nil, fmt.Errorf("incorrect KeypairType") + } + + pubk := pubKey{ + keyType: t, + PubKey: pk, + } + + _, err := getAddress(t, pk) + if err != nil { + return nil, err + } + + return pubk, nil +} + func NewPubKeyFromAddress(t KeypairType, address string) (PubKey, error) { if t != KeypairTypeAccount && t != KeypairTypeDevice { return nil, fmt.Errorf("incorrect KeypairType") diff --git a/util/anonymize/anonymize.go b/util/anonymize/anonymize.go index a4a41991f..d5c13fb50 100644 --- a/util/anonymize/anonymize.go +++ b/util/anonymize/anonymize.go @@ -6,6 +6,8 @@ import ( "math/rand" "unicode" + "github.com/anytypeio/go-anytype-middleware/core/block/editor/state" + "github.com/anytypeio/go-anytype-middleware/core/block/simple" "github.com/anytypeio/go-anytype-middleware/pb" "github.com/anytypeio/go-anytype-middleware/pkg/lib/bundle" "github.com/anytypeio/go-anytype-middleware/pkg/lib/pb/model" @@ -13,6 +15,17 @@ import ( "github.com/gogo/protobuf/types" ) +func State(s *state.State) (res *state.State) { + // blocks + res = s.Copy() + s.Iterate(func(b simple.Block) (isContinue bool) { + b.Model().Content = Block(b.Model()).Content + return true + }) + s.SetDetails(Struct(s.Details())) + return +} + func Change(ch *pb.Change) (res *pb.Change) { resB, _ := ch.Marshal() res = &pb.Change{} diff --git a/util/anyblocks/anyblocks.go b/util/anyblocks/anyblocks.go index 8f3ff4999..bae120958 100644 --- a/util/anyblocks/anyblocks.go +++ b/util/anyblocks/anyblocks.go @@ -6,6 +6,16 @@ import ( "github.com/anytypeio/go-anytype-middleware/pkg/lib/pb/model" ) +func AllBlocksToCode(blocks []*model.Block) (blocksOut []*model.Block) { + for i, b := range blocks { + if t := b.GetText(); t != nil { + blocks[i].GetText().Style = model.BlockContentText_Code + } + } + + return PreprocessBlocks(blocks) +} + func PreprocessBlocks(blocks []*model.Block) (blocksOut []*model.Block) { blocksOut = []*model.Block{} diff --git a/util/console/console.go b/util/console/console.go index 166666820..5e32aa232 100644 --- a/util/console/console.go +++ b/util/console/console.go @@ -23,6 +23,16 @@ func Warn(format string, args ...interface{}) { aurora.Sprintf(aurora.BrightBlack(format), args...))) } +func Error(format string, args ...interface{}) { + fmt.Println(aurora.Sprintf(aurora.Yellow("> Error! %s"), + aurora.Sprintf(aurora.BrightBlack(format), args...))) +} + +func End(format string, args ...interface{}) { + Message(format, args...) + os.Exit(0) +} + func Fatal(format string, args ...interface{}) { fmt.Println(aurora.Sprintf(aurora.Red("> Fatal! %s"), aurora.Sprintf(aurora.BrightBlack(format), args...))) diff --git a/util/constans.go b/util/constans.go new file mode 100644 index 000000000..74f6a8424 --- /dev/null +++ b/util/constans.go @@ -0,0 +1,3 @@ +package util + +const SubIdSeparator = ":" diff --git a/util/ocache/ocache.go b/util/ocache/ocache.go index 628d444c0..d2c8ffb52 100644 --- a/util/ocache/ocache.go +++ b/util/ocache/ocache.go @@ -31,6 +31,12 @@ type LoadFunc func(ctx context.Context, id string) (value Object, err error) type Option func(*oCache) +var WithLogServiceName = func(name string) Option { + return func(cache *oCache) { + cache.log = cache.log.With("service_name", name) + } +} + var WithTTL = func(ttl time.Duration) Option { return func(cache *oCache) { cache.ttl = ttl diff --git a/util/pbtypes/compare.go b/util/pbtypes/compare.go index b445e3681..21607c18d 100644 --- a/util/pbtypes/compare.go +++ b/util/pbtypes/compare.go @@ -160,6 +160,20 @@ func RelationsDiff(rels1, rels2 []*model.Relation) (added []*model.Relation, upd return } +func RelationsEqual(rels1 []*model.Relation, rels2 []*model.Relation) (equal bool) { + if len(rels1) != len(rels2) { + return false + } + + for i := 0; i < len(rels2); i++ { + if !RelationEqual(rels1[i], rels2[i]) { + return false + } + } + + return true +} + func RelationEqualOmitDictionary(rel1 *model.Relation, rel2 *model.Relation) (equal bool) { if rel1 == nil && rel2 != nil { return false @@ -205,6 +219,31 @@ func RelationEqualOmitDictionary(rel1 *model.Relation, rel2 *model.Relation) (eq return true } +// RelationCompatible returns if provided relations are compatible in terms of underlying data format +// e.g. it is ok if relation can have a different name and selectDict, while having the same key and format +func RelationCompatible(rel1 *model.Relation, rel2 *model.Relation) (equal bool) { + if rel1 == nil && rel2 != nil { + return false + } + if rel2 == nil && rel1 != nil { + return false + } + if rel2 == nil && rel1 == nil { + return true + } + + if rel1.Key != rel2.Key { + return false + } + if rel1.Format != rel2.Format { + return false + } + + // todo: should we compare objectType here? + + return true +} + func RelationEqual(rel1 *model.Relation, rel2 *model.Relation) (equal bool) { if !RelationEqualOmitDictionary(rel1, rel2) { return false @@ -227,6 +266,75 @@ func RelationSelectDictEqual(dict1, dict2 []*model.RelationOption) bool { return true } +func RelationSelectDictDiff(dict1, dict2 []*model.RelationOption) (added []*model.RelationOption, updated []*model.RelationOption, removed []string) { + for i := 0; i < len(dict2); i++ { + if opt := GetOption(dict1, dict2[i].Id); opt == nil { + added = append(added, dict2[i]) + continue + } else { + if !OptionEqual(opt, dict2[i]) { + updated = append(updated, dict2[i]) + continue + } + } + } + + for i := 0; i < len(dict1); i++ { + if r := GetOption(dict2, dict1[i].Id); r == nil { + removed = append(removed, dict1[i].Id) + continue + } + } + return +} + +func RelationSelectDictDiffOmitScope(dict1, dict2 []*model.RelationOption) (added []*model.RelationOption, updated []*model.RelationOption, removed []string) { + for i := 0; i < len(dict2); i++ { + if opt := GetOption(dict1, dict2[i].Id); opt == nil { + added = append(added, dict2[i]) + continue + } else { + if !OptionEqualOmitScope(opt, dict2[i]) { + updated = append(updated, dict2[i]) + continue + } + } + } + + for i := 0; i < len(dict1); i++ { + if r := GetOption(dict2, dict1[i].Id); r == nil { + removed = append(removed, dict1[i].Id) + continue + } + } + return +} + +func OptionEqualOmitScope(opt1, opt2 *model.RelationOption) bool { + if (opt1 == nil) && (opt2 != nil) { + return false + } + + if (opt1 != nil) && (opt2 == nil) { + return false + } + + if opt1 == nil && opt2 == nil { + return true + } + + if opt1.Id != opt2.Id { + return false + } + if opt1.Text != opt2.Text { + return false + } + if opt1.Color != opt2.Color { + return false + } + return true +} + func OptionEqual(opt1, opt2 *model.RelationOption) bool { if (opt1 == nil) && (opt2 != nil) { return false @@ -388,3 +496,18 @@ func SortedRange(s *types.Struct, f func(k string, v *types.Value)) { f(k, s.Fields[k]) } } + +func RelationOptionsFilter(options []*model.RelationOption, f func(option *model.RelationOption) bool) []*model.RelationOption { + if len(options) == 0 { + return nil + } + + res := make([]*model.RelationOption, 0, len(options)) + for i := range options { + if f(options[i]) { + res = append(res, options[i]) + } + } + + return res +} diff --git a/util/pbtypes/copy.go b/util/pbtypes/copy.go index 5b6b3cb78..9a80621dd 100644 --- a/util/pbtypes/copy.go +++ b/util/pbtypes/copy.go @@ -29,6 +29,23 @@ func CopyBlock(in *model.Block) (out *model.Block) { return } +// CopyStructMap copies pb struct map, while reusing map values' pointers +func CopyStructMap(in *types.Struct) (out *types.Struct) { + if in == nil { + return nil + } + if in.Fields == nil { + return &types.Struct{} + } + + out = &types.Struct{Fields: make(map[string]*types.Value, len(in.Fields))} + for k, v := range in.Fields { + out.Fields[k] = v + } + + return +} + func CopyStruct(in *types.Struct) (out *types.Struct) { if in == nil { return nil @@ -65,6 +82,13 @@ func CopyVal(in *types.Value) (out *types.Value) { return } +func CopyRelationLink(in *model.RelationLink) (out *model.RelationLink) { + return &model.RelationLink{ + Key: in.Key, + Format: in.Format, + } +} + func CopyRelation(in *model.Relation) (out *model.Relation) { if in == nil { return nil @@ -130,6 +154,28 @@ func CopyRelations(in []*model.Relation) (out []*model.Relation) { return outWrapped.Relations } +func CopyOptions(in []*model.RelationOption) (out []*model.RelationOption) { + if in == nil { + return nil + } + + for _, inO := range in { + inCopy := *inO + out = append(out, &inCopy) + } + return +} + +func CopyRelationsToMap(in []*model.Relation) (out map[string]*model.Relation) { + out = make(map[string]*model.Relation, len(in)) + rels := CopyRelations(in) + for _, rel := range rels { + out[rel.Key] = rel + } + + return +} + func CopyFilter(in *model.BlockContentDataviewFilter) (out *model.BlockContentDataviewFilter) { buf := bytesPool.Get().([]byte) size := in.Size() @@ -143,6 +189,28 @@ func CopyFilter(in *model.BlockContentDataviewFilter) (out *model.BlockContentDa return } +func RelationsFilterKeys(in []*model.Relation, keys []string) (out []*model.Relation) { + for i, inRel := range in { + if slice.FindPos(keys, inRel.Key) >= 0 { + out = append(out, in[i]) + } + } + return +} + +func StructNotNilKeys(st *types.Struct) (keys []string) { + if st == nil || st.Fields == nil { + return nil + } + + for k, v := range st.Fields { + if v != nil { + keys = append(keys, k) + } + } + return +} + func EventsToSliceChange(changes []*pb.EventBlockDataviewSliceChange) []slice.Change { sliceOpMap := map[pb.EventBlockDataviewSliceOperation]slice.DiffOperation{ pb.EventBlockDataview_SliceOperationNone: slice.OperationNone, diff --git a/util/pbtypes/pbtypes.go b/util/pbtypes/pbtypes.go index 3791522bc..31b837dd0 100644 --- a/util/pbtypes/pbtypes.go +++ b/util/pbtypes/pbtypes.go @@ -238,6 +238,39 @@ func HasRelationLink(rels []*model.RelationLink, key string) bool { return false } +func MergeRelations(rels1 []*model.Relation, rels2 []*model.Relation) []*model.Relation { + if rels1 == nil { + return rels2 + } + if rels2 == nil { + return rels1 + } + + rels := make([]*model.Relation, 0, len(rels2)+len(rels1)) + for _, rel := range rels2 { + rels = append(rels, rel) + } + + for _, rel := range rels1 { + if HasRelation(rels, rel.Key) { + continue + } + rels = append(rels, rel) + } + + return rels +} + +func GetObjectType(ots []*model.ObjectType, url string) *model.ObjectType { + for i, ot := range ots { + if ot.Url == url { + return ots[i] + } + } + + return nil +} + func GetRelation(rels []*model.Relation, key string) *model.Relation { for i, rel := range rels { if rel.Key == key { @@ -258,6 +291,16 @@ func GetOption(opts []*model.RelationOption, id string) *model.RelationOption { return nil } +func HasOption(opts []*model.RelationOption, id string) bool { + for _, opt := range opts { + if opt.Id == id { + return true + } + } + + return false +} + func Get(st *types.Struct, keys ...string) *types.Value { for i, key := range keys { if st == nil || st.Fields == nil { @@ -272,6 +315,15 @@ func Get(st *types.Struct, keys ...string) *types.Value { return nil } +func GetRelationKeys(rels []*model.Relation) []string { + var keys []string + for _, rel := range rels { + keys = append(keys, rel.Key) + } + + return keys +} + func GetRelationListKeys(rels []*model.RelationLink) []string { var keys []string for _, rel := range rels { @@ -281,6 +333,60 @@ func GetRelationListKeys(rels []*model.RelationLink) []string { return keys } +func GetOptionIds(opts []*model.RelationOption) []string { + var keys []string + for _, opt := range opts { + keys = append(keys, opt.Id) + } + + return keys +} + +func MergeRelationsDicts(rels1 []*model.Relation, rels2 []*model.Relation) []*model.Relation { + rels := CopyRelations(rels1) + for _, rel2 := range rels2 { + var found bool + + for i, rel := range rels { + if rel.Key == rel2.Key { + rel2Copy := CopyRelation(rel2) + rels[i].SelectDict = rel2Copy.SelectDict + rels[i].Name = rel2Copy.Name + found = true + break + } + } + + if !found { + rels = append(rels, CopyRelation(rel2)) + } + } + return rels +} + +// MergeOptionsPreserveScope adds and updates options from opts2 into opts1 based on the ID +// in case opts2 doesn't have id that opts1 have it doesn't remove the existing one +// in case opts2 has the key that opts1 already have it updates everything except scope +func MergeOptionsPreserveScope(opts1 []*model.RelationOption, opts2 []*model.RelationOption) []*model.RelationOption { + opts := CopyOptions(opts1) + for _, opt2 := range opts2 { + var found bool + for i, opt := range opts { + if opt.Id == opt2.Id { + opts[i].Text = opt2.Text + opts[i].Color = opt2.Color + found = true + break + } + } + if !found { + opt2Copy := *opt2 + opts = append(opts, &opt2Copy) + } + } + return opts +} + // StructToMap converts a types.Struct to a map from strings to Go types. // StructToMap panics if s is invalid. func StructToMap(s *types.Struct) map[string]interface{} { @@ -294,6 +400,59 @@ func StructToMap(s *types.Struct) map[string]interface{} { return m } +func StructIsEmpty(s *types.Struct) bool { + return s == nil || len(s.Fields) == 0 +} + +func GetMapOfKeysAndValuesFromStruct(collection *types.Struct) map[string]*types.Value { + keyMap := map[string]*types.Value{} + if collection == nil { + return keyMap + } + keyStack := []string{""} + collStack := []*types.Struct{collection} + + for len(collStack) != 0 { + coll := collStack[len(collStack)-1] + lastKey := keyStack[len(keyStack)-1] + keyStack = keyStack[:len(keyStack)-1] + collStack = collStack[:len(collStack)-1] + for k, v := range coll.Fields { + subColl, ok := v.Kind.(*types.Value_StructValue) + updatedKey := lastKey + if updatedKey != "" { + updatedKey += "/" + } + updatedKey += k + if !ok { + keyMap[updatedKey] = v + continue + } + collStack = append(collStack, subColl.StructValue) + keyStack = append(keyStack, updatedKey) + } + } + return keyMap +} + +func CompareKeyMaps(before map[string]*types.Value, after map[string]*types.Value) (keysSet []string, keysRemoved []string) { + for k, afterValue := range after { + beforeValue, exists := before[k] + if exists && afterValue.Equal(beforeValue) { + continue + } + keysSet = append(keysSet, k) + } + + for k := range before { + if _, exists := after[k]; exists { + continue + } + keysRemoved = append(keysRemoved, k) + } + return +} + func ValueToInterface(v *types.Value) interface{} { switch k := v.Kind.(type) { case *types.Value_NullValue: @@ -317,6 +476,18 @@ func ValueToInterface(v *types.Value) interface{} { } } +func RelationFormatCanHaveListValue(format model.RelationFormat) bool { + switch format { + case model.RelationFormat_tag, + model.RelationFormat_file, + model.RelationFormat_object, + model.RelationFormat_number: + return true + default: + return false + } +} + func RelationIdToKey(id string) (string, error) { if strings.HasPrefix(id, addr.RelationKeyToIdPrefix) { return strings.TrimPrefix(id, addr.RelationKeyToIdPrefix), nil @@ -330,6 +501,16 @@ func RelationIdToKey(id string) (string, error) { return "", fmt.Errorf("incorrect id format") } +func Delete(st *types.Struct, key string) (ok bool) { + if st != nil && st.Fields != nil { + if _, ok := st.Fields[key]; ok { + delete(st.Fields, key) + return true + } + } + return false +} + type Getter interface { Get(key string) *types.Value } diff --git a/util/slice/slice.go b/util/slice/slice.go index 5d6531aad..529f3e506 100644 --- a/util/slice/slice.go +++ b/util/slice/slice.go @@ -144,3 +144,8 @@ func HasPrefix(value, prefix []string) bool { return true } +func Copy(s []string) []string { + res := make([]string, len(s)) + copy(res, s) + return res +} diff --git a/util/text/text.go b/util/text/text.go index 00164276f..98404f2fc 100644 --- a/util/text/text.go +++ b/util/text/text.go @@ -1,6 +1,9 @@ package text import ( + "crypto/md5" + "fmt" + "strings" "unicode" "unicode/utf16" ) @@ -51,3 +54,9 @@ func StrToUTF16(str string) []uint16 { func UTF16ToStr(b []uint16) string { return string(utf16.Decode(b)) } + +func SliceHash(keys []string) string { + s := strings.Join(keys, "_") + sum := md5.Sum([]byte(s)) + return fmt.Sprintf("%x", sum) +} diff --git a/util/uri/uri.go b/util/uri/uri.go index bf1453f76..d9739fb44 100644 --- a/util/uri/uri.go +++ b/util/uri/uri.go @@ -5,6 +5,8 @@ import ( "os" "regexp" "strings" + + "github.com/anytypeio/go-anytype-middleware/pkg/lib/pb/model" ) var ( @@ -17,6 +19,22 @@ var ( winFilepathPrefixRegex = regexp.MustCompile(`^[a-zA-Z]:[\\\/]`) ) +func ValidateEmail(email string) bool { + if len(email) == 0 { + return false + } + + return noPrefixEmailRegexp.MatchString(email) +} + +func ValidatePhone(phone string) bool { + if len(phone) == 0 { + return false + } + + return noPrefixTelRegexp.MatchString(phone) +} + // ProcessURI tries to verify the web URI and return the normalized URI func ProcessURI(url string) (urlOut string, err error) { if len(url) == 0 { @@ -43,3 +61,21 @@ func ProcessURI(url string) (urlOut string, err error) { return url, fmt.Errorf("not a uri") } + +func ProcessAllURI(blocks []*model.Block) []*model.Block { + for bI, _ := range blocks { + if blocks[bI].GetText() != nil && blocks[bI].GetText().Marks != nil && len(blocks[bI].GetText().Marks.Marks) > 0 { + marks := blocks[bI].GetText().Marks.Marks + + for mI, _ := range marks { + if marks[mI].Type == model.BlockContentTextMark_Link { + marks[mI].Param, _ = ProcessURI(marks[mI].Param) + } + } + + blocks[bI].GetText().Marks.Marks = marks + } + } + + return blocks +}